Oto wyjaśnienie, jak fdatasync()
działa, a jak fsync()
działa
fdatasync()
opróżnia wszystkie bufory danych pliku na dysk (przed powrotem wywołania systemowego). To przypomina, fsync()
ale nie jest wymagane do aktualizacji metadanych, takich jak czas dostępu. Aplikacje, które uzyskują dostęp do baz danych lub plików dziennika, często zapisują niewielki fragment danych (np. Jeden wiersz w pliku dziennika), a następnie fsync()
natychmiast wywołują , aby mieć pewność, że zapisane dane są fizycznie przechowywane na dysku twardym. Niestety, fsync()
zawsze zainicjuje dwie operacje zapisu
- jedna operacja zapisu dla nowo zapisanych danych
- jedna operacja zapisu w celu zaktualizowania czasu modyfikacji przechowywanego w i-węźle
Jeśli czas modyfikacji nie jest częścią koncepcji transakcji, fdatasync()
można go użyć, aby uniknąć niepotrzebnych operacji zapisu na dysku i-węzłowym.
W języku angielskim O_DSYNC
jest szybszy niż O_DIRECT
od dwukrotnego O_DIRECT
wywołania fsync()
(jeden dla dzienników i jeden dla danych) i fsync()
weryfikuje zapis danych za pomocą dwóch operacji zapisu. Korzystanie z O_DSYNC
połączeń fdatsync()
i fsync()
. Możesz myśleć o tym, fdatasync()
że wykonujesz asynchronicznie fsync()
(nie weryfikujesz danych).
Patrząc na liczby, O_DSYNC
wykonuje cztery fsync()
operacje zapisu, z których dwie są weryfikowane, a cztery operacje zapisu, wszystkie weryfikowane są później.
WNIOSEK
O_DSYNC
- szybszy niż
O_DIRECT
- Dane mogą / mogą nie być spójne z powodu opóźnienia lub bezpośredniej awarii
O_DIRECT
- bardziej stabilny
- spójne dane
- naturalnie wolniejszy
Mam nadzieję, że ta odpowiedź pomoże i mam nadzieję, że nie pogorszyłem sytuacji.