Saya memiliki dua sistem Linux dual-core yang diinstal menggunakan cgroup Linux dengan kernel yang relatif baru; satu menjalankan Debian Squeeze, yang lain Ubuntu 11,04 Natty Narwhal. Saya mendapatkan penyeimbangan beban CPU dengan cgroup yang bekerja sedikit lebih baik pada sistem Debian meskipun kernelnya lebih tua. Tapi itu tidak tepat untuk semuanya, dan keanehan spesifik yang saya tanyakan di sini terjadi pada kedua sistem.
Jika Anda membaca Manajemen Sumber Daya di Linux dengan Grup Kontrol, ini memberikan contoh yang menunjukkan cara mereproduksi masalah. Ini versi Ubuntu (jalankan ini sebagai root):
cd /sys/fs/cgroup/cpu
[On Debian Squeeze start at /mnt/cgroups/cpu instead]
mkdir low high
echo 512 > low/cpu.shares
echo 2048 > high/cpu.shares
yes low > /dev/null &
echo $! > low/tasks
yes high > /dev/null &
echo $! > high/tasks
ps -C yes -opid,%cpu,psr,args
[repeat that a few times]
killall -9 yes
Saya mengharapkan proses "tinggi" dialokasikan lebih banyak daripada proses "rendah"; apa yang sebenarnya terjadi dengan test case ini selalu lebih seperti ini:
root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
PID %CPU PSR COMMAND
3105 88.3 1 yes low
3106 94.5 0 yes high
Di mana waktunya hampir sama. Inilah pertanyaan saya: mengapa itu terjadi?
Dalam presentasi, masalah ini ditunjukkan hilang dengan menyematkan setiap proses ke CPU yang sama; baris tambahan untuk menguji itu:
taskset -c 1 yes high > /dev/null &
echo $! > high/tasks
taskset -c 1 yes low > /dev/null &
echo $! > low/tasks
ps -C yes -opid,%cpu,psr,args
[later, rinse, repeat]
killall -9 yes
Hasilnya kemudian adalah apa yang saya harapkan untuk dilihat sepanjang waktu: proses "tinggi" mendapatkan persentase CPU yang jauh lebih tinggi:
root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
PID %CPU PSR COMMAND
3128 83.3 1 yes high
3129 20.7 1 yes low
Menjelaskan mengapa ini berhasil akan menjadi langkah yang bermanfaat untuk mencari tahu mengapa yang sebelumnya tidak juga.