Hi! Mwn’ers 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

  • top di atas.

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>.