Alasan mengapa hal itu terjadi adalah karena program mengatakan "tulis data ini" dan kernel linux menyalinnya ke buffer memori yang di-antri untuk masuk ke disk, dan kemudian berkata "ok, selesai". Jadi program itu berpikir telah menyalin semuanya. Kemudian program menutup file, tetapi tiba-tiba kernel membuatnya menunggu sementara buffer itu didorong ke disk.
Jadi, sayangnya program tidak dapat memberi tahu Anda berapa lama waktu yang diperlukan untuk mem-flush buffer karena tidak tahu.
Jika Anda ingin mencoba beberapa trik pengguna daya, Anda dapat mengurangi ukuran buffer yang digunakan Linux dengan mengatur parameter kernel vm.dirty_bytes
ke sesuatu seperti 15000000
(15 MB). Ini berarti aplikasi tidak bisa mendapatkan lebih dari 15MB di atas kemajuan sebenarnya. (Anda dapat mengubah parameter kernel dengan cepat sudo sysctl vm.dirty_bytes=15000000
tetapi membuat mereka tetap di 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 suatu program berjalan lama sementara ia menulis banyak data vs. kebingungan memiliki Program tampaknya selesai dengan tugasnya tetapi sistem tertinggal dengan buruk karena kernel melakukan pekerjaan yang sebenarnya. Menetapkan dirty_bytes
ke nilai yang cukup kecil juga dapat membantu mencegah sistem Anda menjadi tidak responsif ketika Anda kehabisan memori kosong dan menjalankan program yang tiba-tiba menulis banyak data.
Tapi, jangan 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".