Mengapa disk I / O tinggi mengurangi respons / kinerja sistem?


19

Saya tidak pernah cukup mengerti mengapa disk I / O tinggi memperlambat sistem begitu banyak. Ini aneh bagi saya karena saya harapkan lambatnya hanya mempengaruhi proses-proses yang tergantung pada data hard drive / optik, tetapi lambat-mempengaruhi bahkan hal-hal yang dimuat ke dalam RAM. Saya di sini mengacu pada iowait .

Mengapa prosesor menunggu, alih-alih melakukan pekerjaan lain? Adakah yang bisa menjelaskan batasan ini dan mengapa itu belum diselesaikan di kernel Linux? Apakah ada kernel di luar sana yang tidak memiliki masalah ini?

[ note ] Ada beberapa kemajuan di bidang kinerja ini. Pertama, kernel yang lebih baru (2.6.37 dalam kasus saya) jauh lebih responsif.


Bukankah xeno menjelaskan dengan tepat bagaimana ini telah diselesaikan di kernel Linux terakhir kali Anda bertanya?
Michael Mrozek

2
Dengan adanya pengeditan, saya pikir maksudnya adalah agar pertanyaan sebelumnya tentang kemajuan yang dibuat untuk memperbaiki masalah sementara pertanyaan ini adalah tentang mengapa masalah itu ada.
Steven D

@ mic Steven benar. Kami telah berdiskusi panjang tentang apa yang saya maksud dengan pertanyaan sebelumnya. Jawaban xeno sangat bagus sehingga saya mengedit pertanyaan yang cocok, dan saya mengajukan kembali pertanyaan aslinya di sini.
tshepang

Saya mengerti, tetapi pertanyaan Anda tampaknya bertentangan dengan yang lain; di sini Anda mengatakan "Adakah yang bisa menjelaskan batasan ini dan mengapa itu belum diselesaikan di kernel Linux? Apakah ada kernel di luar sana yang tidak memiliki masalah ini?", tetapi jawaban xeno dimulai dengan "Saya pikir sebagian besar dari itu telah dipecahkan."
Michael Mrozek

@mic Tidak juga. Kernel masih melakukan iowait , artinya masih menunggu. Saya melihat jawaban xeno karena lebih banyak respon sistem telah ditingkatkan . Dan itu saya setuju, seperti yang telah saya perhatikan pada pertanyaan itu.
tshepang

Jawaban:


9

Sistem operasi menggunakan memori virtual sehingga lebih banyak memori dapat digunakan daripada RAM fisik yang tersedia. Ketika kernel memutuskan bahwa ia memiliki penggunaan yang lebih baik untuk halaman memori fisik, isinya mungkin "paged out" untuk penyimpanan pada disk. Ketika halaman kehabisan memori virtual diakses saat keluar, itu menghasilkan kesalahan halaman dan dipindahkan kembali dari disk ke RAM.

Kesalahan halaman adalah bencana bagi kinerja karena latensi disk diukur dalam milidetik, sedangkan latensi RAM diukur dalam nanodetik. (1 milidetik = sejuta nanodetik!)

Memori tidak hanya digunakan oleh proses pengguna, tetapi juga oleh kernel untuk hal-hal seperti caching sistem file. Selama aktivitas sistem file, kernel akan melakukan cache data yang baru saja digunakan. Asumsinya adalah bahwa ada peluang bagus bahwa data yang sama akan digunakan lagi segera, jadi caching harus meningkatkan kinerja I / O.

Memori fisik yang digunakan untuk cache sistem file tidak dapat digunakan untuk proses, jadi selama aktivitas sistem file, lebih banyak memori proses akan dihasilkan dan kesalahan halaman akan meningkat. Juga, lebih sedikit bandwidth I / O disk tersedia untuk memindahkan halaman memori dari dan ke disk. Akibatnya proses dapat terhenti.


Saya tahu ini setua tanah tetapi, tergantung bagaimana itu masuk, jumlah I / O yang tinggi dapat menghasilkan banyak gangguan yang dihasilkan dan konteks yang dihasilkan beralih membuang waktu CPU.
Bratchley

5

Sejauh yang saya mengerti, IOwait berarti bahwa suatu proses, bukan prosesor, sedang menunggu IO tersedia. Prosesor telah memperoleh kecepatan lebih dari hard drive, yang berarti lebih banyak kode akan selesai lebih cepat dan kemudian disk harus dibaca. Ketika banyak lagi yang harus dibaca daripada yang bisa dilakukan oleh drive dengan cukup cepat, Anda berakhir dengan menunggu prosesor. Cara memutuskan siapa yang bisa membaca / menulis ke disk ditentukan oleh penjadwal blok, dalam kebanyakan kasus sekarang CFQ. Jika Anda menggunakan CFQ, dan Anda membutuhkan proses untuk menggunakan lebih sedikit waktu IO keseluruhan untuk meningkatkan daya tanggap sistem, Anda dapat menggunakannya ionice -c3 <processid>. Ini memberitahu sistem untuk hanya memberikan proses ini IO hanya ketika tidak ada yang membutuhkannya.

Ini masih menarik dan menjelaskan masalah iowait dengan lebih baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.