Π’Ρ€Π°Ρ˜Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ API-ΠΈ Π·Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Linux

Π”ΠΎΠ΄Π΅ΠΊΠ° ја истраТував одрТливоста Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ систСмитС, Ρ€Π΅ΡˆΠΈΠ² Π΄Π° сС тСстирам Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€Π°ΠΌ Π΄Π΅ΠΊΠ° Π³ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ основнитС Ρ€Π°Π±ΠΎΡ‚ΠΈ. Јас Π·Π°ΠΏΠΎΡ‡Π½Π° со Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° NVMe со Ρ†Π΅Π» Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π²ΠΎ врска со ΠΎΠ΄Ρ€ΠΆΠ»ΠΈΠ²ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (Ρ‚.Π΅. Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ќС Π±ΠΈΠ΄Π°Ρ‚ достапни ΠΏΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚ Π½Π° систСмот) Π½ΠΈ Π΄Π°Π²Π°Π°Ρ‚ NMVe дискови. Π“ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² слСднитС Π³Π»Π°Π²Π½ΠΈ Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ: ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Π΄Π° сС смСтаат Π·Π° ΠΎΡˆΡ‚Π΅Ρ‚Π΅Π½ΠΈ ΠΎΠ΄ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΠΊΠΎΠ³Π° Π΅ Π΄Π°Π΄Π΅Π½Π° Π½Π°Ρ€Π΅Π΄Π±Π°Ρ‚Π° Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΠΊΠΎΠ³Π° сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΌΠ΅Π΄ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ сосСма ΡΡ€Π΅ΡœΠ½ΠΎ користат систСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π·Π° снимањС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.

Π’ΠΎ овој пост, Π³ΠΈ истраТувам ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ API-ΠΈΡ‚Π΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° Linux. Π‘Π΅ Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° сè Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ Сдноставно Ρ‚ΡƒΠΊΠ°: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ја ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° write(), ΠΈ ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ќС Π·Π°Π²Ρ€ΡˆΠΈ, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ќС Π±ΠΈΠ΄Π°Ρ‚ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ Π½Π° дискот. Но write() само Π³ΠΈ ΠΊΠΎΠΏΠΈΡ€Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ ΠΊΠ΅ΡˆΠΎΡ‚ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ Π»ΠΎΡ†ΠΈΡ€Π°Π½ Π²ΠΎ RAM ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°. Π—Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅ систСмот Π΄Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот, Ρ‚Ρ€Π΅Π±Π° Π΄Π° користитС Π½Π΅ΠΊΠΎΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ.

Π’Ρ€Π°Ρ˜Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ API-ΠΈ Π·Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Linux

Π“Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, овој ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π» Π΅ Π·Π±ΠΈΡ€ΠΊΠ° Π½Π° бСлСшки ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ² Π½Π° Ρ‚Π΅ΠΌΠ° ΠΎΠ΄ интСрСс Π·Π° ΠΌΠ΅Π½Π΅. Ако Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π·Π° Π½Π°Ρ˜Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π½Π΅ΡˆΡ‚ΠΎ, ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° Π·Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ΄Ρ€ΠΆΠ»ΠΈΠ²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја користитС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° fdatasync() ΠΈΠ»ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ O_DSYNC. Ако стС заинтСрСсирани Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ повСќС Π·Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ сС случува со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΏΠ°Ρ‚ ΠΎΠ΄ ΠΊΠΎΠ΄ Π΄ΠΎ диск, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΎΠ²Π° напис.

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° write().

