Bagaimana mengatur prioritas IO disk secara otomatis?

8

Jika saya menggunakan beberapa aplikasi IO intensif (seperti Virtualbox, verifikasi data Steam atau bahkan dd) sistem saya menjadi hampir tidak responsif. Meskipun semua dimulai dengan prioritas normal, mereka membuat desktop sangat lamban dan menunda banyak startup aplikasi lain.

Saya tahu saya bisa menggunakan sesuatu seperti ioniceuntuk mengubah prioritas ke siaga misalnya, tetapi dalam kasus Virtualbox yang memunculkan banyak proses menjadi sulit.

Dapatkah saya memberikan beberapa jenis petunjuk pada sistem, jadi ketika meluncurkan beberapa aplikasi spesifik, mereka memulai dengan prioritas IO paling sedikit?

Salem
sumber
Apakah Anda mencoba solusi saya? Apakah itu berhasil?
sm4rk0

Jawaban:

7

Catatan: Solusi ini hanya berfungsi dengan penjadwal cfq, seperti dijelaskan di sini . Anda harus memeriksa mana yang digunakan dengan mengeluarkan

cat /sys/block/sda/queue/scheduler

dan mengubahnya jika perlu.

Jika saya mengerti dengan benar, Anda ingin beberapa ionicepengaturan diterapkan setiap kali Anda memulai perintah. Anda dapat melakukannya dengan cara ini:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

Perintah pertama membuat file VirtualBoxdengan teks kutipan tunggal sebagai isinya. Ini harus memiliki path lengkap ke program, karena jika seseorang hanya menentukan VirtualBoxitu dapat menafsirkannya sebagai file yang baru saja kita buat dan membuat "loop".

Perintah kedua membuatnya dapat dieksekusi, dan ketiga memindahkan file baru ini dalam folder yang ada di depan folder "sistem" /usr/bin, jadi file baru kami dijalankan bukan yang asli. Bagian "$ @" berisi semua argumen yang diminta oleh perintah, sehingga mereka diteruskan ke perintah VirtualBox yang sebenarnya.

Menurut jawaban ("ya") untuk pertanyaan Pengguna Super ini Apakah anak-anak memproses prioritas warisan dari orang tua mereka? Bagaimana Anda memeriksa prioritas IO dari proses yang berjalan? , seharusnya cukup untuk ioniceproses induk, seperti ini:

ionice -c 3 VirtualBox

Dari ionice halaman manual , nilai kelas penjadwalan I / O berikut tersedia:

  • 0 untuk tidak sama sekali
  • 1 untuk waktu nyata
  • 2 untuk upaya terbaik
  • 3 untuk idle (digunakan dalam contoh di atas)

Nomor atau nama kelas dapat digunakan.

Selain itu, -n levelopsi berlaku untuk kelas waktu nyata dan upaya terbaik, dengan 0-7 sebagai data yang valid (tingkat prioritas).

sm4rk0
sumber
1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Lucio
@ Lucio, terima kasih untuk petunjuk, tetapi bukankah "itu harus cukup untuk ioniceproses induk" bagian penting?
sm4rk0
1
Ya benar Tetapi, jika Anda bisa , luangkan waktu dan kemudian tambahkan lebih banyak informasi dari pengalaman Anda sendiri tentang prosedur ini, menciptakan jawaban yang lebih baik :)
Lucio
@ Lucio, saya harap sudah cukup baik sekarang. Terima kasih telah bersikeras (:
sm4rk0
1
FYI: hanya ionicebisa bekerja dengan cfqscheduler! Untuk detail lebih lanjut: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Anda dapat menggunakan perintah 'renice' untuk memprioritaskan proses:

renice -<priority> <application's pid>

Bisa juga drive Anda berputar terlalu banyak, jadi ketika Anda ingin memulai aplikasi seperti Virtualbox, ia harus berputar sebelum Anda dapat mulai bekerja (ini bisa memakan waktu cukup lama).

abu
sumber
Terima kasih atas tipnya, tetapi saya sedang mencari cara untuk membuatnya secara otomatis dan sistem yang luas. Misalnya: ketika meluncurkan Virtualbox, jalankan dengan prioritas IO serendah mungkin ...
Salem
nice reguler dan renice tidak memprioritaskan IO secara terpisah.
Jay _silly_evarlast_ Wren
Dan ini bagus, bukan ionice. Yang satu untuk CPU yang lain untuk IO.
Dagelf