Alasan terjadinya seperti itu adalah karena program mengatakan "tulis data ini" dan kernel linux menyalinnya ke buffer memori yang diantrekan untuk masuk ke disk, dan kemudian berkata "ok, selesai". Jadi program mengira telah menyalin semuanya. Kemudian program menutup file, tetapi tiba-tiba kernel membuatnya menunggu sementara buffer tersebut didorong keluar ke disk.
Jadi, sayangnya program tidak dapat memberi tahu Anda berapa lama waktu yang diperlukan untuk membersihkan buffer karena program tidak mengetahuinya.
Jika Anda ingin mencoba beberapa trik power-user, Anda dapat mengurangi ukuran buffer yang digunakan Linux dengan menyetel parameter kernel vm.dirty_bytes
ke sesuatu seperti 15000000
(15MB). Ini berarti aplikasi tidak bisa mendapatkan lebih dari 15MB sebelum kemajuan sebenarnya. (Anda dapat mengubah parameter kernel dengan cepat menggunakan sudo sysctl vm.dirty_bytes=15000000
tetapi membuat mereka tetap melakukan reboot membutuhkan perubahan file konfigurasi seperti /etc/sysctl.conf
yang mungkin khusus untuk distro Anda.)
Efek sampingnya adalah komputer Anda mungkin memiliki throughput penulisan data yang lebih rendah dengan pengaturan ini, tetapi secara keseluruhan, saya merasa terbantu melihat bahwa sebuah program berjalan lama saat menulis banyak data vs. program tampaknya selesai dengan tugasnya tetapi sistem tertinggal dengan buruk karena kernel melakukan pekerjaan yang sebenarnya. Menyetel dirty_bytes
ke nilai yang cukup kecil juga dapat membantu mencegah sistem Anda menjadi tidak responsif ketika Anda kekurangan memori bebas dan menjalankan program yang tiba-tiba menulis banyak data.
Tapi, jangan mengaturnya terlalu kecil! Saya menggunakan 15MB sebagai perkiraan kasar bahwa kernel dapat menyiram buffer ke hard drive normal dalam 1/4 detik atau kurang. Itu membuat sistem saya tidak merasa "lamban".