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.
performance
io
kuafu
sumber
sumber
free
.$PATH
pengaturan 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.Jawaban:
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).
sumber
awesome
tampaknya bekerja sedikit lebih baik daripadakwin
dalam hal ini).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 sayaxsession-errors
. Segala sesuatu yang lain tidak benar-benar file - soket/dev/null
,,/proc/stat
...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 Andaidle
memprioritaskannya 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
sumber