БистСмски ΠΏΠΎΠ²ΠΈΠΊ write() Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ стандардот IEEE POSIX ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΠΈΠ΄ Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. По ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ write() ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΈ Π²Ρ€Π°Ρ‚Π°Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Π±Π°Ρ˜Ρ‚ΠΈΡ‚Π΅ ΠΊΠΎΠΈ Π±ΠΈΠ»Π΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ напишани, ΠΏΡ€Π°Π²Π΅Ρ˜ΡœΠΈ Π³ΠΎ Ρ‚ΠΎΠ° Π΄ΡƒΡ€ΠΈ ΠΈ Π°ΠΊΠΎ Π΄ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС пристапува ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ процСси ΠΈΠ»ΠΈ нишки (Ρ‚ΡƒΠΊΠ° Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π΅Π½ Π΄Π΅Π» ΠΎΠ΄ стандардот POSIX). Π’ΡƒΠΊΠ°, Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ со Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, постои забСлСшка која Π²Π΅Π»ΠΈ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ сСкоја ΠΎΠ΄ Π΄Π²Π΅ нишки Π³ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΎΠ²ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ сСкој ΠΏΠΎΠ²ΠΈΠΊ ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈ ΠΈΠ»ΠΈ ситС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ послСдици ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΎΡ‚ ΠΏΠΎΠ²ΠΈΠΊ, ΠΈΠ»ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ°. послСдицитС. Ова Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π΄Π΅ΠΊΠ° ситС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Π²Π»Π΅Π·/ΠΈΠ·Π»Π΅Π· Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΡ€Π° Π΄Π° Π΄Ρ€ΠΆΠ°Ρ‚ Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° рСсурсот Π½Π° кој Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚.

Π”Π°Π»ΠΈ ΠΎΠ²Π° Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° write() Π΄Π°Π»ΠΈ Π΅ атомски? Од Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ° Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, Π΄Π°. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΌΠΎΡ€Π° Π΄Π° Π²Ρ€Π°Ρ‚Π°Ρ‚ ΠΈΠ»ΠΈ сС ΠΈΠ»ΠΈ Π½ΠΈΡˆΡ‚ΠΎ ΠΎΠ΄ Π½Π°ΠΏΠΈΡˆΠ°Π½ΠΎΡ‚ΠΎ со write(). Но ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° write(), спорСд стандардот, Π½Π΅ ΠΌΠΎΡ€Π° Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Π·Π°Π²Ρ€ΡˆΠΈ со Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° сè ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΠ±Π°Ρ€Π°Π½ΠΎ Π΄Π° сС запишС. Π”ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ѝ Π΅ Π΄Π° напишС само Π΄Π΅Π» ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ нишки ΠΊΠΎΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ‚ ΠΏΠΎ 1024 Π±Π°Ρ˜Ρ‚ΠΈ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° опишана ΠΎΠ΄ истиот дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. Од Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° стандардот, ΠΏΡ€ΠΈΡ„Π°Ρ‚Π»ΠΈΠ² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ќС Π±ΠΈΠ΄Π΅ ΠΊΠΎΠ³Π° сСкоја ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ само Π΅Π΄Π΅Π½ Π±Π°Ρ˜Ρ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. ОвиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ќС останат атомски, Π½ΠΎ ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС Π±ΠΈΠ΄Π°Ρ‚ Π·Π°Π²Ρ€ΡˆΠ΅Π½ΠΈ, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ напишалС Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ќС Π±ΠΈΠ΄Π°Ρ‚ измСшани. Ρ‚ΡƒΠΊΠ° Π΅ ΠΌΠ½ΠΎΠ³Ρƒ интСрСсна Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° Π½Π° ΠΎΠ²Π°Π° Ρ‚Π΅ΠΌΠ° Π½Π° Stack Overflow.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ fsync() ΠΈ fdatasync().

НајлСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° измивањС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот Π΅ Π΄Π° ја ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° fsync (). Оваа Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π±Π°Ρ€Π° ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм Π΄Π° Π³ΠΈ прСнСсС ситС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΎΠ΄ ΠΊΠ΅ΡˆΠΎΡ‚ Π½Π° дискот. Ова Π³ΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ситС ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° (Π²Ρ€Π΅ΠΌΠ΅ Π½Π° пристап, Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°ΠΌΡƒ). Π’Π΅Ρ€ΡƒΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Ρ€Π΅Ρ‚ΠΊΠΎ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ, ΠΏΠ° Π°ΠΊΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Π½Π΅ Π²ΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја користитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° fdatasync(). Π’ΠΎ помош Π½Π° fdatasync() Π‘Π΅ Π²Π΅Π»ΠΈ Π΄Π΅ΠΊΠ° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΎΠ²Π°Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°, Ρ‚ΠΎΠ»ΠΊΠ°Π²ΠΎ количСство ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π° Π½Π° дискот ΡˆΡ‚ΠΎ Π΅ β€žΠ½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° слСднитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈβ€œ. И Ρ‚ΠΎΠΊΠΌΡƒ Ρ‚ΠΎΠ° Π΅ ΠΎΠ½Π° Π·Π° ΡˆΡ‚ΠΎ сС Π³Ρ€ΠΈΠΆΠ°Ρ‚ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π•Π΄Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС појави ΠΎΠ²Π΄Π΅ Π΅ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ΠΎΠ²ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π°Ρ‚ Π΄Π΅ΠΊΠ° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ќС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠΆΠ΅Π½ Π΄Π΅Ρ„Π΅ΠΊΡ‚. ОсобСно, ΠΊΠΎΠ³Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΠ²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Ρ˜Π°Π²ΠΈΡ‚Π΅ fsync() Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΡˆΡ‚ΠΎ Π³ΠΎ содрТи. Π’ΠΎ спротивно, ΠΏΠΎ нСуспСх, ΠΌΠΎΠΆΠ΅ Π΄Π° испаднС Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ постои. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΎΠ²Π° Π΅ ΡˆΡ‚ΠΎ Π²ΠΎ UNIX, ΠΏΠΎΡ€Π°Π΄ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Ρ‚Π²Ρ€Π΄ΠΈ врски, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° постои Π²ΠΎ повСќС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ. Π—Π°Ρ‚ΠΎΠ°, ΠΊΠΎΠ³Π° сС Ρ˜Π°Π²ΡƒΠ²Π°Ρ‚Π΅ fsync() Π½Π΅ постои Π½Π°Ρ‡ΠΈΠ½ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΄Π° Π·Π½Π°Π΅ ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ исто Ρ‚Π°ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС исфрлат Π½Π° дискот (Ρ‚ΡƒΠΊΠ° ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ повСќС Π·Π° ΠΎΠ²Π°). ИзглСда Π΄Π΅ΠΊΠ° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм ext4 Π΅ способСн автоматски Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ fsync() Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ содрТат соодвСтнитС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ Ρ‚ΠΎΠ° ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΡΠ»ΡƒΡ‡Π°Ρ˜ со Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈ систСми.

