Artikel:Menjaga pemakaian resource proses (1)
Apakah Anda pernah mengalami, ketika sedang asyik menonton film di
Linux tiba-tiba gambar dan/atau suaranya menjadi terputus-putus karena
ada aktivitas proses lain seperti mengkopi file atau backup harian?
Apakah Anda ingin proses-proses lain tersebut tidak mengganggu
responsivitas GUI dan keasyikan Anda menikmati film? Artikel ini akan
menjelaskan beberapa tekniknya.
Sebagai sistem operasi multitasking dan multiuser, Linux pun memiliki
berbagai cara mengatur proses dan user. Termasuk di antaranya
pemakaian resource proses seperti bandwidth I/O, CPU (prioritas
penjadwalan), bandwidth jaringan, dll. Kita dapat mengeset
proses-proses mana saja yang ingin lebih diutamakan, terutama yang
sifatnya lebih kritikal terhadap waktu (real-time) seperti proses GUI
dan multimedia. Sementara proses lain dapat kita rendahkan
prioritasnya sehingga tidak mengganggu proses-proses yang penting.
Ada beberapa perintah yang dapat kita gunakan yang akan kita bahas
satu persatu pada kesempatan kali ini yaitu: kill, loadwatch,
nice/renice, ionice.
kill
Perintah kill berguna untuk mengirimkan sinyal kepada sebuah
proses. Ada beberapa macam sinyal yang dikenal, dan tidak semuanya
berguna untuk "membunuh" sebuah proses, seperti yang diindikasikan
oleh nama perintahnya. Sinyal STOP misalnya, dapat digunakan
untuk menghentikan sementara (pause) sebuah proses yang Anda curigai
menghabiskan resource atau membuat sistem lambat. Sintaks perintah
kill:
kill -STOP <PID> ...
Di mana <PID> adalah PID proses ybs. Anda perlu menjadi root untuk
bisa menyetop proses lain yang bukan milik Anda.
Bagaimana mencari proses-proses yang nakal dan berpotensial untuk
di-STOP? Anda dapat menggunakan utilitas semacam top, htop, atau
atop. Program ini dapat mengurutkan proses berdasarkan pemakaian CPU,
memori, disk, dll dan Anda dapat melihat siapa yang bertengger di
posisi-posisi atas.
Anda juga dapat melakukan pengiriman sinyal STOP lewat program-program
Ketika load sistem sudah turun, maka proses-proses yang Anda 'pause'
tadi dapat Anda aktivasi kembali dengan mengirim sinyal pasangannya
yaitu CONT:
kill -CONT <PID> ...
Selain perintah kill, terdapat juga perintah killall yang sama
seperti kill namun alih-alih menggunakan PID, Anda menggunakan nama
prosesnya.
Anda dapat melakukan STOP dan CONT ini secara berkala bergantian,
misalnya dulu saya menggunakan skrip bernama backup-harian untuk
melakukan proses backup harian. Setiap proses ini berjalan
malam-malam, sistem terasa berat sekali. Karena itu saya biasanya
mengetikkan perintah ini:
# while true; do
killall -STOP backup-harian; sleep 7
killall -CONT backup-harian; sleep 2
done
Sehingga, skrip backup berjalan 2 detik saja, lalu distop selama 7
detik, lalu berjalan kembali selama 2 detik, dst. Efeknya adalah, load
menjadi lebih ringan dan aktivitas saya di depan komputer tidak
terlalu terganggu.
loadwatch
Loadwatch adalah sebuah utilitas yang cara kerjanya pada dasarnya sama
dengan kill CONT dan STOP bergantian, namun selangkah lebih maju yaitu
mengamati tingkat load sistem (load sistem dapat dilihat misalnya
dengan perintah w atau cat /proc/loadavg). Nilai load
sistem diwakili dengan tiga angka yaitu load rata-rata 1 menit
terakhir (load1), load rata-rata 5 menit terakhir (load5), dan load
rata-rata 15 menit terakhir (load15). Arti dari angka ini dapat
mengindikasikan tingkat kesibukan dan juga responsivitas sistem,
walaupun patokan persisnya dapat berbeda dari sistem ke sistem.
Cara menggunakan loadwatch:
loadwatch -h <ANGKATINGGI> -l <ANGKARENDAH> <PERINTAH...>
loadwatch -h ... -l ... -p <PID>
Loadwatch dapat menjalankan sebuah perintah yang dimonitor, atau
memonitor proses yang sudah berjalan (dengan menyebutkan PID-nya lewat
opsi -p). Proses akan distop otomatis begitu load sistem mencapai
<ANGKATINGGI> atau lebih, dan distart lagi begitu load sistem sudah
turun di bawah <ANGKARENDAH>. Saya biasanya menggunakan -h 3.25 -l 2.0
untuk proses backup filesystem harian. Silakan bereksperimen mencari
nilai yang pas bagi Anda. Kadang-kadang jika kegiatan interaktif saya
tidak sibuk (misalnya hanya mengetik, bukan memainkan DVD dll) saya
tidak menggunakan loadwatch sama sekali, karena proses background yang
berjalan apapun tidak mengganggu responsivitas mengetik.
nice/renice
Cara menggunakan kill dan loadwatch walau cukup efektif bisa dibilang
sebagai cara yang "kasar", karena membuat sebuah proses jadi
terhenti-henti total secara periodik. Dan juga manual, karena kita
harus menentukan sendiri nilai-nilai stop dan startnya. Agak repot
jika kita ingin mengatur beberapa proses sekaligus.
Cara alternatif adalah menggunakan perintah nice/renice untuk mengatur
'nice level' sebuah proses. Setiap proses di Unix memiliki nice level
tertentu yang mengatur prioritas penjadwalan CPU oleh kernel, dari -20
(paling tinggi/diutamakan) hingga +19 (paling rendah/tidak
diutamakan). Defaultnya sebuah proses berjalan dengan nice level 0
(netral), atau nice level proses induknya. Semakin positif nilainya,
prioritasnya semakin rendah (si proses semakin "nice" pada proses
lain), sementara sebaliknya jika semakin negatif maka semakin tinggi
prioritasnya.
Untuk menjalankan sebuah proses dengan tingkat nice tertentu, misalnya
10, gunakan:
nice -n 10 <PERINTAH...>
sementara untuk mengubah nice level sebuah proses yang sudah berjalan,
misalnya menjadi 15, gunakan:
renice 15 <PID>
Kadang-kadang cara ini efektif untuk "menjaga kelakuan" sebuah proses
yang intensif menggunakan CPU, misalnya emulator atau enkriptor
filesystem. VMWare misalnya, defaultnya berjalan dengan nice level -10
(cukup tinggi). Ketika virtual machine yang sedang dijalankannya
tiba-tiba sibuk, maka responsivitas sistem host dapat terganggu. Kita
dapat me-renice proses vmware-nya menjadi 0 misalnya atau bahkan 5
atau 10 untuk menurunkan prioritasnya.
ionice
Perintah nice/renice mengatur prioritas penjadwalan CPU, tapi tidak
mengatur prioritas pemakaian bandwidth I/O. Sebuah proses yang
intensif I/O, seperti backup harian atau mengkopi file misalnya, tetap
akan mengganggu responsivitas sistem walaupun sudah di-renice hingga
19, karena menghabiskan bandwidth I/O harddisk.
Untuk mengatur prioritas bandwidth I/O, di Linux sejak versi 2.6.13
tersedia ionice. Setiap proses memiliki I/O nice class, ada tiga
yaitu Best Effort ("normal"), Idle ("rendah"), atau Real Time
("tinggi"). Defaultnya proses berada di kelas Best Effort. Di setiap
kelas terdapat prioritas, yang nilainya 0 (tinggi) s.d. 7 (rendah).
Untuk menjinakkan proses-proses yang mengganggu seperti penyalinan
file besar atau backup filesystem, kita dapat memasukkannya ke dalam
kelas Idle, mis:
# ionice -c3 <PID>
-c3 berarti Idle, -c2 Best Effort, dan -c1 Real Time. Anda harus
menjadi root untuk bisa mengatur/mengubah parameter I/O nice ini.
Penutup
Tersedia satu program lagi untuk mengatur penjadwalan CPU yang tidak
dibahas di artikel ini yaitu taksel. Tasksel berguna untuk
mengatur afinitas pemanfaatan CPU untuk sistem
multicore/multiprosesor.
CPU dan bandwidth I/O pun hanyalah 2 resource dari banyak yang
ada. Linux juga mengizinkan kita mengatur jumlah file yang dapat
dibuka, jumlah proses anak, ukuran memori maksimum, atau bandwidth
jaringan. Ini semua akan kita bahas dalam kesempatan lain.
Komentar atau masukan dapat dikirimkan ke <steven@masterweb.net>.
Komentar pembaca Penjadwalan CPU (Dwi Retno, alamat IP dan email tercatat, 2008-04-16 12:23:58)Kebetulan sy sdg search ttg materi penjadwalan, mempelajari teori2 tsb menimbulkan pertanyaan buat sy, bagaimana caranya untuk dapat mengetahui bahwa di CPU (processor) menggunakan algoritma tertentu? tolong syntax-2nya ditampilkan sekalian.
Thx bgt jawabanya. Ditunggu..:-)
|
|