Mengapa Ubuntu 16.04 mengatur semua penjadwal IO drive ke "batas waktu"?

17

Saya baru saja menginstal Xubuntu 16.04-64bit ke partisi kedua di laptop saya. Saya perhatikan itu tampak agak lambat di kali, jadi saya memeriksa IO scheduler yang digunakan untuk drive itu, yang ternyata deadlineuntuk semua drive. Saya memiliki beberapa SSD dan hard drive, jadi saya tahu bahwa "tenggat waktu" terbaik untuk SSD dan cfquntuk hard drive.

Saya boot ke 14,04 pada partisi lain dan digunakan cfquntuk drive yang berputar dan deadlineuntuk SSD, sebagaimana mestinya. Saya juga /etc/udev/rules.dmemeriksa apakah 14,04 menggunakan aturan untuk mengkonfigurasi tipe drive tetapi tidak ada di sana, jadi saya berasumsi bahwa kernel yang melakukannya.

Jadi saya bertanya-tanya apakah ini bug atau mereka menggunakan "tenggat waktu" untuk semuanya sekarang?

Pembaruan: Komentar yang saya tulis tentang /etc/udev/rules.d adalah kesalahan. Sebenarnya saya telah menggunakan aturan udev untuk mengubah penjadwal (seperti jawabannya di bawah) sesuai dengan jenis rotasi sejak saya mulai menggunakan SSD, beberapa tahun yang lalu. Saya kira saya hanya lupa ... menjadi tua. Bagaimanapun, salah satu referensi yang saya gunakan adalah wiki optimasi SSD Debian .

Bukankah itu ide yang baik jika dimasukkan? Hanya sebuah saran!

curt54
sumber

Jawaban:

6

Dengan rilis 14.04, penjadwal default untuk kernel 3.13 telah diubah dari CFQ ke Tenggat .

Tidak ada lagi kernel server yang terpisah dan sheduler CFQ tidak cocok untuk banyak skenario penggunaan server misalnya waktu tunggu penulisan KVM . Bahkan ada regresi kinerja di desktop dengan perangkat USB .

NGRode
sumber
1
Terima kasih sudah membaca, sangat mencerahkan! Masalah USB yang sering saya alami dengan kartu SD dan tablet Android pada TWRP. Dalam yang terakhir, itu akan menggantung tepat di akhir selama beberapa menit. Masalah KVM tidak pernah muncul pada tamu VB saya karena mereka berada di SSD saya dengan Tenggat.
curt54
32

Tim Kernel Ubuntu secara teratur menjalankan banyak analisis beban kerja yang disimulasikan berbeda pada sistem file yang berbeda dan penjadwal I / O untuk mendapatkan ide tentang pilihan penjadwal I / O generik terbaik. Jawaban umum adalah bahwa tidak ada pilihan penjadwal I / O yang sempurna untuk konfigurasi umum di semua jenis instalasi berbeda untuk semua jenis media yang berbeda. Poin penting yang perlu diingat adalah:

  1. Sistem berpindah ke SSD, jadi noop atau deadline adalah yang terbaik untuk ini; noop memiliki overhead CPU lebih sedikit dari batas waktu.

  2. CFQ vs Tenggat adalah panggilan yang sulit. CFQ memungkinkan fleksibilitas yang lebih besar. Namun, kami menemukan bahwa untuk rentang yang lebih luas dari operasi I / O yang disimulasikan, tenggat waktu memberikan latensi yang lebih rendah dan throughput yang sedikit lebih tinggi daripada CFQ.

  3. Saya membandingkan kernel secara teratur (setiap pengujian kernel membutuhkan 3+ hari untuk menyelesaikannya) untuk berbagai sistem file dan penjadwal I / O. Dari ini, dan berbagai macam data lainnya, kami mencoba membuat keputusan berdasarkan informasi tentang pilihan terbaik, lihat:

http://kernel.ubuntu.com/~cking/fs-tests/

Ada pro / kontra untuk semua penjadwal I / O, jadi default apa pun tidak sempurna dan tim kernel Ubuntu selalu bersedia untuk memiliki input ke pilihan default jika data yang meyakinkan dan alasan menunjukkan kami untuk mengubah sebaliknya.

Colin Ian King
sumber
5
Kami telah pindah ke menggunakan CFQ sebagai default untuk kernel Ubuntu Zesty 4.10 dan juga mengaktifkan CONFIG_BLK_WBT_MQ baru (Pembatasan penulisan balik multiqueue) karena ini menyelesaikan masalah writeeback cache kotor dengan perangkat lambat seperti perangkat flash.
Colin Ian King
1
Apakah kita mungkin akan melihat BFQ sebagai default sekarang karena ada di kernel 4.12?
JauntyDoe
Kami akan mengevaluasi ini untuk 4.12 / 4.13, saya melakukan beberapa pengujian awal dengan Kyber juga tetapi saya akan meninjau kembali ini sekali 4.12 keluar minggu ini.
Colin Ian King
Pada prinsipnya pertanyaan ini hanya tentang kernel 16.04, tetapi masih muncul dalam pencarian :-). Jadi, inilah update yang lebih baru: Ubuntu telah beralih kembali ke CFQ, cocok default hulu, di Ubuntu 17.04 (zesty) melalui 18,10 (kosmik) .
sourcejedi
1
Pembaruan lebih lanjut: Linux telah menonaktifkan WBT ketika menggunakan CFQ atau BFQ (setidaknya secara default), karena tidak bekerja bersama dengan baik. 2) Jika Anda ingin mengevaluasi masalah yang diselesaikan oleh WBT, saya pikir Anda perlu menyadari bahwa masalahnya bervariasi di antara perangkat (firmware berbeda). Dalam hasil patokan Anda, saya bahkan tidak dapat menemukan jenis perangkat apa yang digunakan. 3) Saya ingin tahu tentang deskripsi Anda tentang apa yang dipecahkan WBT. Jika Anda melihat surat pengantar pada v2 dari set patch WBT, WBT dirancang untuk menangani penulisan buffered pada flash cepat , yang dapat memiliki antrian yang sangat dalam, dan menghindari kelaparan pembaca pada perangkat yang sama.
sourcejedi
9

Saya tidak tahu mengapa pengembang memutuskan untuk memilih deadlinesebagai penjadwal default, mungkin karena kebanyakan komputer baru dilengkapi dengan SSD, yang biasanya dipasang sistem. Anda dapat mengatur penjadwal secara manual dengan cara ini, jika Anda belum menginstalnya ... instal gksu:

Buka terminal dan jalankan:

sudo apt install gksu  

Kemudian jalankan perintah ini:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

Rekatkan teks berikut ke dalam file kosong dan simpan file yang diubah.

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

Nyalakan ulang sistem operasi dan sekarang Anda menggunakan penjadwal optimal untuk HDD dan SSD.

cl-netbox
sumber
Ya, ini yang telah saya gunakan, sesuai pembaruan saya dalam pertanyaan. Tapi saya pikir karena hari ini sudah umum untuk memiliki kedua jenis drive, mereka akan memasukkan aturan ini pada semua distribusi Linux.
curt54