Dalam file layanan systemd, seseorang dapat mengatur opsi terkait penjadwalan berikut (dari systemd.exec
halaman manual , koreksi saya jika saya salah):
Nice Mengatur level nice default (prioritas penjadwalan) untuk proses yang dijalankan. Mengambil bilangan bulat antara -20 (prioritas tertinggi) dan 19 (prioritas terendah). Lihat setpriority (2) untuk detailnya.
Yang merupakan level bagus yang akrab. Sepertinya pengaruhnya 'subverted' agak karena fitur 'autogroup' dari kernel linux baru-baru ini. Jadi opsi di bawah ini mungkin yang ingin saya setel agar proses berjalan dengan baik untuk pengalaman desktop saya.
CPUSchedulingPolicy Menetapkan kebijakan penjadwalan CPU untuk proses yang dijalankan. Mengambil salah satu dari yang lain, batch, idle, fifo atau rr. Lihat sched_setscheduler (2) untuk detailnya.
CPUSchedulingPriority Menetapkan prioritas penjadwalan CPU untuk proses yang dijalankan. Kisaran prioritas yang tersedia tergantung pada kebijakan penjadwalan CPU yang dipilih (lihat di atas). Untuk kebijakan penjadwalan waktu nyata, integer antara 1 (prioritas terendah) dan 99 (prioritas tertinggi) dapat digunakan. Lihat sched_setscheduler (2) untuk detailnya.
CPUSchedulingResetOnFork Membawa argumen boolean. Jika benar, prioritas dan kebijakan penjadwalan CPU yang meningkat akan diatur ulang saat proses dieksekusi bercabang, dan karenanya tidak dapat bocor ke proses anak. Lihat sched_setscheduler (2) untuk detailnya. Default ke false.
Saya mengerti pilihan terakhir. Saya mengumpulkan dari penjelasan dua yang pertama bahwa saya dapat memilih kebijakan penjadwalan dan kemudian, mengingat kebijakan itu, menjadi prioritas. Tidak sepenuhnya jelas bagi saya apa yang harus saya pilih untuk jenis tugas apa. Sebagai contoh, apakah aman untuk memilih 'idle' untuk tugas cadangan (relatif intensif CPU, karena deduplicating), atau yang lain lebih cocok?
Secara umum, mendapatkan gambaran umum yang dapat dipahami dari setiap kebijakan, dengan masing-masing prioritas dan kesesuaian untuk tujuan tertentu adalah apa yang saya cari. Juga interaksi dengan level yang bagus menarik.
Di samping penjadwalan CPU, ada penjadwalan IO. Saya kira ini sesuai dengan ionice
(koreksi saya jika saya salah).
IOSchedulingClass Menetapkan kelas penjadwalan I / O untuk proses yang dieksekusi. Mengambil bilangan bulat antara 0 dan 3 atau salah satu dari string tidak ada, realtime, usaha terbaik atau idle. Lihat ioprio_set (2) untuk detailnya.
IOSchedulingPriority Menetapkan prioritas penjadwalan I / O untuk proses yang dieksekusi. Mengambil bilangan bulat antara 0 (prioritas tertinggi) dan 7 (prioritas terendah). Prioritas yang tersedia tergantung pada kelas penjadwalan I / O yang dipilih (lihat di atas). Lihat ioprio_set (2) untuk detailnya.
Kami di sini melihat struktur yang sama dengan penjadwalan CPU. Saya mencari jenis informasi yang sama juga.
Untuk semua opsi 'Penjadwalan', halaman manual yang dirujuk tidak cukup jelas bagi saya, kebanyakan dalam menerjemahkan hal-hal ke sudut pandang pengguna desktop yang cenderung teknis.
nice
nilainya berlaku).Jawaban:
CPUScheduling {Kebijakan | Prioritas}
Tautan memberi tahu Anda bahwa
CPUSchedulingPriority
hanya boleh ditetapkan untukfifo
ataurr
("real-time") tugas. Anda tidak ingin memaksakan penjadwalan waktu nyata pada layanan.CPUSchedulingPolicy=other
adalah standarnya.Itu pergi
batch
danidle
. Perbedaan di antara mereka hanya relevan jika Anda memiliki banyak tugas idle-mengkonsumsi CPU pada saat yang sama. Secara teoribatch
memberikan throughput yang lebih tinggi (dengan imbalan latensi yang lebih lama). Tapi ini bukan kemenangan besar, jadi itu tidak benar-benar relevan dalam kasus ini.idle
benar-benar kelaparan jika ada hal lain yang menginginkan CPU. Prioritas CPU agak kurang signifikan daripada sebelumnya, untuk sistem UNIX lama dengan satu inti. Saya akan lebih bahagia memulai dengannice
, misalnya level 10 atau 14 yang bagus, sebelum beralih keidle
. Lihat bagian selanjutnya.Namun sebagian besar desktop relatif idle sebagian besar waktu. Dan ketika Anda memiliki CPU babi yang akan mencegah tugas latar belakang, itu umum untuk babi hanya menggunakan salah satu CPU Anda. Dengan pemikiran itu, saya tidak akan merasa terlalu berisiko menggunakan
idle
dalam konteks desktop atau laptop biasa. Kecuali jika memiliki CPU Atom / Celeron / ARM dengan atau di bawah sekitar 15 watt ; maka saya ingin melihat hal-hal sedikit lebih hati-hati.Apakah level bagus 'disubversi' oleh fitur kernel 'autogroup'?
Ya.
Autogrouping sedikit aneh. Penulis
systemd
tidak suka heuristik, bahkan untuk desktop. Jika Anda ingin menguji penonaktifan autogrouping, Anda dapat mengatur sysctlkernel.sched_autogroup_enabled
menjadi0
. Saya kira itu yang terbaik untuk menguji dengan mengatur sysctl di konfigurasi permanen dan me-reboot, untuk memastikan Anda menyingkirkan semua autogroup.Maka Anda harus dapat tingkat yang bagus untuk layanan Anda tanpa masalah. Setidaknya dalam versi systemd saat ini - lihat bagian selanjutnya.
Misalnya level 10 yang bagus akan mengurangi bobot setiap utas dalam penjadwal CPU Linux, menjadi sekitar 10%. Level 14 bagus di bawah 5%. (Tautan: rumus lengkap )
Lampiran: apakah level bagus 'ditumbangkan' oleh cgroup systemd?
DefaultCPUAccounting=
Pengaturan saat ini secara default dimatikan, kecuali jika dapat diaktifkan tanpa juga mengaktifkan kontrol CPU berdasarkan per layanan. Jadi itu harus baik-baik saja. Anda dapat memeriksa ini di dokumentasi Anda saat ini:man systemd-system.conf
Ketahuilah bahwa kontrol CPU per layanan juga akan diaktifkan ketika layanan mana pun menetapkan CPUAccounting / CPUWeight / StartupCPUWeight / CPUShares / StartupCPUShares.
Ekstrak blog berikut kedaluwarsa (tetapi masih online). Perilaku default telah berubah, dan dokumentasi referensi telah diperbarui.
sumber
Saran penyetelan performa klasik adalah "Jangan Optimalkan, Tolok Ukur".
Alih-alih prihatin dengan saran umum, mulailah dengan kasus khusus yang Anda khawatirkan ditingkatkan dan telah dijadikan tolok ukur untuk memiliki masalah kinerja tertentu . Biarkan data membiarkan Anda ke arah kanan untuk menyetel. Dengan data, mungkin jelas jika proses Anda mengalami prioritas yang buruk, memonopoli CPU atau memiliki masalah lain.
Desktop modern sering kali cepat bekerja tanpa penyetelan apa pun.
sumber
systemd-analyze
denganblame
danplot
saya bisa mengurangi waktu boot pada RPi yang lebih lama lebih dari satu menit. Tentu, ketika sampai pada analisis masalah maka diperlukan untuk mengukur alih-alih memulai "optimasi" sebelum waktunya.