Овој ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈ систСми. користСв blktrace Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠΎΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° дискот сС користат Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΡ‚Π΅ систСми ext4 ΠΈ XFS. И Π΄Π²Π΅Ρ‚Π΅ ΠΈΠ·Π΄Π°Π²Π°Π°Ρ‚ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° дискот ΠΈ Π·Π° содрТината Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм, Π³ΠΎ ΠΈΠ·ΠΌΠΈΠ²Π°Π°Ρ‚ ΠΊΠ΅ΡˆΠΎΡ‚ ΠΈ ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π°Π°Ρ‚ со ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° FUA (Force Unit Access, ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° дискот, Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠ΅ΡˆΠΎΡ‚) Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚. Π’ΠΈΠ΅ Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²Π°Ρ‚ Ρ‚ΠΎΠ° Π·Π° Π΄Π° ΠΏΠΎΡ‚Π²Ρ€Π΄Π°Ρ‚ Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½Π°. На дисковитС ΡˆΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π°Π°Ρ‚ FUA, ΠΎΠ²Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π° Π΄Π²Π΅ ΠΈΡΠΏΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠ΅ΡˆΠΎΡ‚. ΠœΠΎΠΈΡ‚Π΅ СкспСримСнти Π³ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ°Π° Ρ‚ΠΎΠ° 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 ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π°Ρ‚ ΠΌΠ΅Π³Π°Π±Π°Ρ˜Ρ‚ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ°Π³Π½Π΅Ρ‚Π΅Π½ диск, ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΡ‚Ρ€Π°Π΅ ΠΌΠ½ΠΎΠ³Ρƒ сСкунди. Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚, ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Ρ€Π°Π·Π±Ρ€Π°Π² Π½Π° овој ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΎΡ‚ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° ја ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° со Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° асинхрони Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π°. Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Firefox ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΡˆΠ΅ построги Π±Π°Ρ€Π°ΡšΠ° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ навистина бСшС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, Π° карактСристикитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм ext3 само Π³ΠΎ влошија овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π’Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ сС случи Π²ΠΎ 2009 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠŸΠΎΡ‚ΠΎΠ°, ΠΏΠΎ ΠΏΠ°Π΄ΠΎΡ‚ Π½Π° систСмот, корисницитС Π½Π° Π½ΠΎΠ²ΠΈΠΎΡ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π΅Π½ систСм ext4 сС ΡΠΎΠΎΡ‡ΠΈΡ˜Π° со Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρƒ новосоздадСни Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ°Π°Ρ‚ Π½ΡƒΠ»Π° Π΄ΠΎΠ»ΠΆΠΈΠ½Π°, Π½ΠΎ Ρ‚ΠΎΠ° Π½Π΅ сС случи со постариот Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π΅Π½ систСм ext3. Π’ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ пасус, Π·Π±ΠΎΡ€ΡƒΠ²Π°Π² Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ext3 исфрли ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот, ΡˆΡ‚ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ Π³ΠΈ Π·Π°Π±Π°Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅. fsync(). Π—Π° Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π²ΠΎ ext4, само ΠΎΠ½ΠΈΠ΅ Π²Π°Π»ΠΊΠ°Π½ΠΈ страници ΡˆΡ‚ΠΎ сС Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈ Π·Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Π°Ρ‚ Π½Π° дискот. И ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ остануваат Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ со ext3. Ова Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π·Π° Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ пСрформанситС (стандардно, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ остануваат Π²ΠΎ ΠΎΠ²Π°Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° 30 сСкунди, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ dirty_expire_centisecs; Ρ‚ΡƒΠΊΠ° ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈ Π·Π° ΠΎΠ²Π°). Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΌΠΎΠΆΠ΅ Π½Π΅ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΎ Π΄Π° сС ΠΈΠ·Π³ΡƒΠ±Π°Ρ‚ ΠΏΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚. Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ Π΄Π° сС користи fsync() Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄Π°Ρ‚ стабилно ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π΄Π° Π³ΠΈ Π·Π°ΡˆΡ‚ΠΈΡ‚Π°Ρ‚ ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ повСќС ΠΎΠ΄ послСдицитС ΠΎΠ΄ нСуспСситС. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° fsync() Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ поСфикасно ΠΊΠΎΠ³Π° сС користи ext4 ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠΎΠ³Π° сС користи ext3. НСдостаток Π½Π° овој пристап Π΅ ΡˆΡ‚ΠΎ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, ΠΊΠ°ΠΊΠΎ ΠΈ досСга, Π³ΠΎ Π·Π°Π±Π°Π²ΡƒΠ²Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Π·Π° ΠΎΠ²Π° Ρ‚ΡƒΠΊΠ° ΠΈ Ρ‚ΡƒΠΊΠ°.

