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.
linux
kernel
performance
io
tepang
sumber
sumber
Jawaban:
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.
sumber
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.
sumber