Bagaimana mungkin untuk mengubah frekuensi switch-konteks Linux (linaro, ubuntu, debian)?
Saya setuju untuk menukar sistem yang kurang responsif dengan sistem yang lebih efisien.
EDIT1: Saya memiliki proses utama yang ingin saya jalankan secepat mungkin (siklus clock maksimal per detik), jadi saya berpikir untuk mengurangi frekuensi konteks-switch (= meningkatkan timeslice). Pertanyaannya adalah bagaimana melakukannya, dan apakah akan ada efek yang signifikan. Bisakah saya menghitung biaya pengalih konteks? Artinya, dapatkah saya memperkirakan jika saya meningkatkan kutu waktu dua, apa yang akan saya dapatkan dalam kinerja% untuk proses utama yang saya pedulikan?
linux
linux-kernel
process
Nadav B
sumber
sumber
Jawaban:
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.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 statusNO_HZ_FULL
manfaat ketika ada beberapa proses runnable pada CPU -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/ ).
sumber