Mengapa sistem menjadi lambat saat melakukan penulisan besar-besaran ke disk?

8

Saya ingin tahu mengapa sistem menjadi lambat saat menulis data massal ke disk.

Saya pikir agar sistem menjadi lambat, harus ada beberapa masalah dengan CPU. Tapi menulis hanya terikat I / O.

Apakah gangguan hardware terjadi saat menulis data? Jika demikian, itu mungkin karena gangguan bahwa CPU selalu beralih konteks.

kuafu
sumber
1
Saya pikir hampir semua aplikasi akan membaca / menulis data dari disk, bukan?
jilen
1
Mungkin itu bertukar ke memori dan karenanya melambat, ketika disk sedang digunakan berat sebaliknya. Systemload-plugin dapat memberi tahu Anda, apakah Anda menggunakan swap dengan cara grafis. Untuk baris perintah, gunakan free.
pengguna tidak diketahui
1
Jika Anda telah mengkonfigurasi / menjalankan sysstat, Anda dapat melihat laporan SAR untuk waktu yang lambat dan itu akan menunjukkan kepada Anda apa yang terjadi di sekitar waktu itu (sakelar konteks, I / O Disk, beban CPU, lalu lintas jaringan, dll).
Bratchley
Lihat juga $PATHpengaturan Anda jika Anda menggunakan penyelesaian-perintah atau membuat banyak kesalahan ejaan. Melihat melalui banyak direktori, terutama yang memiliki banyak entri direktori, dapat memakan waktu yang nyata ketika sumber daya langka.
MattBianco

Jawaban:

3

Alasan intinya adalah bahwa hal yang biasa: I / O jauh lebih lambat daripada CPU / RAM. Bahkan jika proses yang melakukan operasi I / O menggunakan DMA (yang mengeluarkan CPU), pada titik tertentu mereka cenderung harus menunggu penyelesaian permintaan mereka.

Dalam kasus HDD yang paling umum, tambahkan saja beberapa aplikasi yang mencoba mengakses file yang tersebar di drive, dan Anda dapat membuat sendiri kopi (teh, apa pun). Dengan SSD, situasinya menjadi lebih baik, tetapi bahkan SSD - yang memiliki throughput yang diukur dalam ratusan MB / s pada SATA (dibandingkan dengan puluhan MB / s HDD spin-plate) dan waktu pencarian yang benar-benar dapat diabaikan (dibandingkan dengan milidetik untuk spin-plate) - bisa menjadi hambatan.

Masalah yang saya pahami bukan hanya pada transfer data itu sendiri, tetapi pada overhead yang diperlukan - I / O dikendalikan oleh kernel, tetapi hanya jarang terjadi tanpa ruang pengguna. Dengan demikian dapat ada banyak konteks switch, hanya dari aplikasi yang menunggu pada I / O memeriksa apakah sesuatu terjadi (tergantung pada implementasi, tentu saja). Dalam hal transfer disk, mungkin ada beberapa utas kernel yang bersaing untuk mendapatkan sumber daya atau menunggu-tunggu (yang kadang-kadang merupakan strategi yang tepat). Ingat, misalnya menyalin data dari satu partisi ke partisi lain memerlukan sistem file modern untuk: mencari tahu di mana sumber data, membacanya, mengalokasikan ruang pada sistem file target, menulis data meta, menulis data, ulangi sampai selesai.

Dan jika, pada titik tertentu, sistem Anda mulai bertukar (yang biasanya memiliki prioritas lebih tinggi daripada I / O biasa), bencana telah selesai.

EDIT : Setelah berbicara dengan beberapa pengembang kernel Linux situasinya menjadi sedikit lebih jelas. Masalah utama adalah penjadwal I / O, yang tidak memiliki banyak ide tentang yang memprioritaskan I / O. Karenanya setiap input pengguna dan keluaran grafis berikut ini berbagi antrian dengan aktivitas disk / jaringan. Sebagai konsekuensi dari itu, mungkin juga terjadi bahwa itu dapat membuang data proses yang di-cache dari cache halaman (misalnya pustaka yang dimuat) ketika disimpulkan dapat menggunakan cache halaman lebih efektif pada I / O lainnya. Itu tentu saja berarti bahwa sekali kode itu perlu dijalankan lagi, itu harus diambil lagi - membentuk disk yang mungkin sudah di bawah beban berat.

