ΠΠ·, ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°ΠΉΠΊΠΈ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΎΠ±Π»Π°ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ΅ΡΠΈΡ
Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌ, Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΡ, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π½Π΅ΡΠ°. Π°Π·
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°ΠΌ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π·Π° ΠΏΠΎΡΡΠΎΡΠ½ΡΡΠ²ΠΎ, ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΈ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ API Π½Π° Linux. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΡΠΊ Π²ΡΠΈΡΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΏΡΠΎΡΡΠΎ: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° write()
, ΠΈ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΈ, Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠΈΠ³ΡΡΠ½ΠΎ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ°. ΠΠΎ write()
ΠΊΠΎΠΏΠΈΡΠ° ΡΠ°ΠΌΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠ΅ΡΠ° Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² RAM. ΠΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π° Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½ΡΠΊΠΎΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈ.
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ Π±Π΅Π»Π΅ΠΆΠΊΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΌ Π½Π°ΡΡΠΈΠ» ΠΏΠΎ ΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°. ΠΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π·Π° Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ, ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ Π·Π° Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° fdatasync()
ΠΈΠ»ΠΈ ΠΎΡΠ²Π°ΡΡΠΉΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΡΠ»Π°Π³ O_DSYNC
. ΠΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΏΠΎ ΠΏΡΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΊΡΠΌ Π΄ΠΈΡΠΊΠ°, ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΉΡΠ΅
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° write().
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ write()
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ° write()
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΡΡΡΠ°Ρ ΡΠΎΡΠ½ΠΎ Π±Π°ΠΉΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΠΏΡΠ°Π²ΡΡ ΡΠΎΠ²Π° Π΄ΠΎΡΠΈ Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ Π½ΠΈΡΠΊΠΈ (
ΠΠ·Π½Π°ΡΠ°Π²Π° Π»ΠΈ ΡΠΎΠ²Π°, ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° write()
Π΅ Π°ΡΠΎΠΌΠ΅Π½? ΠΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ° Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π΄Π°. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΡΡΠ½Π°Ρ ΠΈΠ»ΠΈ Π²ΡΠΈΡΠΊΠΎ, ΠΈΠ»ΠΈ Π½ΠΈΡΠΎ ΠΎΡ ΡΠΎΠ²Π°, Ρ ΠΊΠΎΠ΅ΡΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ write()
. ΠΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° write()
, Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ°, Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π²ΡΡΡΠ²Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ°Π»Π° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΏΠΎΠΌΠΎΠ»Π΅Π½ΠΎ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅. Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ°ΠΌΠΎ Π½Π° ΡΠ°ΡΡ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ°, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ Π΄ΠΎΠ±Π°Π²Ρ 1024 Π±Π°ΠΉΡΠ° ΠΊΡΠΌ ΡΠ°ΠΉΠ», ΠΎΠΏΠΈΡΠ°Π½ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ°, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ², ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΡΠΊΠ° ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ Π±Π°ΠΉΡ ΠΊΡΠΌ ΡΠ°ΠΉΠ»Π°. Π’Π΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΈ, Π½ΠΎ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π·Π°Π²ΡΡΡΠ°Ρ, Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π²ΡΠ² ΡΠ°ΠΉΠ»Π°, ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π±ΡΡΠΊΠ°Π½ΠΈ.
ΡΡΠ½ΠΊΡΠΈΠΈ fsync() ΠΈ fdatasync().
ΠΠ°ΠΉ-Π»Π΅ΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ° Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° fdatasync()
. Π fdatasync()
ΡΠ°ΠΌ ΡΠ΅ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π΄ΠΈΡΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° ΡΠ°ΠΊΠΎΠ²Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ βΠ½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈβ. Π ΡΠΎΠ²Π° Π΅ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄ΠΈΠ½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ ΡΡΠΊ, Π΅, ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Ρ, ΡΠ΅ ΡΠ°ΠΉΠ»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ ΡΠ»Π΅Π΄ Π΅Π²Π΅Π½ΡΡΠ°Π»Π½Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π°. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΡΠ°ΠΉΠ», ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° fsync()
Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ Π³ΠΎ ΡΡΠ΄ΡΡΠΆΠ°. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠ»Π΅Π΄ ΡΡΠΈΠ² ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΊΠ°ΠΆΠ΅, ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΡΠΎΠ²Π° Π΅, ΡΠ΅ ΠΏΠΎΠ΄ UNIX, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ²ΡΡΠ΄ΠΈ Π²ΡΡΠ·ΠΊΠΈ, Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΎΠ±Π°Π΄ΠΈΡΠ΅ fsync()
Π½ΡΠΌΠ° Π½Π°ΡΠΈΠ½ ΡΠ°ΠΉΠ»ΡΡ Π΄Π° Π·Π½Π°Π΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·Ρ
Π²ΡΡΠ»Π΅Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ° (fsync()
ΠΊΡΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½ΠΎ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠ° Ρ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ.
Π’ΠΎΠ·ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
fdatasync()
ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ fsync()
. ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ blktrace
ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ fdatasync()
ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ (Π² ext4 fsync()
ΠΏΠΈΡΠ΅ 20 KiB ΠΈ fdatasync()
- 16 KiB). ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΎΡΠΊΡΠΈΡ
, ΡΠ΅ XFS Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ· ΠΎΡ ext4. Π ΡΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° blktrace
ΡΡΠΏΡ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ ΡΠΎΠ²Π° fdatasync()
ΠΈΠ·Ρ
Π²ΡΡΠ»Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ (4 KiB Π² XFS).
ΠΠ²ΡΡΠΌΠΈΡΠ»Π΅Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° fsync()
ΠΠΎΠ³Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΡ Π·Π° ΡΡΠΈ Π΄Π²ΡΡΠΌΠΈΡΠ»Π΅Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ fsync()
Ρ ΠΊΠΎΠΈΡΠΎ ΡΡΠΌ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ²Π°Π» Π² ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΡΠ°.
ΠΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ½ΡΠΈΠ΄Π΅Π½Ρ ΡΠ΅ ΡΠ»ΡΡΠΈ ΠΏΡΠ΅Π· 2008 Π³. ΠΠΎ ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ Π½Π° Firefox 3 βΠ·Π°ΠΌΡΡΠ·Π²Π°ΡΠ΅β, Π°ΠΊΠΎ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ
Π° Π½Π° Π΄ΠΈΡΠΊ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π±Π΅ΡΠ΅, ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ SQLite Π·Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. Π‘Π»Π΅Π΄ Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π°, Π½Π°ΡΡΡΠΏΠΈΠ»Π° Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠ΅ fsync()
, ΠΊΠΎΠ΅ΡΠΎ Π΄Π°Π΄Π΅ Π΄ΠΎΠ±ΡΠΈ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π·Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Π ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΡΠΎΠ³Π°Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ° ext3 ΡΡΠ½ΠΊΡΠΈΡΡΠ° fsync()
ΠΈΠ·Ρ
Π²ΡΡΠ»Ρ Π½Π° Π΄ΠΈΡΠΊΠ° Π²ΡΠΈΡΠΊΠΈ "ΠΌΡΡΡΠ½ΠΈ" ΡΡΡΠ°Π½ΠΈΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π° Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ». Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°ΡΠ΅, ΡΠ΅ ΡΡΠ°ΠΊΠ²Π°Π½Π΅ΡΠΎ Π²ΡΡΡ
Ρ Π±ΡΡΠΎΠ½ Π²ΡΠ² Firefox ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΌΠ°Π³Π½ΠΈΡΠ΅Π½ Π΄ΠΈΡΠΊ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠ°Π·Π±ΡΠ°Ρ
ΠΎΡ
ΠΡΠΎΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ ΡΠ»ΡΡΠΈ ΠΏΡΠ΅Π· 2009 Π³. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π°, ΡΠ»Π΅Π΄ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΡΡΠΈΠ², ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ° ext4 ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ
Π°, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ° Ρ Π½ΡΠ»Π΅Π²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°, Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Ρ ΠΏΠΎ-ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ° ext3. Π ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ
Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ext3 ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ Π·Π°Π±Π°Π²ΠΈ Π½Π΅ΡΠ°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ. fsync()
. ΠΠ° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΡΠ°, ext4 ΠΈΠ·ΡΡΠΈΠ²Π° ΡΠ°ΠΌΠΎ ΡΠ΅Π·ΠΈ "ΠΌΡΡΡΠ½ΠΈ" ΡΡΡΠ°Π½ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠ°ΠΉΠ». Π Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡΡΠ°Π²Π°Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΡΠΈ ext3. Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡΡΠ°Π²Π°Ρ Π² ΡΠΎΠ²Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π·Π° 30 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠ΅Π· fsync()
Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΡΡ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° Π³ΠΈ Π·Π°ΡΠΈΡΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΡΠ° ΠΎΡ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈ. ΡΡΠ½ΠΊΡΠΈΡ fsync()
ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Ρ ext4 ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Ρ ext3. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΠΊΡΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΠΈ, Π·Π°Π±Π°Π²Ρ Π½ΡΠΊΠΎΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠΈΠΆΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΡΠΎΠ²Π°
Π’ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΡΠ½ΠΎΡΠ½ΠΎ fsync()
, Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π» ΠΏΡΠ΅Π· 2018 Π³. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π°, Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° PostgreSQL, Π±Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΎ, ΡΠ΅ Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° fsync()
ΡΡΠ΅ΡΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°, ΠΌΠ°ΡΠΊΠΈΡΠ° "ΠΌΡΡΡΠ½ΠΈΡΠ΅" ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΊΠ°ΡΠΎ "ΡΠΈΡΡΠΈ". Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ fsync()
Π½Π΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ Π½ΠΈΡΠΎ Ρ ΡΠ°ΠΊΠΈΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π½Π° Π΄ΠΈΡΠΊ. Π’ΠΎΠ²Π° Π΅ ΠΈΡΡΠΈΠ½ΡΠΊΠ° ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠ°, Π·Π°ΡΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ° Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ°, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π½ΡΠΌΠ° Π΄Π° Π΅ ΡΠ°ΠΊΠ°. Π’Π°ΠΊΠΈΠ²Π° ΠΏΡΠΎΠ²Π°Π»ΠΈ fsync()
ΡΠ° ΡΠ΅Π΄ΠΊΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠ°ΠΊΠΈΠ²Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΡΡΠΈ Π½ΠΈΡΠΎ Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π’Π΅Π·ΠΈ Π΄Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠΈ, PostgreSQL ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΡΡΠΈΠ²Π°Ρ. O_SYNC
ΠΈΠ»ΠΈ ΡΡΡ Π·Π½Π°ΠΌΠ΅ O_DSYNC
. Π‘ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°ΠΏΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΡΠ°ΠΌΠΎΡΠΎ Π±ΡΡΠ΅ΡΠΈ. ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π°
ΠΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ O_SYNC ΠΈ O_DSYNC
ΠΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π½Π° Linux, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π½Π°ΠΌΠ΅ΡΠΎ O_SYNC
ΠΈΠ»ΠΈ Π·Π½Π°ΠΌΠ΅ O_DSYNC
ΠΏΡΠΈ ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ write()
Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ Π΄Π°Π²Π°Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ fsync()
ΠΈ fdatasync()
. Π write()
ΠΈ fdatasync()
). ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°ΠΏΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Direct I/O Ρ ΡΠ»Π°Π³Π° O_DIRECT
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ open()
ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π·Π½Π°ΠΌΠ΅ΡΠΎ O_DIRECT
, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»Ρ ΠΊΠ΅ΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° I / O ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°ΠΉΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ Π΄ΠΈΡΠΊΠ°. Π’ΠΎΠ²Π° Π² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° Π·Π°ΠΏΠΈΡ, ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΡΠ΅ Π±ΡΠ΄Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄ΠΈΡΠΊΠ°. ΠΠΎ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠΎΠ·ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ Π½Π΅ Π΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ fsync()
ΠΈΠ»ΠΈ fdatasync()
. Π€Π°ΠΊΡ Π΅, ΡΠ΅ ΡΠ°ΠΌΠΈΡΡ Π΄ΠΈΡΠΊ ΠΌΠΎΠΆΠ΅ O_DIRECT
, O_DSYNC
, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π·Π°ΠΏΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Π½Π° ΠΎΡ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ fdatasync()
.
ΠΠΊΠ°Π·Π° ΡΠ΅, ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° XFS Π½Π°ΡΠΊΠΎΡΠΎ Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° "Π±ΡΡΠ· ΠΏΡΡ" Π·Π° O_DIRECT|O_DSYNC
- Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΊΠΎ Π±Π»ΠΎΠΊΡΡ Π΅ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° O_DIRECT|O_DSYNC
, ΡΠΎΠ³Π°Π²Π° XFS, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·ΡΠΈΡΡΠΈ ΠΊΠ΅ΡΠ°, ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° Π·Π°ΠΏΠΈΡ FUA, Π°ΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°. ΠΡΠΎΠ²Π΅ΡΠΈΡ
ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° blktrace
Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Linux 5.4/Ubuntu 20.04. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π° Π½Π΅ Π΄Π²Π΅ (Π·Π°ΠΏΠΈΡ ΠΈ ΠΈΠ·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡΠ°). ΠΠ°ΠΌΠ΅ΡΠΈΡ
Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ
ΡΡΠ½ΠΊΡΠΈΡ sync_file_range().
Linux ΠΈΠΌΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ sync_file_range()
ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΊΠ°Π·Π²Π°, ΡΠ΅ Π΅ "ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ°ΡΠ½Π°". ΠΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ. Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΈ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ sync_file_range()
ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ Π² fdatasync()
. Π sync_file_range()
ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ZFS Π½Π΅ ΠΈΠ·Ρ
Π²ΡΡΠ»Ρ Π΄Π°Π½Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ. ΠΠΏΠΈΡΡΡ ΠΌΠΈ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΡΠ΄ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° Π³ΡΠ΅ΡΠΊΠΈ. ΠΡΠΎ Π·Π°ΡΠΎ Π±ΠΈΡ
ΠΏΠΎΡΡΠ²Π΅ΡΠ²Π°Π» Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅
Π‘ΡΠΈΠ³Π½Π°Ρ
Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΈΠΌΠ° ΡΡΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈ I/O ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ fsync()
Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΠ°ΠΉΠ»ΡΡ. Π’ΠΎΠ²Π° ΡΠ° ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡΠ΅:
- ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
fdatasync()
ΠΈΠ»ΠΈfsync()
ΡΠ»Π΅Π΄ ΡΡΠ½ΠΊΡΠΈΡwrite()
(ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°fdatasync()
). - Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΎΡΠ²ΠΎΡΠ΅Π½ Ρ ΡΠ»Π°Π³
O_DSYNC
ΠΈΠ»ΠΈO_SYNC
(ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ - ΡΡΡ Π·Π½Π°ΠΌΠ΅O_DSYNC
). - ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
pwritev2()
ΡΡΡ Π·Π½Π°ΠΌΠ΅RWF_DSYNC
ΠΈΠ»ΠΈRWF_SYNC
(Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ ΡΡΡ Π·Π½Π°ΠΌΠ΅RWF_DSYNC
).
ΠΠ΅Π»Π΅ΠΆΠΊΠΈ Π·Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ°
ΠΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Ρ . Π Π°Π·Π»ΠΈΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π·Π°Π±Π΅Π»ΡΠ·Π°Ρ Π² ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈΠΌ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠ³Π° Π΄Π° Π³ΡΠ΅ΡΠ° ΠΈ ΡΠ΅ ΠΏΡΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΡΡΠΎΡΠΎ Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ. ΠΡΡΠ²ΠΎ, ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π²Π»ΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π²Π»ΠΈΡΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ.
- ΠΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΎΡ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ» (ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ 2-100%). ΠΡΠΈΠΊΠ°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ» ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΠ»Π°, Π΄ΠΎΡΠΈ ΡΠ»Π΅Π΄ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅
fallocate()
, Π½ΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ Π΅ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°ΡΠΈΡΠ°. ΠΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ, Π·Π° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅, Π΄Π° ΡΠ΅ ΠΎΠ±Π°Π΄ΠΈΡΠ΅fallocate()
Π·Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Π’ΠΎΠ³Π°Π²Π° ΡΠΎΠ²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ»Π½ΠΈ Ρ Π½ΡΠ»ΠΈ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ°fsync()
. Π’ΠΎΠ²Π° ΡΠ΅ Π½Π°ΠΊΠ°ΡΠ° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ βΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈβ Π²ΠΌΠ΅ΡΡΠΎ βΠ½Π΅ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈβ. Π’ΠΎΠ²Π° Π΄Π°Π²Π° ΠΌΠ°Π»ΠΊΠΎ (ΠΎΠΊΠΎΠ»ΠΎ 2%) ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½ΡΠΊΠΎΠΈ Π΄ΠΈΡΠΊΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ ΠΏΠΎ-Π±Π°Π²Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΡΡΠ²ΠΈ Π±Π»ΠΎΠΊ ΠΎΡ Π΄ΡΡΠ³ΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Ρ Π½ΡΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ (ΠΎΠΊΠΎΠ»ΠΎ 100%) ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠΈ Ρ Π΄ΠΈΡΠΊΠΎΠ²Π΅.AWS EBS (ΡΠΎΠ²Π° ΡΠ° Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π³ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΄Ρ). Π‘ΡΡΠΎΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ.GCP ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½ Π΄ΠΈΡΠΊ (ΠΈ ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½Π° ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅). ΠΡΡΠ³ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΡΠΈ ΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΡΡΠΎΡΠΎΠ½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄ΠΈΡΠΊΠΎΠ²Π΅. - ΠΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (ΠΏΠ΅ΡΠ°Π»Π±Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΊΠΎΠ»ΠΎ 5%). ΠΡΠΈΠ»ΠΈΡΠ° Π½Π° ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅
open()
ΡΡΡ Π·Π½Π°ΠΌΠ΅O_DSYNC
ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠ±Π°Π΄Π΅ΡΠ΅pwritev2()
ΡΡΡ Π·Π½Π°ΠΌΠ΅RWF_SYNC
ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅fdatasync()
. ΠΠΎΠ΄ΠΎΠ·ΠΈΡΠ°ΠΌ, ΡΠ΅ Π²ΡΠΏΡΠΎΡΡΡ ΡΡΠΊ Π΅, ΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ°ΠΊΡΡΡ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° Π·Π°Π΄Π°ΡΠ° (Π΅Π΄Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²Π΅), ΠΈΠ³ΡΠ°Π΅ ΡΠΎΠ»Ρ. ΠΠΎ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π»Π΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΡΠ΅ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½Π΅ΡΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°.
ΠΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π΅ΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ:
I/O ΠΠ΅ΡΠΎΠ΄ΠΈ Π·Π° Π΄ΠΎΡΡΡΠΏ β ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ.ΠΠ°ΡΠ°Π½ΡΠΈΡΠ°Π½Π΅, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Ρ Π΄ΠΎ Π΄ΠΈΡΠΊΠ° - ΠΈΡΡΠΎΡΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΏΠΎ ΠΏΡΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄ΠΎ Π΄ΠΈΡΠΊΠ°.ΠΠΎΠ³Π° ΡΡΡΠ±Π²Π° Π΄Π° fsync ΡΡΠ΄ΡΡΠΆΠ°ΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ - ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ Π½Π° Π²ΡΠΏΡΠΎΡΠ° ΠΊΠΎΠ³Π° Π΄Π° ΡΠ΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡΡΠ²Π°fsync()
Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, ΠΎΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ² ΡΠ°ΠΉΠ» ΠΈ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΡΠ°Π·ΠΈ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠ° Π΅, ΡΠ΅ Π² Linux ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΡΠ°ΠΉΠ».SQL Server Π½Π° Linux: FUA Π²ΡΡΡΠ΅ΡΠ½ΠΈ - ΡΡΠΊ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΡΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π² SQL Server Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux. Π’ΡΠΊ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° Windows ΠΈ Linux. ΠΠΎΡΡΠΈ ΡΡΠΌ ΡΠΈΠ³ΡΡΠ΅Π½, ΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π°ΡΡΠΈΡ Π·Π° FUA ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° XFS.
ΠΡΠ±ΠΈΠ»ΠΈ Π»ΠΈ ΡΡΠ΅ Π½ΡΠΊΠΎΠ³Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠΌΡΡΠ°ΡΠ΅, ΡΠ΅ ΡΠ° ΡΠΈΠ³ΡΡΠ½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ?
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com