Π’Ρ€Π΅Ρ‚ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²ΠΎ врска со fsync(), ΠΏΠΎΡ‚Π΅ΠΊΠ½ΡƒΠ²Π° ΠΎΠ΄ 2018 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠŸΠΎΡ‚ΠΎΠ°, Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ PostgreSQL, бСшС ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Π½ΠΎ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° fsync() Π½Π°ΠΈΠ΄ΡƒΠ²Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, Π³ΠΈ ΠΎΠ·Π½Π°Ρ‡ΡƒΠ²Π° β€žΠ²Π°Π»ΠΊΠ°Π½ΠΈΡ‚Π΅β€œ страници ΠΊΠ°ΠΊΠΎ β€žΡ‡ΠΈΡΡ‚ΠΈβ€œ. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, слСднитС ΠΏΠΎΠ²ΠΈΡ†ΠΈ fsync() Π’ΠΈΠ΅ Π½Π΅ ΠΏΡ€Π°Π²Π°Ρ‚ Π½ΠΈΡˆΡ‚ΠΎ со Ρ‚Π°ΠΊΠ²ΠΈ страници. ΠŸΠΎΡ€Π°Π΄ΠΈ ΠΎΠ²Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Ρ‚ΠΈΡ‚Π΅ страници сС Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ никогаш Π½Π΅ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π½Π° дискот. Ова Π΅ вистинска катастрофа, бидСјќи Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ќС мисли Π΄Π΅ΠΊΠ° Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС запишани Π½Π° дискот, Π½ΠΎ Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Ρ‚ΠΎΠ° Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅. Π’Π°ΠΊΠ²ΠΈ нСуспСси fsync() сС Ρ€Π΅Ρ‚ΠΊΠΈ, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ Ρ‚Π°ΠΊΠ²ΠΈ ситуации Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ рСчиси Π½ΠΈΡˆΡ‚ΠΎ Π·Π° Π΄Π° сС ΠΈΠ·Π±ΠΎΡ€ΠΈ со ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚. Π”Π΅Π½ΠΎΠ²ΠΈΠ²Π΅, ΠΊΠΎΠ³Π° Ρ‚ΠΎΠ° ќС сС случи, PostgreSQL ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ°Ρ“Π°Π°Ρ‚. Π’ΡƒΠΊΠ°, Π²ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΎΡ‚ β€žΠ”Π°Π»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π·Π°ΠΊΡ€Π΅ΠΏΠ½Π°Ρ‚ ΠΎΠ΄ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ Π½Π° fsync?β€œ, овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ Π΄Π΅Ρ‚Π°Π»Π½ΠΎ истраТСн. Π’ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ Π΄Π° сС користи Direct I/O со Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ O_SYNC ΠΈΠ»ΠΈ со Π·Π½Π°ΠΌΠ΅ O_DSYNC. Π‘ΠΎ овој пристап, систСмот ќС ΠΏΡ€ΠΈΡ˜Π°Π²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, Π½ΠΎ овој пристап Π±Π°Ρ€Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° со Π±Π°Ρ„Π΅Ρ€ΠΈΡ‚Π΅ самата. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ повСќС Π·Π° ΠΎΠ²Π° Ρ‚ΡƒΠΊΠ° ΠΈ Ρ‚ΡƒΠΊΠ°.

ΠžΡ‚Π²ΠΎΡ€Π°ΡšΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со помош Π½Π° Π·Π½Π°ΠΌΠ΅Π½Ρ†Π°Ρ‚Π° O_SYNC ΠΈ O_DSYNC

Π”Π° сС ​​вратимС Π½Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π½Π° Linux ΠΊΠΎΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ стабилно ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. ИмСно, Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ O_SYNC ΠΈΠ»ΠΈ Π·Π½Π°ΠΌΠ΅ O_DSYNC ΠΊΠΎΠ³Π° ΠΎΡ‚Π²ΠΎΡ€Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ систСмски ΠΏΠΎΠ²ΠΈΠΊ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ (). Π‘ΠΎ овој пристап, сСкоја ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС ΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎ сСкоја ΠΊΠΎΠΌΠ°Π½Π΄Π° write() систСмот Π΄ΠΎΠ±ΠΈΠ²Π° соодвСтни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ fsync() ΠΈ fdatasync(). Π’ΠΎ Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° POSIX ΠΎΠ²Π° сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° β€žΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ I/O File Integrity Completionβ€œ ΠΈ β€žData Integrity Completionβ€œ. Π“Π»Π°Π²Π½Π°Ρ‚Π° прСдност Π½Π° овој пристап Π΅ ΡˆΡ‚ΠΎ Π·Π° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ‚Π΅Ρ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅ само Π΄Π° остваритС Π΅Π΄Π΅Π½ систСмски ΠΏΠΎΠ²ΠΈΠΊ, намСсто Π΄Π²Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - 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. Овој пристап Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ поСфикасСн, бидСјќи ΠΊΠΎΠ³Π° сС користи, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π° Π½Π° дискот ΠΈ сС користи Π΅Π΄Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π°, намСсто Π΄Π²Π΅ (ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΈΡΠΏΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠ΅ΡˆΠΎΡ‚). Најдов Π»ΠΈΠ½ΠΊ Π΄ΠΎ Π»Π΅ΠΏΠ΅Π½ΠΊΠ° 2018 ΠΊΠ΅Ρ€Π½Π΅Π», кој Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° овој ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ. Има Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΎΠ²Π°Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈ систСми, Π½ΠΎ ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Π·Π½Π°ΠΌ, XFS Π΅ СдинствСниот Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π΅Π½ систСм ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΎΠ²Π° досСга.

