Bagaimana saya bisa mengonfigurasi cgroup untuk membagikan sumber daya secara adil antara pengguna?

11

Dulu ada opsi konfigurasi kernel yang disebut sched_user atau sejenis di bawah cgroups. Ini memungkinkan (setahu saya) semua pengguna untuk berbagi sumber daya sistem secara adil. Di 2.6.35 tidak tersedia. Apakah ada cara saya dapat mengkonfigurasi sistem saya untuk secara otomatis berbagi sumber daya io / cpu / memori antara semua pengguna (termasuk root?). Saya belum pernah membuat cgroup sebelumnya, apakah ada tutorial yang bagus untuk melakukannya? Terima kasih banyak.

NightwishFan
sumber
Yah, saya mengambil jarahan di paket cgroups-bin di Ubuntu, dan saya cukup yakin itu "melakukan ini" secara default jika saya hanya menginstalnya. Saya berasumsi akan membutuhkan pengaturan, namun saya kira itu hanya terjadi jika Anda memiliki kebutuhan khusus. Saya diuji dengan menjalankan stres dengan 2 thread cpu di bawah root dan 2 di bawah pengguna saya dan semua 4 thread tampaknya berbagi 50% di atas, yang membuat saya berpikir itu berfungsi. Ini mungkin "menyelesaikannya" bagi saya, namun jika ada sesuatu yang saya ingin memiliki cara yang lebih jelas untuk mengonfirmasi, atau ide yang lebih baik bagaimana mengkonfigurasinya, terima kasih lagi!
NightwishFan

Jawaban:

12

Dokumentasi kernel menyediakan cakupan umum cgroup dengan contoh-contoh.

The cgroups-binpaket (yang tergantung pada libcgroup1) sudah disediakan oleh distribusi harus baik-baik.

Konfigurasi dilakukan dengan mengedit dua file berikut:

/etc/cgconfig.conf

Digunakan oleh libcgroup untuk mendefinisikan grup kontrol, parameternya dan mount point.

/etc/cgrules.conf

Digunakan oleh libcgroup untuk mendefinisikan grup kontrol tempat proses tersebut berada.

File konfigurasi tersebut sudah memiliki contoh di dalamnya, jadi cobalah sesuaikan dengan kebutuhan Anda. Halaman manual membahas konfigurasi mereka dengan cukup baik.

Setelah itu, mulailah manajer beban kerja dan daemon aturan:

service cgconfig restart
service cgred restart

Manajer beban kerja (cgconfig) bertanggung jawab untuk mengalokasikan sumber daya.
Menambahkan proses baru ke manajer:

cgexec [-g <controllers>:<path>] command [args]

Menambahkan proses yang sudah berjalan ke manajer:

cgclassify [-g <controllers>:<path>] <pidlist>

Atau secara otomatis di atas file cgrules.conf dan Daemon Aturan CGroup (cgred), yang memaksa setiap proses yang baru lahir ke dalam grup yang ditentukan.


Contoh /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Contoh /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Ini akan membagikan sumber daya CPU sekitar 50-50 antara 'alice' pengguna dan 'bob'

mengibaskan
sumber
Mempelajari kelompok, bookmark ini. Terima kasih.
Jigar