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).