Topik ini membahas pengaturan prioritas proses melalui nilai nice, yaitu mulai dari memulai proses dengan tingkat kesediaan tertentu menggunakan nice, mengubah nilai proses yang sedang berjalan dengan renice, sampai membaca kolom prioritas pada top. Setelah membacanya, prioritas proses tugas berat seperti pengarsipan dapat diturunkan agar pekerjaan interaktif tetap tanggap. Batas hak yang menyertai pengaturan ini juga dipahami, sehingga pesan error yang muncul tidak mengejutkan.
Nilai nice dan maknanya#
Penjadwal (scheduler) kernel membagi waktu prosesor kepada semua proses yang siap berjalan, dan nilai nice adalah petunjuk tentang seberapa besar sebuah proses bersedia mengalah. Nilainya berkisar dari -20 sampai 19, dengan makna yang mudah terbalik bagi pembaca baru: semakin besar angkanya, semakin besar kesediaan proses itu untuk mengalah kepada proses lain, sehingga prioritasnya semakin rendah. Nilai 0 adalah bawaan, nilai 19 menandai proses paling rendah prioritasnya, dan nilai negatif menandai proses yang mendapat porsi waktu prosesor lebih besar.
| Nilai nice | Makna praktis |
|---|---|
| -20 | Prioritas tertinggi, hanya untuk pekerjaan kritis |
| 0 | Bawaan bagi proses yang dimulai pengguna biasa |
| 10 | Pilihan lazim untuk tugas berat yang tidak tergesa |
| 19 | Prioritas terendah, cocok untuk pekerjaan sisa waktu |
Kolom NI pada top menampilkan nilai ini, sedangkan kolom PR di sampingnya menunjukkan prioritas efektif menurut kernel, yang untuk rentang normal berbanding lurus dengan nilai nice. Dua proses dengan nilai sama saling berbagi waktu secara adil, sedangkan selisih 10 poin sudah cukup terasa ketika prosesor sedang penuh.
Memulai proses dengan nice#
Perintah nice menjalankan sebuah program dengan nilai nice tertentu melalui opsi -n, dan proses anak secara bawaan mewarisi nilai proses induknya. Contoh berikut memulai sleep dengan nilai 10, lalu membacanya kembali melalui kolom NI pada ps.
nice -n 10 sleep 300 &
PID=$!
# jeda singkat agar proses nice selesai mengganti citranya menjadi sleep
sleep 0.3
ps -o ni,cmd -p "$PID" NI CMD
10 sleep 300Tanpa opsi -n, nice menambah nilai bawaan sebesar 10 poin, sehingga nice sleep 300 setara dengan nice -n 10 sleep 300. Pemakaian yang lazim adalah melatarbelakangi tugas berat yang tidak tergesa, misalnya nice -n 10 tar czf arsip.tar.gz arsip &, sehingga pengarsipan menyerahkan prosesor kepada pekerjaan interaktif ketika keduanya bersaing. Arah yang sebaliknya memerlukan hak istimewa, dan contoh berikut menunjukkan kegagalan yang sebenarnya ketika proses dicoba dimulai dengan nilai negatif tanpa hak tersebut.
# memulai proses dengan nice negatif tanpa hak root
nice -n -5 bash -c 'ps -o ni= -p $$'
echo "status keluar: $?"nice: cannot set niceness: Permission denied
0
status keluar: 0Pesan cannot set niceness: Permission denied muncul karena menurunkan angka nice berarti meminta porsi waktu prosesor yang lebih besar, dan kernel menolak permintaan itu dari pengguna biasa. Perintahnya tetap dijalankan, seperti terlihat pada baris kedua keluaran. Proses bash -c membaca nilai nice dirinya sendiri dan menemukan angka 0. Status keluarnya pun 0 karena programnya berhasil dijalankan, meskipun permintaan nilai negatifnya ditolak.
Mengubah prioritas dengan renice#
Perubahan pada proses yang sedang berjalan dilakukan dengan renice, dan efeknya berlaku seketika tanpa perlu menjalankan ulang prosesnya. Bentuk yang dipakai adalah renice -n nilai -p PID, dan pesan balasannya memuat PID yang pada contoh di halaman ini ditandai N karena berubah di setiap eksekusi. Proses sleep dari bagian sebelumnya masih bernilai 10 dan sekarang dinaikkan menjadi 15.
# menaikkan angka nice pada proses yang sedang berjalan
renice -n 15 -p "$PID" 2>&1 | awk '{$1="N"; print}'
ps -o ni=,cmd= -p "$PID"N (process ID) old priority 10, new priority 15
15 sleep 300Arah sebaliknya, yaitu menurunkan angka agar proses lebih diprioritaskan, kembali memerlukan hak istimewa. Percobaan menurunkan nilai dari 15 menjadi 5 pada proses milik sendiri berakhir dengan penolakan kernel.
# menurunkan angka nice butuh hak root
renice -n 5 -p "$PID" 2>&1 | sed 's/for [0-9][0-9]* (process ID)/for N (process ID)/'
ps -o ni=,cmd= -p "$PID"
kill -9 "$PID"
wait "$PID" 2>/dev/null
echo "proses contoh dihentikan"renice: failed to set priority for N (process ID): Permission denied
15 sleep 300
proses contoh dihentikanPesan errornya menyebut penolakan izin, dan pembacaan ps setelahnya menegaskan bahwa nilai tetap 15. Aturan haknya ringkas: setiap pengguna boleh menaikkan angka nice proses miliknya sendiri, sedangkan penurunan angka dan perubahan atas proses milik pengguna lain memerlukan hak root. Setelah perubahan dilakukan, hasilnya dapat diperiksa ulang dengan kolom NI pada ps atau dengan mengamati baris proses pada top. Perubahan bertahap sebesar lima poin per langkah memudahkan penilaian dampaknya terhadap kecepatan sistem.
Kesalahan umum#
- Menganggap nice sebagai saklar kecepatan yang pasti. Nilai ini hanya berpengaruh ketika prosesor diperebutkan, dan proses bernilai 19 tetap berjalan penuh pada mesin yang lengang. Gunakan nice untuk mengatur keadilan waktu prosesor pada saat beban tinggi, bukan untuk menyetel kecepatan.
- Mencoba nilai negatif tanpa hak administratif. Kernel menolaknya dengan pesan
Permission denied, baik saat memulai dengannice -n -5maupun saat menurunkan angka denganrenice. Jalankan perintahnya melaluisudoapabila memang dibutuhkan. - Mengira perubahan renice menuntut proses diulang. Efeknya berlaku seketika pada proses yang sedang berjalan, sehingga penyesuaian dapat dilakukan di tengah pekerjaan berat.
- Mengubah nilai proses milik pengguna lain. Kernel menolaknya dengan pesan error
Operation not permitted, dan hanya root yang bebas mengubah proses milik siapa pun.
Ringkasan#
- Nilai nice berkisar dari -20 sampai 19, semakin besar semakin rendah prioritasnya, dan proses mewarisi nilai induknya.
nice -n nilai perintahmemulai proses dengan nilai tertentu, sedangkanrenice -n nilai -p PIDmengubah proses yang sedang berjalan dan berlaku seketika.- Pengguna biasa hanya boleh menaikkan angka nice proses miliknya, sedangkan penurunan angka dan proses milik pengguna lain memerlukan hak root.
- Kolom
NIpadapsdantopmenampilkan nilai tersebut, danPRpadatopmenunjukkan prioritas efektif menurut kernel.
Referensi#
- nice(1) — Ubuntu manpages — Pemakaian nice untuk memulai program dengan nilai prioritas tertentu.
- renice(1) — Ubuntu manpages — Bentuk argumen renice dan aturan hak atas perubahan nilainya.
- getpriority(2) — Linux man-pages project — Skala nice -20 sampai 19 dan aturan hak penurunan nilai di tingkat kernel.