Apa perintah Unix terbaik?

9

Untuk tes pembandingan cepat, bagaimana nice dan ionice dapat digabungkan ke efek maksimum, yaitu untuk perintah untuk menggunakan sumber daya sesedikit mungkin (tanpa menganggur sama sekali)?

(Saya pikir ini sesuatu seperti `nice -n 19 ionice -c 2 [perintah], tetapi tidak yakin tentang ionice" -n "(classdata param), halaman manualnya samar tentang relevansinya.)

mahemoff
sumber
3
ditambah 1 untuk judul pertanyaan pintar, tetapi juga pertanyaan yang bagus secara umum.
Lizardx

Jawaban:

10

Perintah lengkap yang Anda inginkan adalah:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

The chrtperintah di awal akan beralih hal yang kelas penjadwalan batch, yang setara dengan menambahkan 0,5 dengan nilai bagus. Opsi -n untuk ionice adalah prioritas sederhana untuk opsi realtime ( -c 1) dan best-effort ( -c 2), dengan nilai yang lebih rendah menjadi prioritas yang lebih tinggi seperti nilai yang bagus (tetapi dalam kisaran 0-7). Namun, perintah ionice tidak sepenuhnya diperlukan, karena kelas penjadwalan I / O dan prioritas secara default berasal dari parameter penjadwalan CPU, dan nice -n 19tersirat ionice -c 2 -n 7.

Namun, Anda bisa mendapatkan penggunaan sumber daya minimal absolut dengan mengatur kelas penjadwalan CPU dan I / O agar tidak digunakan. Dalam kedua kasus, penjadwal 'idle' sebenarnya bukan penjadwal idle, dan Anda masih dapat menggunakan sumber daya, hanya saja semuanya akan memiliki prioritas lebih tinggi.

Untuk kelas penjadwalan CPU, ini juga menggunakan chrtperintah, meskipun tanpa perlu nice(prioritas harus diatur ke 0dalam kelas penjadwalan siaga), dan terlihat seperti ini:

chrt -i 0 {command or PID}

The niceperintah pada cermin Linux versi SVR4, yang berarti bahwa ia tidak dapat mengubah kelas penjadwalan, hanya bagus nilai (yang juga berperilaku berbeda pada Linux dari UNIX klasik, tapi itu OT bit). Karena kelas penjadwalan alternatif asli adalah POSIX.1E realtime SCHED_RRdan SCHED_FIFO, perintah untuk mengatur kelas penjadwalan akhirnya dipanggil chrt. The -imenspesifikasikan opsi untuk menggunakan SCHED_IDLEkelas penjadwalan

Untuk kelas penjadwalan I / O, Anda gunakan ionice. Perintah persisnya terlihat seperti ini:

ionice -c 3 {command or PID}

The -cpilihan menspesifikasikan apa penjadwalan kelas untuk digunakan, dan 3 adalah nomor untuk kelas menganggur. Perhatikan bahwa tergantung pada penjadwal I / O blok mana yang sedang digunakan, ini mungkin tidak benar-benar berdampak apa pun. Secara khusus, nooppenjadwal I / O tidak mendukung prioritas atau kelas penjadwalan sama sekali, dan saya cukup yakin deadlinepenjadwal (baik yang lama, dan yang blk-mq) juga tidak.

Jika Anda ingin melakukan ini secara terprogram, baik untuk program Anda sendiri, atau untuk menyesuaikan hal-hal untuk proses lain, lihat halaman manual untuk panggilan sistem sched_setschedulerdan ioprio_set(meskipun keduanya layak dibaca jika Anda hanya ingin latar belakang yang lebih banyak juga).

Austin Hemmelgarn
sumber
0

Dengan asumsi Anda tidak ingin perintah itu sepenuhnya menunggu orang lain selesai, jadi jangan sampai berpotensi menderita kelaparan sumber daya , barisnya adalah:

nice -n19 [command]

Karena ionice akan ditetapkan secara proporsional pada kernel Linux modern.

By the way chrt -b0tidak ada hubungannya dengan kebaikan, tetapi seberapa sering CPU akan melompat dari satu proses ke proses lainnya. Baris ini membuat waktu lebih lama untuk program batch untuk memanfaatkan cache dengan lebih baik, tetapi untuk perintah lain tidak ada gunanya. Seperti yang terlihat di sini .

Alberto Salvia Novella
sumber