GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Level Nice Diabaikan? (Antara Sesi Login yang Berbeda — Dihormati Jika Dimulai Dari Sesi yang Sama.)?

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 :Menulis di 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.


Linux
  1. Grep – Mengapa Kurung Dalam Pola Grep Menghapus Proses Grep Dari Hasil Ps?

  2. Lampirkan Ke Windows yang Berbeda Dalam Sesi?

  3. Tangkapan Layar X Dari Tty?

  1. Saat Menggunakan Putty, Alt-kiri/kanan Berbeda Ketika Byobu Dimulai Secara Otomatis Dari Profil?

  2. Mengapa Ls -l Menghasilkan Ukuran Yang Berbeda Dari Ls -s?

  3. Kapan setsid() berguna, atau mengapa kita perlu mengelompokkan proses di Linux?

  1. Mengapa Cd Bukan Program?

  2. Tidak dapat melepaskan proses anak saat proses utama dimulai dari systemd

  3. Bagaimana cara menginstal 2 versi java yang berbeda pada mesin yang sama dari EPEL