ΠΠΎΠ΄Π΅ΠΊΠ° ΡΠ° ΠΈΡΡΡΠ°ΠΆΡΠ²Π°Π² ΠΎΠ΄ΡΠΆΠ»ΠΈΠ²ΠΎΡΡΠ° Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅, ΡΠ΅ΡΠΈΠ² Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°ΠΌ Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠ°ΠΌ Π΄Π΅ΠΊΠ° Π³ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ. ΠΠ°Ρ
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ, Π³ΠΈ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΠΌ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π·Π° ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ 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
, ΠΊΠΎΡ Π΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° Π³ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ ΠΊΠ΅ΡΠΎΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π·Π° Π΄Π° Π²ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° Π/Π ΠΏΡΠ΅ΠΊΡ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π΄ΠΈΡΠΊΠΎΡ. ΠΠ²Π°, Π²ΠΎ ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΡΡΠ°ΠΈ, Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π΄ΠΈΡΠΊΠΎΡ. ΠΠΎ, Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ, ΠΎΠ²ΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ Π½Π΅ Π΅ Π·Π°ΠΌΠ΅Π½Π° Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ 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() ΡΡΠ½ΠΊΡΠΈΡΠ°
ΠΠΈΠ½ΡΠΊΡ ΠΈΠΌΠ° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΠΊ 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()
Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ. ΠΠ° Π³ΠΎ ΡΡΠ°Π²ΠΈΠΌΠ΅ ΠΎΠ²Π° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ, ΠΈΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π° ΠΊΠΎΠ³Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ²Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π° ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΠΎΠ²Π°Π° ΠΏΡΠ΅ΠΏΠΎΡΠ°ΠΊΠ° Π΅ ΡΡΠΎ Π²ΠΎ Linux ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ Π·Π° ΠΈΡΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°.SQL Server Π½Π° Linux: FUA Internals β ΡΡΠΊΠ° Π΅ ΠΎΠΏΠΈΡ Π½Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π²ΠΎ SQL Server Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux. ΠΠ²Π΄Π΅ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΡΠΏΠΎΡΠ΅Π΄Π±ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π° Windows ΠΈ Linux. Π Π΅ΡΠΈΡΠΈ ΡΡΠΌ ΡΠΈΠ³ΡΡΠ΅Π½ Π΄Π΅ΠΊΠ° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ²ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π» Π½Π°ΡΡΠΈΠ² Π·Π° FUA ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° XFS.
ΠΠ°Π»ΠΈ ΡΡΠ΅ ΠΈΠ·Π³ΡΠ±ΠΈΠ»Π΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΠΊΠΎΠΈ ΠΌΠΈΡΠ»Π΅Π²ΡΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊ?
ΠΠ·Π²ΠΎΡ: www.habr.com