İşte nasıl fdatasync()
çalıştığını vs nasıl fsync()
çalıştığını bir açıklama
fdatasync()
Bir dosyanın tüm veri tamponlarını diske temizler (sistem çağrısı geri gelmeden önce). Benzer fsync()
fakat erişim süresi gibi meta verileri güncellemeniz gerekmiyor. Veritabanlarına veya günlük dosyalarına erişen uygulamalar genellikle küçük bir veri parçası yazar (örneğin, bir günlük dosyasındaki bir satır) ve ardından fsync()
yazılı verilerin fiziksel olarak sabit diskte depolandığından emin olmak için derhal arar . Ne yazık ki, fsync()
her zaman iki yazma işlemi başlatacak
- yeni yazılmış veriler için bir yazma işlemi
- inode'da depolanan değişiklik zamanını güncellemek için bir yazma işlemi
Değişiklik süresi işlem konseptinin bir parçası değilse, fdatasync()
gereksiz inode disk yazma işlemlerini önlemek için kullanılabilir.
İngilizcede O_DSYNC
daha hızlı olduğunu O_DIRECT
çünkü O_DIRECT
aramalar fsync()
iki kez (veri için günlükleri için) diğeri ve fsync()
iki yazma işlemleri yoluyla doğrular veri yazma. O_DSYNC
Çağrıları kullanma fdatsync()
ve fsync()
. fdatasync()
Bir eşzamansız yaptığınızı düşünebilirsiniz fsync()
(veriyi vermemek).
Rakamlara bakıldığında O_DSYNC
, ikisi onaylanmış olan fsync()
dört yazma işlemi gerçekleştirilir, ardından dört yazma işlemi yapılır;
SONUÇ
O_DSYNC
- daha hızlı
O_DIRECT
- Veri, gecikme veya düpedüz çarpışma nedeniyle tutarlı olabilir / olmayabilir
O_DIRECT
- daha kararlı
- veri tutarlı
- doğal olarak daha yavaş
Umarım bu cevap yardımcı olur ve umarım sizin için işleri daha da kötüleştirmedim.