sync_file_range() Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°

Линукс ΠΈΠΌΠ° систСмски ΠΏΠΎΠ²ΠΈΠΊ sync_file_range(), ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΈΠ·ΠΌΠΈΠ΅Ρ‚Π΅ само Π΄Π΅Π» ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° дискот, намСсто Ρ†Π΅Π»Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Овој ΠΏΠΎΠ²ΠΈΠΊ ΠΈΠ½ΠΈΡ†ΠΈΡ€Π° асинхроно ΠΈΡΠΏΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π½Π΅ Ρ‡Π΅ΠΊΠ° Π΄Π° Π·Π°Π²Ρ€ΡˆΠΈ. Но, Π²ΠΎ сСртификатот sync_file_range() сС Π²Π΅Π»ΠΈ Π΄Π΅ΠΊΠ° Ρ‚ΠΈΠΌΠΎΡ‚ Π΅ β€žΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠΏΠ°ΡΠ΅Π½β€œ. НС сС ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π° Π΄Π° сС користи. ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ ΠΈ опасности sync_file_range() ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ±Ρ€ΠΎ опишано Π²ΠΎ ΠΎΠ²Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π». ΠŸΠΎΡ‚ΠΎΡ‡Π½ΠΎ, сС Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° овој ΠΏΠΎΠ²ΠΈΠΊ користи RocksDB Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΊΠΎΠ³Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Ρ„Ρ€Π»Π° Π²Π°Π»ΠΊΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот. Но, Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Π·Π° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ стабилно ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, исто Ρ‚Π°ΠΊΠ° сС користи fdatasync(). Π’ΠΎ ΠΊΠΎΠ΄ RocksDB ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ интСрСсни ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ Π½Π° ΠΎΠ²Π°Π° Ρ‚Π΅ΠΌΠ°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сС Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚ sync_file_range() Кога користитС ZFS, Π½Π΅ Π³ΠΈ исфрла ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° дискот. Π˜ΡΠΊΡƒΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΌΠΈ ΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° ΠΊΠΎΠ΄ΠΎΡ‚ ΡˆΡ‚ΠΎ Ρ€Π΅Ρ‚ΠΊΠΎ сС користи Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ содрТи Π³Ρ€Π΅ΡˆΠΊΠΈ. Π—Π°Ρ‚ΠΎΠ°, Π±ΠΈ Π²Π΅ совСтувал Π΄Π° Π½Π΅ Π³ΠΎ користитС овој систСмски ΠΏΠΎΠ²ΠΈΠΊ освСн Π°ΠΊΠΎ Π΅ апсолутно Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ.

БистСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ ΠΊΠΎΠΈ ΠΏΠΎΠΌΠ°Π³Π°Π°Ρ‚ Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Ρ‚Ρ€Π°Ρ˜Π½ΠΎΡΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅

Π”ΠΎΡ˜Π΄ΠΎΠ² Π΄ΠΎ Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π΄Π΅ΠΊΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ‚Ρ€ΠΈ пристапи ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС користат Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° I/O ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎΡΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅. Π‘ΠΈΡ‚Π΅ Ρ‚ΠΈΠ΅ Π±Π°Ρ€Π°Π°Ρ‚ ΠΏΠΎΠ²ΠΈΠΊ Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° fsync() Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π²ΠΎ кој Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. Ова сС пристапитС:

  1. ΠŸΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° fdatasync() ΠΈΠ»ΠΈ fsync() ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° write() (ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ Π΅ Π΄Π° сС користи fdatasync()).
  2. Π Π°Π±ΠΎΡ‚Π° со дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° со Π·Π½Π°ΠΌΠ΅Π½Ρ†Π΅ O_DSYNC ΠΈΠ»ΠΈ O_SYNC (ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ - со Π·Π½Π°ΠΌΠ΅ O_DSYNC).
  3. Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ pwritev2() со Π·Π½Π°ΠΌΠ΅ RWF_DSYNC ΠΈΠ»ΠΈ RWF_SYNC (ΠΏΠΎ моТност со Π·Π½Π°ΠΌΠ΅ RWF_DSYNC).

Π‘Π΅Π»Π΅ΡˆΠΊΠΈ Π·Π° ΠΈΠ·Π²Π΅Π΄Π±Π°