Yang mengatakan, sejauh kernel Linux berjalan, banyak dari masalah ini telah diperbaiki baru-baru ini (masalahnya telah diketahui), jadi katakanlah 4.4.x atau 4.5.x harus berperilaku lebih baik seperti dulu dan masalah harus dilaporkan (umumnya orang-orang kernel senang ketika seseorang ingin membantu dengan melaporkan dan menguji bug).

peterph
sumber
Bisakah Anda menguraikan sedikit, mengapa sistem secara keseluruhan tertinggal ketika IO sangat sibuk? Sebagai contoh, saya tidak melihat koneksi antara Windows Manager dan IO - jelas, WM tidak melakukan IO, jadi mengapa itu mulai tertinggal (setidaknya, ketika tidak bertukar) ?
Hi-Angel
WM sebenarnya dapat melakukan banyak I / O melalui server X / komposer Wayland (tidak sebanyak menyalin empat aliran data antara 2 HDD, tetapi tidak harus sepenuhnya diabaikan - yang mungkin salah satu alasannya awesometampaknya bekerja sedikit lebih baik daripada kwindalam hal ini).
peterph
Tapi IO macam apa fungsinya? Apakah itu hanya karena masuk ke xsession-errors/ Xorg.ₙ.log? Bukankah logging hanya buffered, tanpa mengganggu WM berfungsi? Ada yang lain? UPD: Saya baru saja melihat /proc/AwesomePID/fd- satu-satunya file yang dibuka oleh WM saya xsession-errors. Segala sesuatu yang lain tidak benar-benar file - soket /dev/null,, /proc/stat...
Hi-Angel
1
Tetapi Anda mengatakan bahwa WM sebenarnya dapat melakukan banyak I / O melalui server X / komposer Wayland . Tapi apa pun, mengapa Anda berpikir itu tidak mendapatkan CPU yang cukup. Ketika itu terjadi, CPU biasanya cukup gratis - saya dapat melihat beban di widget CPU di panel saya, dan membongkar arsip tidak butuh banyak.
Hi-Angel
1
@ Hi-Angel memeriksa jawaban pembaruan apakah ini menjelaskan sedikit hal.
peterph
2

Pengalaman saya adalah bahwa aktivitas I / O saja tidak memperlambat sistem. Efek ini terjadi ketika tugas lain membutuhkan I / O juga. Situasi akan menjadi sangat jahat jika sistem bertukar (dipaksa) dan Anda menyebabkan beban I / O yang berat.

Anda dapat mempengaruhi dampak I / O tugas berat oleh ionice. Jika Anda idlememprioritaskannya maka latensi untuk tugas lain mungkin masih meningkat tetapi tidak melampaui batas minimum. Tugas I / O akan terputus segera jika tugas (non-idle) lain memiliki I / O untuk dilakukan. Jika Anda menggunakan penjadwal yang mendukung pengaturan ini.

Lihat Memilih Penjadwal I / O Linux

Hauke ​​Laging
sumber
1
Pengalaman saya sebaliknya: yaitu saya dapat mulai membongkar arsip besar - menyebabkan muatan IO - dan mencoba pada saat ini untuk beralih ke «desktop» lain, saya merasakan kelambatan dari peralihan. Bagaimana window manager bahkan relevan dengan IO ?? Dan ya, saya memiliki RAM gratis, jadi tidak bertukar (dan bahkan jika saya belum - tidakkah WM bertukar pada giliran terakhir?) . FWIW, saya menggunakan WM Awesome ringan, dan sebelumnya dengan kwin segalanya lebih buruk.
Hi-Angel