Saya memiliki 3 proses pada satu mesin inti. Setiap proses persis sama dan membakar CPU secepat mungkin (loop ketat). Dua di antaranya ( A
dan B
) diluncurkan dengan cgexec dalam grup terpisah dengan pembagian diatur ke 512 dan 512. Yang ketiga ( C
) diluncurkan secara teratur, bukan dengan cgexec.
Setelah semuanya aktif dan berjalan, C
dapatkan 66% dari CPU sementara A
dan B
bagi 33%. Jika saya bunuh C
maka A
dan B
dapatkan masing-masing 50% (seperti yang diharapkan).
Mengapa C
mendapat 66%? Saya akan mengharapkan masing-masing 33% dalam skenario ini, atau mungkin 50% (C), 25% (A) dan 25% (B). 66% tidak akan C
berhasil tidak peduli bagaimana saya menghitungnya.
Secara umum, saya ingin memahami bagaimana proses diluncurkan tanpa cgexec
berinteraksi dengan proses yang diluncurkan dengan cgexec
ketika datang ke berbagi sumber daya (CPU pada khususnya, tetapi jawaban yang lebih umum akan dihargai jika tidak terlalu rumit).
top
dan saya percaya mereka dimulai cukup hanya dari prompt perintah:cgexec -g cpu:foo myprogram
dan./myprogram
. Sudah lama jadi saya tidak ingat dengan pasti.cpu.shares
adalah opsi konfigurasi yang sangat aneh; Saya merekomendasikan pemisahan hal-hal oleh CPU jika memungkinkan menggunakancpuset.cpus
sebagai gantinya.Jawaban:
Cgroup bersifat hierarkis dan diwariskan oleh semua subproses. Jadi semua proses harus dalam beberapa cgroup. Secara default itu adalah root cgroup dan secara default ia memiliki 1024 saham yang dua kali lipat A dan B dalam contoh Anda.
Waktu CPU dibagi antara kelompok berdasarkan berat yang diberikan kepada mereka di cpu.shares.
Jika A memiliki 1024 saham dan B 512 dan C 256 dan D 256, distribusi waktu cpu adalah A - 50%, B - 25%, C dan D 12,5%.
sumber
cgexec
. Jadi non-cgexec
proses akan mendapatkan 50% dan proses yang dikelompokkan akan berbagi 50% sisanya. Dalam proses cgrouped mereka berbagi 50% secara merata, yang berarti keduanya mendapatkan 25%. Ini masuk akal, tetapi itu bukan perilaku yang saya amati. Apa yang saya lihat adalah 66%, 33% dan 33%. Bisakah Anda memperbarui jawaban untuk memasukkan lebih banyak detail dan mungkin contoh distribusi?cgexec
mendapat 1024 saham. Setiap proses yang diluncurkan dengancgexec
mendapatkan bagian yang ditentukan. Jadi dalam hal ini, satu proses mendapat 1024 saham dan dua lainnya mendapatkan masing-masing 512, sehingga distribusi yang saya lihat. Maukah Anda memperbarui jawaban Anda untuk memberikan sedikit kejelasan, misalnya, dengan contoh?1024 + 512 + 512 = 2048
.512/2048 == 25%
. Saya tidak percaya jawaban ini benar, paling tidak di permukaan.