Bagaimana cara Linux menangani concurrent disk IO?

12

Ketika server Linux melayani banyak permintaan bersamaan untuk membaca banyak file yang berbeda, lakukan:

  1. Cari File_1, baca seluruh file, lalu cari File_2, baca seluruh file, lalu cari File_3, dll.

  2. Cari File_1, baca sebagian (hingga nilai readahead?), Lalu cari File_2, baca sebagian, lalu cari kembali ke File_1 di mana ia tinggalkan, baca lebih banyak, lalu cari File_3, dll, dll

Jika ini adalah kasus ke-2, maka server melakukan lebih banyak upaya daripada yang diperlukan, yang akan memperlambat segalanya secara signifikan. Dalam hal ini apakah ada penyetelan yang bisa saya lakukan?

Kelanjutan
sumber

Jawaban:

14

Di disk I / O ada sesuatu yang disebut elevator. Subsistemem cakram mencoba menghindari meremukkan kepala cakram di seluruh piringan. Ini akan memesan ulang permintaan I / O (ketika tidak dilarang misalnya oleh penghalang) sehingga kepala akan bergerak dari bagian dalam disk ke luar, dan kembali, melakukan I / O yang diminta di jalan.

Hal kedua adalah permintaan penggabungan I / O. Jika ada banyak permintaan dalam waktu singkat, yang mengakses bagian file yang berbeda, subsistem I / O akan mencoba dan mendapatkan semua data dalam sekali jalan, alih-alih mengeluarkan beberapa permintaan terputus-putus.

Sejauh penyetelan berlangsung. Jika Anda adalah penulis aplikasi, ada banyak hal yang dapat Anda lakukan. Anda dapat mengeluarkan I / Os besar berurutan, kapan pun Anda bisa dan menggunakan fsync () et.al. ketika Anda perlu memastikan bahwa data ada di piring-piring.

Jika Anda seorang sysadmin, dan Anda benar-benar tahu, bahwa permintaan data dari 2 aplikasi melompati, dan mereka mencoba membaca file secara berurutan (misalnya Anda memiliki 2 DVD yang ditranskode secara paralel), maka ya, meningkatkan readahead akan membantu. Kalau tidak, Anda perlu melihat pola dan ukuran I / O Anda, pertimbangkan tingkat RAID Anda (jika ada) dan faktor-faktor lain, sebelum melakukan penyetelan. Lihatlah apa hambatan sebenarnya Anda, sebelum Anda mulai menyetem, mungkin sulit ditebak, apa yang sebenarnya membatasi sistem Anda.

Paweł Brodacki
sumber
5

Dalam linux Anda dapat menentukan algoritma penjadwalan Anda sendiri, Anda memiliki kemungkinan yang berbeda, saya harus melakukan sepotong di atasnya di sekolah dan ini artikel dari Red Hat banyak membantu saya. Meskipun khusus untuk Red Hat Anda dapat menemukan penjadwal ini di hampir semua distro linux.

Lucas Kauffman
sumber