Saat saya memulai dua proses pemakan CPU dengan level bagus yang berbeda, mis.
Proses 1:
nice -19 sh -c 'while true; do :; done'
Proses 2:
sh -c 'while :; do true; done'
(Saya mengubah urutan :
dan true
hanya untuk membedakan proses dalam output ps
atau top
),
level bagus tampaknya diabaikan dan keduanya menggunakan jumlah CPU yang sama.
Output dari top
seperti
PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND
8187 <user> 39 19 21.9m 3.6m 45.8 0.0 0:20.62 R sh -c while true; do :; done
8188 <user> 20 0 21.9m 3.5m 45.6 0.0 0:20.23 R sh -c while :; do true; done
[...]
(tentu saja, %CPU
-nilai sedikit berbeda dari sampel ke sampel, tetapi rata-rata tampaknya sama).
top
menunjukkan bahwa kedua proses berjalan dengan nilai bagus yang berbeda, tetapi tampaknya masih mendapatkan jumlah waktu CPU yang sama.
Kedua perintah dijalankan oleh pengguna yang sama dari terminal yang berbeda (keduanya adalah shell login).
Jika dijalankan dari terminal yang sama, mereka berperilaku seperti yang diharapkan:Proses yang lebih baik memberi jalan bagi yang tidak terlalu bagus.
Apa alasannya? Bagaimana cara membuat pekerjaan yang bagus secara global di seluruh mesin?
Itu berbeda pada mesin itu beberapa waktu sebelumnya, di mana nilai-nilai bagus tampaknya dihormati.
Ini adalah prosesor tunggal/mesin inti tunggal.
Untuk informasi:
- Kernel:Versi 4.4.5 (kernel saham Arch Linux);
uname -r
:4.4.5-1-ARCH
, -
/proc/cpuinfo
adalah:processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Core(TM)2 Solo CPU U3500 @ 1.40GHz stepping : 10 microcode : 0xa0c cpu MHz : 1400.000 cache size : 3072 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm tpr_shadow vnmi flexpriority bugs : bogomips : 2794.46 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:
Jawaban yang Diterima:
Ah, ini bukan fitur systemd-login di mana setiap pengguna mendapatkan cgroupnya sendiri. Saya pikir perubahan yang bertanggung jawab di sini lebih tua; mereka hanya mirip. (Saya mencari "penjadwalan adil grup proses", berpikir itu mungkin sesuatu yang didasarkan pada "grup proses" unix yang saya tidak pernah benar-benar mengerti). Wikipedia:
Kernel Linux menerima patch untuk CFS pada bulan November 2010 untuk kernel 2.6.38 yang telah membuat scheduler lebih adil untuk digunakan pada desktop dan workstation.
Saat tugas memanggil __proc_set_tty(), referensi luas proses ke grup default akan dihapus, grup tugas baru dibuat, dan proses dipindahkan ke grup tugas baru. Anak-anak kemudian mewarisi kelompok tugas ini, dan meningkatkan jumlah refnya. Saat keluar, referensi ke grup tugas saat ini dijatuhkan ketika referensi terakhir ke setiap struct sinyal dijatuhkan. Grup tugas dihancurkan ketika struct sinyal terakhir yang mereferensikannya dibebaskan. Pada waktu pemilihan runqueue, IFF tugas tidak memiliki penetapan cgroup, autogroup saat ini digunakan.
Fitur ini diaktifkan dari boot secara default jika CONFIG_SCHED_AUTOGROUP dipilih, tetapi dapat dinonaktifkan melalui opsi boot noautogroup, dan juga dapat dihidupkan/dimatikan dengan cepat [melalui
/proc/sys/kernel/sched_autogroup_enabled
:Menulisdi sana menonaktifkannya untuk tugas yang baru dibuat, menulis
1
mengaktifkannya.]Masalah utama yang diselesaikan dengan ini adalah untuk sistem multi-core serta multi-cpu (SMP) yang mengalami peningkatan waktu respons interaktif saat melakukan tugas lain yang menggunakan banyak utas dalam tugas tersebut. Penjelasan sederhana adalah bahwa seseorang masih dapat menonton video, membaca email, dan melakukan aktivitas desktop biasa lainnya tanpa gangguan atau gangguan saat mengkompilasi kernel Linux atau proses serupa seperti encoding video. Namun, ada yang keberatan dengan pernyataan ini.