НС сум Π³ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠ» Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ пСрформанситС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ испитав. Π Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π² Π²ΠΎ Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° Π½ΠΈΠ²Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° сС ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»ΠΈ. Π’ΠΎΠ° Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Π±ΠΈ Π³Ρ€Π΅ΡˆΠ°ΠΌ ΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ услови истото ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. ΠŸΡ€Π²ΠΎ, ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π·Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ повСќС влијаС Π½Π° пСрформанситС, Π° ΠΏΠΎΡ‚ΠΎΠ° ΡˆΡ‚ΠΎ влијаС ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ Π½Π° пСрформанситС.

  1. ΠŸΡ€Π΅ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ ΠΏΠΎΠ±Ρ€Π·ΠΎ ΠΎΠ΄ Π΄ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΎΠ΄ пСрформанситС ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ 2-100%). Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π±Π°Ρ€Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Π΄ΡƒΡ€ΠΈ ΠΈ ΠΏΠΎ систСмски ΠΏΠΎΠ²ΠΈΠΊ fallocate(), Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° овој Π΅Ρ„Π΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°Ρ€ΠΈΡ€Π°. ΠŸΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ, Π·Π° Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈ пСрформанси, Π΄Π° сС Ρ˜Π°Π²ΠΈΡ‚Π΅ fallocate() ΠΎΠ΄Π½Π°ΠΏΡ€Π΅Π΄ Π΄Π° сС Π΄ΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΠΎΡ‚ простор. Вогаш ΠΎΠ²Π° мСсто ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ Сксплицитно ΠΏΠΎΠΏΠΎΠ»Π½Π΅Ρ‚ΠΎ со Π½ΡƒΠ»ΠΈ ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ΠΎ fsync(). Ова ќС осигури Π΄Π΅ΠΊΠ° соодвСтнитС Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм сС ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ β€žΡ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈβ€œ намСсто β€žΠ½Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈβ€œ. Ова Π΄Π°Π²Π° ΠΌΠ°Π»ΠΎ (ΠΎΠΊΠΎΠ»Ρƒ 2%) ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° пСрформанситС. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, Π½Π΅ΠΊΠΎΠΈ дискови ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Π°Ρ‚ ΠΏΠΎΠ±Π°Π²Π΅Π½ ΠΏΡ€Π² пристап Π΄ΠΎ Π±Π»ΠΎΠΊ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅. Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° просторот со Π½ΡƒΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ (ΠΎΠΊΠΎΠ»Ρƒ 100%) ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° пСрформанситС. ОсобСно, ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи со дискови AWS EBS (ΠΎΠ²Π° сС Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅Π² Π΄Π° ΠΏΠΎΡ‚Π²Ρ€Π΄Π°ΠΌ). Π˜ΡΡ‚ΠΎΡ‚ΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ GCP ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ диск (ΠΈ ΠΎΠ²Π° Π΅ вСќС ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π°, ΠΏΠΎΡ‚Π²Ρ€Π΄Π΅Π½Π° со тСстови). И Π΄Ρ€ΡƒΠ³ΠΈ СкспСрти Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ˜Π° истото Π½Π°Π±Ρ™ΡƒΠ΄ΡƒΠ²Π°ΡšΠ΅, ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ дискови.
  2. ΠšΠΎΠ»ΠΊΡƒ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ систСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ, Ρ‚ΠΎΠ»ΠΊΡƒ сС повисоки пСрформанситС (Π΄ΠΎΠ±ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠΊΠΎΠ»Ρƒ 5%). ИзглСда ΠΊΠ°ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊ open() со Π·Π½Π°ΠΌΠ΅ O_DSYNC ΠΈΠ»ΠΈ Ρ˜Π°Π²Π΅Ρ‚Π΅ сС pwritev2() со Π·Π½Π°ΠΌΠ΅ RWF_SYNC ΠΏΠΎΠ±Ρ€Π·ΠΎ ΠΎΠ΄ ΠΏΠΎΠ²ΠΈΠΊ fdatasync(). Π‘Π΅ сомнСвам Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΅Π½Ρ‚Π°Ρ‚Π° ΠΎΠ²Π΄Π΅ Π΅ Π΄Π΅ΠΊΠ° овој пристап ΠΈΠ³Ρ€Π° ΡƒΠ»ΠΎΠ³Π° Π²ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ систСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π·Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ истиот ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ намСсто Π΄Π²Π°). Но, Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π²ΠΎ пСрформанситС Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»Π°, ΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ цСлосно Π΄Π° ја ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈ Π΄Π° искориститС Π½Π΅ΡˆΡ‚ΠΎ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° Π΄Π° ја ΠΊΠΎΠΌΠΏΠ»ΠΈΡ†ΠΈΡ€Π° Π½Π΅Ρ˜Π·ΠΈΠ½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°.

Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π²Π΅ интСрСсира Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΎΠ΄Ρ€ΠΆΠ»ΠΈΠ²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π΅Π²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ корисни ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈ:

  • I/O ΠŸΡ€ΠΈΡΡ‚Π°ΠΏΠ½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ β€” ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° основитС Π½Π° Π²Π»Π΅Π·Π½ΠΎ/ΠΈΠ·Π»Π΅Π·Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ.
  • ΠžΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π΄Π° стигнат Π΄ΠΎ дискот β€” ΠΏΡ€ΠΈΠΊΠ°Π·Π½Π° Π·Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ сС случува со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ‚ΠΎΡ‚ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΄ΠΎ дискот.
  • Кога Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ синхронизиратС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΡˆΡ‚ΠΎ содрТи - ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅Ρ‚ΠΎ ΠΊΠΎΠ³Π° Π΄Π° сС користи fsync() Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ. Π”Π° Π³ΠΎ ставимС ΠΎΠ²Π° Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ, ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π° ΠΊΠΎΠ³Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΠ²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΎΠ²Π°Π° ΠΏΡ€Π΅ΠΏΠΎΡ€Π°ΠΊΠ° Π΅ ΡˆΡ‚ΠΎ Π²ΠΎ Linux ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ Π·Π° истата Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.
  • SQL Server Π½Π° Linux: FUA Internals β€” Ρ‚ΡƒΠΊΠ° Π΅ опис Π½Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Π²ΠΎ SQL Server Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Linux. ОвдС ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ интСрСсни спорСдби ΠΏΠΎΠΌΠ΅Ρ“Ρƒ систСмскитС ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π½Π° Windows ΠΈ Linux. РСчиси сум сигурСн Π΄Π΅ΠΊΠ° Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° овој ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π» Π½Π°ΡƒΡ‡ΠΈΠ² Π·Π° FUA ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° XFS.

Π”Π°Π»ΠΈ стС ΠΈΠ·Π³ΡƒΠ±ΠΈΠ»Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΊΠΎΠΈ мислСвтС Π΄Π΅ΠΊΠ° сС Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ Π½Π° диск?

Π’Ρ€Π°Ρ˜Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ API-ΠΈ Π·Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Linux

Π’Ρ€Π°Ρ˜Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ API-ΠΈ Π·Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Linux

Π˜Π·Π²ΠΎΡ€: www.habr.com