Berikut ini penjelasan tentang cara fdatasync()
kerja vs cara fsync()
kerjanya
fdatasync()
flush semua buffer data file ke disk (sebelum panggilan sistem kembali). Itu menyerupai fsync()
tetapi tidak diperlukan untuk memperbarui metadata, seperti waktu akses. Aplikasi yang mengakses database atau file log sering menulis fragmen data kecil (misalnya, satu baris dalam file log) dan kemudian memanggil fsync()
segera untuk memastikan bahwa data tertulis secara fisik disimpan di harddisk. Sayangnya, fsync()
akan selalu memulai dua operasi penulisan
- satu operasi tulis untuk data yang baru ditulis
- satu operasi tulis untuk memperbarui waktu modifikasi yang disimpan dalam inode
Jika waktu modifikasi bukan bagian dari konsep transaksi, maka fdatasync()
dapat digunakan untuk menghindari operasi penulisan inode disk yang tidak perlu.
Dalam bahasa Inggris, O_DSYNC
lebih cepat daripada O_DIRECT
sejak O_DIRECT
panggilan fsync()
dua kali (satu untuk log dan satu untuk data) dan fsync()
memverifikasi penulisan data melalui dua operasi penulisan. Menggunakan O_DSYNC
panggilan fdatsync()
dan fsync()
. Anda dapat fdatasync()
melakukan asynchronous fsync()
(tidak memverifikasi data).
Melihat angka-angkanya, O_DSYNC
apakah empat operasi tulis, dua di antaranya diverifikasi, sementara fsync()
empat operasi penulisan, semuanya diverifikasi setelah itu.
KESIMPULAN
O_DSYNC
- lebih cepat dari
O_DIRECT
- Data mungkin / mungkin tidak konsisten karena latensi atau kerusakan total
O_DIRECT
- lebih stabil
- data konsisten
- secara alami lebih lambat
Saya harap jawaban ini membantu, dan saya harap saya tidak memperburuk keadaan bagi Anda.