Dengan harddisk saat ini, tidak ada jaminan bahwa file benar-benar ditulis ke disk bahkan jika disk melaporkan penulisan selesai ke OS! Ini karena cache bawaan di drive.
Di freeBSD Anda dapat menonaktifkan ini dengan menyetel kern.cam.ada.write_cache
sysctl ke 0. Ini akan menurunkan kinerja tulis secara signifikan . Terakhir kali saya mengukurnya (harddisk WDC WD5001ABYS-01YNA0 pada chipset ICH-7, FreeBSD 8.1 AMD64), kinerja tulis berkelanjutan (diukur dengan dd if=/dev/zero of=/tmp/foo bs=10M count=1000
) turun dari 75.000.000 byte/dtk menjadi 12.900.000 byte/dtk.
Jika Anda ingin benar-benar yakin bahwa file Anda ditulis;
- Nonaktifkan cache tulis dengan
sysctl kern.cam.ada.write_cache=0
diikuti olehcamcontrol reset <bus>:<target>:<lun>
. - Buka file dengan
O_SYNC
opsi.
Catatan:
- Kinerja tulis Anda (pada HDD) sekarang akan benar-benar payah.
- Jangan memasang partisi dengan
sync
pilihan; yang akan menyebabkan semua I/O (termasuk pembacaan) dilakukan secara sinkron. - Jangan gunakan
O_DIRECT
. Ini akan mencoba mem-bypass cache sama sekali. Itu mungkin juga akan memengaruhi pembacaan.
O_DIRECT
pada dasarnya hanya ada untuk Oracle untuk melewati lapisan cache buffer kernel dan melakukan caching sendiri. Ini memiliki semantik yang tidak jelas, batasan sewenang-wenang pada ukuran dan penyelarasan bacaan yang dapat Anda lakukan, dan umumnya tidak boleh digunakan. O_SYNC
seharusnya memberi Anda efek yang Anda inginkan, tetapi tanpa sistem file dasar yang kuat terhadap kegagalan daya atau kerusakan, itu mungkin masih belum cukup untuk kebutuhan Anda.