Ringkasan
Bagaimana Anda dapat mengkonfigurasi Linux untuk membaca dari disk / sistem file lokal dan menulis ke jaringan berbagi pada saat yang sama, yang bertentangan dengan membaca saat tidak ada data yang melewati jaringan, kemudian mengirimkan data melalui jaringan saat disk lokal diam?
Jauh lebih cepat untuk membaca dan menulis pada saat yang sama daripada hanya melakukan satu operasi dan kemudian yang lainnya secara bergantian.
Detail
Saya memindahkan sejumlah besar data dari disk lokal di mesin Linux ke perangkat NAS.
Saya menggunakan rsync
pada dasarnya menyalin /srv/data
ke /mnt/nas
, yang merupakan CIFS gunung.
Itu dimulai dengan baik, membaca pada 100MB / detik dan menulis ke NAS pada 100MB / detik (batas jaringan gigabit), dengan membaca dan menulis terjadi secara bersamaan.
Namun sekarang, beberapa jam kemudian, saya menemukan bahwa itu membaca dari disk lokal, lalu menghentikan pembacaan saat ia menulis ke NAS, kemudian ketika tidak ada lagi data untuk ditulis ke NAS, itu kembali membaca dari disk. lagi. Jaringan idle saat disk sedang dibaca, dan disk idle saat jaringan sedang digunakan.
Tidak perlu dikatakan, membaca 200MB kemudian menulis 200MB membutuhkan waktu lebih lama daripada membaca dan menulis 200MB pada saat yang sama.
Bagaimana saya bisa mengkonfigurasi kernel sehingga tetap pada perilaku membaca dan menulis sebelumnya pada waktu yang sama, daripada bergantian antara membaca dan menulis, hanya melakukan satu operasi pada satu waktu?
Beberapa pengamatan: Ketika disk lokal membaca pada 100 + MB / detik semuanya tampaknya terjadi secara paralel dengan baik-baik saja, tetapi begitu disk melambat (tampaknya hanya 20MB / detik sekarang karena beberapa alasan) saat itulah baca / tulis ini Peralihan tampaknya terjadi.
Saya juga dapat menjalankan sync
secara manual setiap beberapa detik untuk membuat penulisan terjadi secara paralel dengan membaca (meskipun jelas pada kecepatan berkurang) namun menempatkan sync
dalam satu while
putaran sehingga berjalan setiap lima detik sepertinya bukan solusi yang tepat ...
Kernel tampaknya men-cache sekitar 1GB data dan kemudian menuliskannya melalui jaringan secepat mungkin - yang baik-baik saja - Saya hanya tidak mengerti mengapa hard disk harus berhenti dibaca saat data sedang dikirim keluar melalui jaringan.