Jika tugas Anda adalah satu - satunya proses yang meminta waktu pada CPU tertentu, tidak akan ada konteks yang beralih di antara tugas-tugas :-). Tetapi CPU mungkin masih terganggu, menyebabkan konteks beralih ke kernel dan kembali. Dan satu kemungkinan penyebabnya adalah pre-emption timer, memeriksa apakah ada tugas lain untuk dijalankan pada CPU ini ...
Linux dapat menghindari penghentian pre-emption timer pada cpu ketika tidak ada alasan untuk melakukannya. Lihat CONFIG_NO_HZ_FULL
. Untuk menggunakan fitur ini, itu harus diaktifkan ketika kernel dibangun, dan itu harus diaktifkan menggunakan opsi boot.
Secara default, tidak ada CPU yang akan menjadi CPU tick-adaptif. Parameter boot "nohz_full =" menentukan CPU tick-adaptif. Sebagai contoh, "nohz_full = 1,6-8" mengatakan bahwa CPU 1, 6, 7, dan 8 adalah CPU tick-adaptif. Perhatikan bahwa Anda dilarang menandai semua CPU sebagai CPU centang-adaptif [...]
LWN.net mengatakan "menurut Ingo Molnar, sebanyak 1% dari waktu CPU akan disimpan" untuk CPU tick-adaptif. Dokumen kernel mengatakan ini memiliki enam biaya berbeda, dan ada juga daftar "MASALAH UMUM".
Keuntungan ini relatif kecil, terutama dibandingkan dengan potensi perolehan throughput dari pengurangan frekuensi konteks-switch antara beberapa tugas, seperti yang dirujuk dalam jawaban ini: Bagaimana mengubah panjang irisan waktu yang digunakan oleh penjadwal CPU Linux?
Cetak kecil: pengukuran ini pre-date Spectre, Meltdown, KPTI, dan x86 ASID mendukung :-(. Dan saya kira itu juga berlaku untuk perangkat keras yang agak lama. Tanyakan pada pakar kernel atau jalankan pengukuran Anda sendiri tentang bagaimana biaya konteks-switch memiliki diubah pada versi kernel dan perangkat keras spesifik Anda ... PTI sebagian besar seharusnya dimitigasi oleh ASID, kecuali untuk perangkat lunak yang sangat sering memanggil kernel, contoh utama adalah basis data. Tapi saya tidak memiliki pemahaman yang baik tentang angka-angka .
Harapan Molnar dalam tambalan RFC asli adalah bahwa seiring berjalannya waktu, "kemungkinan akan diaktifkan oleh sebagian besar distro Linux". Saya perhatikan Fedora 28 menyediakan kernel default yang dibangun dengan NO_HZ_FULL
dukungan. Namun, Debian 9 tidak.
Baru-baru ini, Linux v4.17 menghapus sisa tick 1 Hz dari nohz_full
CPU . Saya membayangkan efek pada throughput cukup kecil :-), tapi saya sudah mencoba mengikuti status NO_HZ_FULL
manfaat ketika ada beberapa proses runnable pada CPU -
setelah kita mencapai 0 Hz kita dapat [kemudian] menghapus asumsi centang periodik dari nr_running> = 2 juga, dengan secara esensial menginterupsi tugas sibuk hanya sesering kendala sched_latency yang harus kita lakukan - setiap 4-40 msecs, tergantung pada nr_running .
Ini agak membingungkan karena pre-emption sudah mulai menggunakan centang terpisah yang lebih tepat di v2.6.25-rc1, komit 8f4d37ec073c, "sched: tick preemption high-res" . Ditemukan melalui komentar ini pada artikel LWN.net yang sama: https://lwn.net/Articles/549754/ ).