áá»áœááºá¯ááºááẠcloud á
áá
áºáá»á¬ážááœáẠáá±áá¬ááá¯ááŸá±á¬ááºááŸá¯ áááºááŒáááºááŸá¯ááᯠáá¯áá±ááááŒá¯áᬠá¡ááŒá±áá¶á¡áá¬áá»á¬ážááᯠáá¬ážáááºááŒá±á¬ááºáž áá±áá»á¬á
á±ááẠááááááá¯ááºááᯠá
ááºážáááºááẠáá¯á¶ážááŒááºáá²á·áááºá áá«
á€áá±á¬ááºážáá«ážááœááºá Linux ááá¯áẠAPIs á០áá¶á·ááá¯ážáá±ážáá±á¬ ááŒá²ááŒá¶ááŸá¯ ááá¹ááá¬ážáá»á¬ážááᯠáá±á·áá¬ááŒáá·áºáá«áááºá á€ááœááºá¡áá¬á¡á¬ážáá¯á¶ážááá¯ážááŸááºážááá·áºáá¯á¶ááááº- áááá¯ááááºá command ááá¯áá±á«áºáááºá write()
á á€á¡áááá·áºáá±á¬áºááá¯ááºáá±á¬ááºáá»ááºááŒá®ážááŒá±á¬ááºááŒá®ážáá±á¬ááºá áá±áá¬ááᯠáá
áºááºáá±á«áºááœáẠáá¯á¶ááŒá¯á¶á
áœá¬ááááºážáááºážáá¬ážáááºááŒá
áºáááºá áá«áá±ááá·áº write()
á¡ááá®áá±ážááŸááºážáá±áá¬ááᯠRAM ááœááºááŸááá±á¬ kernel cache ááá¯á·áá¬áá°ážáá°áááºá áá±áá¬ááᯠáá
áºááºááá¯á· áá±ážááẠá
áá
áºá¡á¬áž ááœááºážá¡á¬ážáá±ážáááºá¡ááœááºá á¡áá»áá¯á·áá±á¬ áá±á¬ááºááẠááá¹ááá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá«áááºá
áá±áá°áá»á¡á¬ážááŒáá·áºá á€á¡ááŒá±á¬ááºážá¡áá¬ááẠáá»áœááºá¯ááºá
áááºáááºá
á¬ážáá±á¬ áá±á«ááºážá
ááºáá
áºáá¯ááœáẠáá»áœááºá¯ááºáááºáá°áá²á·áá¬áá»á¬ážááŸáá·áº áááºááá¯ááºáá±á¬ ááŸááºá
á¯á¡á
á¯á
á¯ááŒá
áºáááºá á¡áá±ážááŒá®ážáá¯á¶ážá¡ááŒá±á¬ááºáž á¡ááá¯áá»á¯ááºááŒá±á¬ááẠáá±ááŸááºáááºáá¶á·áá²á· data storage ááᯠá
á¯á
ááºážááá¯á·á¡ááœáẠcommand ááá¯áá¯á¶ážááá¯á· ááá¯á¡ááºáá«ááẠfdatasync()
ááá¯á·ááá¯áẠá¡áá¶ááŒáá·áº ááá¯ááºáá»á¬ážááá¯ááœáá·áºáá«á O_DSYNC
. áá¯ááºááŸáá
áºáá®ááá¯á· áá±áá¬áá»á¬ážááŒá
áºáá»ááºáá¯á¶á¡ááŒá±á¬ááºáž ááá¯ááá¯áá±á·áá¬ááẠá
áááºáááºá
á¬ážáá«áá ááŒáá·áºááŸá¯áá«á
write() function ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáá¡ááºá¹áá«áááºáá»á¬áž
á
áá
áºáá±á«áºááá¯ááŸá¯ write()
á
á¶áááºááŸááºáá¬ážáááºá write()
data read operations áá»á¬ážááẠááááºá áá±ážáá¬ážáá²á·ááá·áº bytes á¡ááá¡áá»ááᯠááŒááºáá±ážááá«áááºá
á
á
áºáááºáá±ážááᯠááá¯ááá¯ááá¬áž write()
á¡áá¯ááŒá°áá¯á¶ážáá¬áž áááºážááá¬ááá¯ááºážá¡ááá±á¬á· áá¯ááºáá«áááºá áá±áá¬áááºááŒááºáž áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠáá±ážáá¬ážááá·áºá¡áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá¯á·ááá¯áẠáá
áºáá¯áá»áŸ ááŒááºáá±ážááá«áááºá write()
. áá«áá±ááá·áº á
á
áºáááºáá±áž write()
á
á¶áá»áááºá
á¶ááœáŸááºážáá²á·á¡áá® áá±ážááá¯ááºážááá»áŸááᯠáá»áá±ážááŒá®áž á¡áá¯á¶ážáááá±ážá
áá¬áááá¯áá«áá°ážá á¡áá»ááºá¡áááºá áá
áºá
áááºáá
áºááá¯ááºážáᬠáá±ážáá¬ážááœáá·áºááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá°áá®áá±á¬ááá¯ááºáá±á¬áºááŒáá»ááºáá±ážáá°ááŸáá±á¬áºááŒáá±á¬ááá¯ááºáá
áºáá¯ááá¯á· 1024 bytes áá±á«ááºážááá·áºááá·áºáá
áºáá¯á
á®ááœáẠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ááŸá
áºáá¯ááŸááááºá á
á¶áááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠá
á¬áá±ážááŒááºážáá¯ááºáááºážáá
áºáá¯á
á®ááẠááá¯ááºááœáẠáá
áºááá¯ááºáᬠáá±á«ááºážááá·áºááá¯ááºááá·áºá¡áá« ááááºááᯠáááºáá¶ááá¯ááºáááºááŒá
áºáááºá á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡áá¯ááŒá°áá¯á¶ážá¡ááŒá
ẠáááºáááºáááºááŸááá±áááºááŒá
áºááŒá®ážá ááá¯á·áá±á¬áº áááºážááá¯á·ááŒá®ážáá¯á¶ážááŒá®ážáá±á¬ááºá ááá¯ááºááá¯á· áá±ážáá¬ážáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááẠááŸá¯ááºááœá±ážááœá¬ážáááºááŒá
áºáááºá
fsync() ááŸáá·áº fdatasync() áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
áá±áá¬ááᯠdisk ááá¯á· flush áááºá¡ááœááºáá°áá¯á¶ážáááºážáááºážááŸá¬ function ááá¯áá±á«áºááá¯ááŒááºážááŒá
áºáááºá fdatasync()
á á¡ááá¯áá« fdatasync()
á€áá¯ááºáá±á¬ááºáá»ááºá áá¯ááºáá±á¬ááºááŸá¯á¡ááœááºážá ááá¯áá²á·ááá¯á·áá±á¬ áááºáá¬áá±áá¬ááá¬áááᯠáá
áºááºááœáẠááááºážáááºážáá¬ážááŒá±á¬ááºážá áááºážááẠ"á¡á±á¬ááºáá«áá±áá¬áááºááŸá¯ááŒááºážááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸááºáááºáá±á¬áá¯ááºáá±á¬ááºááŸá¯á¡ááœáẠááá¯á¡ááºáááº" áᯠáá±á¬áºááŒáá¬ážáááºá á€áááºááŸá¬ á¡ááá®áá±ážááŸááºážá¡áá»á¬ážá
ᯠá¡áá±ážáá¬ážááá·áºá¡áá¬ááŒá
áºáááºá
á€áá±áá¬ááœáẠááŒá
áºáá±á«áºáá¬ááá¯ááºááá·áº ááŒá¿áá¬áá
áºáá¯ááŸá¬ ááŒá
áºááá¯ááºááŒá±ááŸááá±á¬ áá»áá¯á·ááœááºážááŸá¯áá
áºáá¯ááŒá®ážáá±á¬áẠááá¯ááºááᯠááŸá¬ááœá±á·ááá¯ááºáááºáᯠá€ááá¹ááá¬ážáá»á¬ážá á¡á¬ááá¶áá»ááºááá±ážááŒááºážááŒá±á¬áá·áºááŒá
áºáááºá á¡áá°ážáááŒáá·áºá ááá¯ááºá¡áá
áºáá
áºáá¯áááºáá®ážáá±á¬á¡áá«á áá¯ááºážáá±á«áºááá¯ááá·áºáááºá fsync()
áááºážááœááºáá«ááŸááá±á¬áááºážááœáŸááºá¡ááœááºá ááá¯ááºáá«á áá»ááºáá»ááŒá®ážáá±á¬ááºá á€ááá¯ááºáááŸááᯠáá±á«áºáá¬ááá¯ááºáááºá áááºážá¡ááœááºá¡ááŒá±á¬ááºážááŒáá»ááºááŸá¬ UNIX á¡á±á¬ááºááœáẠhard links áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒá±á¬áá·áºá directory á¡áá»á¬ážá¡ááŒá¬ážááœááºááá¯ááºáá
áºáá¯áááºááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áº áá±á«áºáá±á¬á¡áá«á fsync()
ááá¯ááºáá
áºáá¯ááẠáááºááá·áº directory data ááá¯áááºáž disk ááá¯á· ááŸááºážáá¯ááºááááºááᯠááááẠáááºážáááºážáááŸááá«áfsync()
áááºááá¯ááºáá¬ááá¯ááºáá»á¬ážáá«ááŸááá±á¬ áááºážááœáŸááºáá»á¬ážááá¯á·á ááá¯á·áá±á¬áº áááºážááẠá¡ááŒá¬ážááá¯ááºá
áá
áºáá»á¬ážááŸáá·áº á¡áááºáááŒá±ááá¯ááºáá«á
á€ááá¹ááá¬ážááᯠááá°áá®áá±á¬ ááá¯ááºá
áá
áºáá»á¬ážááœáẠááœá²ááŒá¬ážá
áœá¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºá áá«áá¯á¶ážáá²á·ááẠfdatasync()
áááºážáááºážááŒááºáááºá fsync()
. ááŸáááŸá¬áá±á«á·á blktrace
ááœáŸááºááŒáááºá fdatasync()
áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº disk ááœáẠdata áááºážáá«ážááẠ(ext4 ááœáẠfsync()
20 KiB áá²á·áá±ážáááºá fdatasync()
- 16 KiB)á ááá¯á·á¡ááŒáẠXFS ááẠext4 áááºá¡áááºážáááºááá¯ááŒááºáááºááá¯áá»áœááºáá±á¬áºáááá²á·áááºá áá±ážáá±áž blktrace
á¡á²áá«ááᯠááŸá¬ááœá±á·ááá¯ááºáá²á·áááºá fdatasync()
áá±áá¬áá»áŸá±á¬á·áááºážáá±á¬áá
Ạ(XFS ááœáẠ4 KiB)á
fsync() ááᯠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá« ááá±áá¬áá±á¬ á¡ááŒá±á¡áá±áá»á¬áž
ááá±áá¬áá±á¬ á¡ááŒá±á¡áá±áá¯á¶ážáááºááᯠááœá±ážááŒáá·áºááá¯ááºáááºá fsync()
áá«áááºááœá±á·ááœá±á·ááŒá®ážááŒá®á
ááá¯áá²á·ááá¯á·áá±á¬ á¡ááŒá
áºá¡áá»ááºááẠáááá áá¯ááŸá
áºááœáẠááááá¯á¶áž ááŒá
áºááœá¬ážáá²á·áááºá ááá¯á¡áá»áááºááœááºá ááá¯ááºá¡ááŒá±á¬ááºá¡ááŒá¬ážááᯠdisk ááá¯á·á
á¬áá±ážáá±áá«á Firefox 2008 interface ááẠ"frozen" ááŒá
áºáááºá ááŒá¿áá¬ááŸá¬ á¡ááºáá¬áá±á·á
áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠáááºážáá¡ááŒá±á¡áá±ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááẠSQLite áá±áá¬áá±á·á
áºááᯠá¡áá¯á¶ážááŒá¯áá²á·ááŒááºáž ááŒá
áºáááºá á¡ááºáá¬áá±á·á
áºááœáẠááŒá
áºáá±á«áºáá²á·áá±á¬ ááŒá±á¬ááºážáá²ááŸá¯áá
áºáá¯á
á®ááŒá®ážáá±á¬ááºá áá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºáááºá fsync()
áááºááŒáááºáá±á¬áá±áá¬ááááºážáááºážááŒááºážá¡ááœáẠáá±á¬ááºážááœááºáá±á¬á¡á¬ááá¶áá»ááºáá±ážáá±á¬á ááá¯á·áá±á¬ááºá¡áá¯á¶ážááŒá¯áá±á¬ ext3 ááá¯ááºá
áá
áºááœááºá áá¯ááºáá±á¬ááºáá»áẠfsync()
á
áá
áºá¡ááœááºážááŸá "áá
áºáááºáá±á¬" á
á¬áá»ááºááŸá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáááºáá¯ááºááŒá®áž áááºááá¯ááºáá¬ááá¯ááºááŸáá·áº áááºááá¯ááºáá±á¬ ááá¯ááºáá»á¬ážáá¬áááá²á ááá¯ááá¯áááºááŸá¬ Firefox ááœáẠááá¯ááºáá
áºáá¯ááᯠááŸáááºááá¯ááºááŒááºážááẠá
áá¹ááá·áºáá»á¬ážá
áœá¬ ááŒá¬ááá¯ááºááá·áº áá¶ááá¯ááºáá
áºáá
áºáá¯ááá¯á· áá±áᬠmegabytes ááᯠáá±ážááŸááºá
á±ááá¯ááºáááºá áá»áœááºáá±á¬áº áá¬ážáááºááá±á¬áẠááŒá¿áá¬áá²á· á¡ááŒá±áá«á
áá¯áááááŒá¿áá¬á 2009 ááŸá¬ááŒá
áºáá²á·áááºá ááá¯á·áá±á¬ááºá á
áá
áºáá»ááºáá»ááŒá®ážáá±á¬ááºá á¡áá
áºáááºáá®ážáá¬ážáá±á¬ááá¯ááºáá»á¬ážá
áœá¬ááẠáá¯á-á¡ááŸááºááŒá
áºáááºáá°áá±á¬á¡áá»ááºááŸáá·áº ext4 ááá¯ááºá
áá
áºá¡áá
áºáá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááŒá¯á¶ááœá±á·áá²á·ááá±á¬áºáááºážá áááºážááẠext3 ááá¯ááºá
áá
áºáá±á¬ááºážááœáẠááŒá
áºááá¬áá«á ááááºá
á¬ááá¯ááºááœááºá ext3 ááẠá¡áá¬áá»á¬ážá
áœá¬ááᯠááŸá±ážááœá±ážá
á±ááá·áº disk áá±á«áºááŸá áá±áá¬áá»á¬ážá
áœá¬ááᯠáááºáá²á·ááá¯á· á
áœáá·áºáá
áºáá²á·áááºááᯠááŒá±á¬ááŒáá²á·áááºá fsync()
. á¡ááŒá±á¡áá±ááá¯ážáááºá
á±áááºá ext4 ááẠáá®ážááŒá¬ážááá¯ááºáá
áºáá¯ááŸáá·áºáááºááá¯ááºááá·áº "áá
áºáááºáá±á¬" á
á¬áá»ááºááŸá¬áá»á¬ážááá¯áᬠáááºááŸá¬ážáá±ážáááºá á¡ááŒá¬ážááá¯ááºáá»á¬ážá áá±áá¬áá»á¬ážááẠext3 ááẠá¡áá»áááºááá¯ááŒá¬á
áœá¬ ááŸááºáá¬ááºáá²ááœáẠááŸááá±áááºá á
áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠáááºážááᯠáá¯ááºáá±á¬ááºáá²á·ááẠ(áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áá±áá¬ááẠá€á¡ááŒá±á¡áá±ááœáẠá
áá¹ááá·áº 30 ááŒá¬áá±áááºááŒá
áºááŒá®ážá áááºážááᯠá¡áá¯á¶ážááŒá¯á ááẠconfigure áá¯ááºááá¯ááºáá«áááºá fsync()
áááºááŒáááºáá±á¬áá±áá¬ááá¯ááŸá±á¬ááºááŸá¯ááá¯áá±ážáá±á¬ááºáááºááŸáá·áºáá¡á±á¬ááºááŒááºááŸá¯áá»á¬ážáá¡áá»áá¯ážáááºáá»á¬ážááŸáááºááá¯ááºááá»áŸáá¬ááœááºáááºááá¯á¡ááºáá±á¬ application áá»á¬ážááœááºá áá¯ááºáá±á¬ááºáá»áẠfsync()
ext4 áá²á· ext3 ááẠá¡áá»á¬ážááŒá®áž ááá¯áááá±á¬ááºáááºá á€áá»ááºážáááºááŸá¯áá¡á¬ážáááºážáá»ááºááŸá¬ ááááºááá²á·ááá¯á· áááºážáá¡áá¯á¶ážááŒá¯ááŸá¯ááẠáááá¯ááááºáá»á¬ážááá·áºááœááºážááŒááºážáá²á·ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·ááᯠááŸá±ážááœá±ážá
á±ááŒááºážáááºááŒá
áºáááºá áá®á¡ááŒá±á¬ááºážá¡áá±ážá
áááºááŒáá·áºáá«á
ááááááŒá¿áᬠfsync()
, 2018 ááœááºá
áááºáá²á·áááºá ááá¯á·áá±á¬áẠPostgreSQL ááá±á¬áá»ááºááá±á¬ááºá¡ááœááºážááœááºá áááºážááẠfunction ááá¯ááœá±á·ááŸááá²á·áááºá fsync()
error ááŒá¯á¶ááœá±á·áááŒá®áž áááºážááẠ"áá
áºáááºáá±á¬" á
á¬áá»ááºááŸá¬áá»á¬ážááᯠ"ááá·áºááŸááºáž" á¡ááŒá
Ạá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá ááá¯á·ááŒá±á¬áá·áº á¡á±á¬ááºáá«áá±á«áºááá¯ááŸá¯áá»á¬áž fsync()
á¡á²áá®ááᯠá
á¬áá»ááºááŸá¬ááœá±áá²á· áá¬á០ááá¯ááºáá«áá²á·á ááá¯á·á¡ááœááºááŒá±á¬áá·áº ááŒá¯ááŒááºáá¬ážáá±á¬ á
á¬áá»ááºááŸá¬áá»á¬ážááᯠááŸááºáá¬ááºááœáẠááááºážáááºážáá¬ážááŒá®áž áá
áºááºááá¯á· áááºáá±á¬á¡áá«á០ááá±ážáá«á áá±áá¬á¡áá»áá¯á·ááᯠáá
áºááºááá¯á· áá±ážáá»áááºáᯠá¡ááá®áá±ážááŸááºážá áá°ááá±á¬ááŒá±á¬áá·áº áááºážááẠáááá·áºáá±ážáá¯áá¹ááá
áºáá¯ááŒá
áºáá±á¬áºáááºážá á¡ááŸááºááááºáá±á¬á· ááá¯ááá¯á·ááŒá
áºáááºááá¯ááºáá±á á¡á²áá®ááᯠáá»ááºááœááºáááºá fsync()
ááŸá¬ážáá«áááºá áá®ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬ application á ááŒá¿áá¬ááᯠááá¯ááºáá»ááºááá¯á· áá¬ááŸáá®ážáá«áž ááá¯ááºááá¯ááºáá«áá°ážá áá®áááºááá¯ááºážááŸá¬ áá®ááá¯ááŒá
áºáá¬áá²á·á¡áá« PostgreSQL áá²á· áááŒá¬áž application ááœá± áá»ááºá
á®ážááœá¬ážáááºá O_SYNC
ááá¯á·ááá¯áẠá¡áá¶ááŸáá·áº O_DSYNC
. á€áá»ááºážáááºááŸá¯ááŒáá·áºá á
áá
áºááẠáá®ážááŒá¬ážáá±áá¬áá±ážááŒááºážááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá¬ááœáẠááŒá
áºáá±á«áºáá¬ááá¯ááºááá·áº á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠá¡á
á®áááºáá¶áááºááŒá
áºáá±á¬áºáááºážá á€áá»ááºážáááºááŸá¯ááœáẠá¡ááºááºáá®áá±ážááŸááºážááẠááŒá¬ážáá¶áá»á¬ážááᯠá
á®áá¶ááá·áºááœá²ááẠááá¯á¡ááºáááºá áááºážá¡ááŒá±á¬ááºážááá¯ááá¯áááºáá«á
O_SYNC ááŸáá·áº O_DSYNC á¡áá¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºáá»á¬ážááá¯ááœáá·áºááŒááºážá
ááŒá²ááŒá¶áá±á¬áá±áá¬ááááºážáááºážááŸá¯ááᯠáá¶á·ááá¯ážáá±ážááá·áº Linux ááá¹ááá¬ážáá»á¬ážá ááœá±ážááœá±ážááŸá¯ááᯠááŒááºááœá¬ážááŒáá«á
áá¯á·á ááŒá±á¬áááẠá¡áá¶á¡áá¯á¶ážááŒá¯áá¯á¶á¡ááŒá±á¬ááºáž ááŒá±á¬áá±áᬠO_SYNC
ááá¯á·ááá¯áẠá¡áᶠO_DSYNC
á
áá
áºáá±á«áºááá¯ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºáá»á¬ážááá¯ááœáá·áºááá·áºá¡áá« write()
á
áá
áºááẠá¡áá®ážáá®áž á¡áááá·áºáá±ážáááºá fsync()
О fdatasync()
á á¡ááá¯áá« write()
О fdatasync()
) á€áá»ááºážáááºááŸá¯á á¡áááá¡á¬ážáááºážáá»ááºááŸá¬ áááºááá¯ááºáᬠfile descriptor ááá¯á¡áá¯á¶ážááŒá¯á áá±ážáá¬ážááŒááºážáá¯ááºáááºážá¡á¬ážáá¯á¶ážááᯠáá
áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºáááºááŒá
áºááŒá®ážá áááºážááẠá¡ááá®áá±ážááŸááºážáá¯ááºááᯠáááºáá±á¬ááºááá¯ááºááŸá¯ááᯠááá·áºáááºááá¯ááºáááºá
O_DIRECT á¡áá¶ááŒáá·áº ááá¯ááºááá¯áẠI/O ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
á
áá
áºáá±á«áºááá¯ááŸá¯ open()
á¡áá¶ááá¯áá±á¬ááºáá¶áá«áááºá O_DIRECT
áááºáááºááŸá¯á
áá
ẠáááºááŸáºááᯠáá»á±á¬áºááŒááºáááºá I/O áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá áá
áºááºááŸáá·áº ááá¯ááºááá¯ááºá¡ááŒááºá¡ááŸááºáá¯ááºáá±á¬ááºááẠáá®ááá¯ááºážááŒá¯áá¯ááºáá¬ážáááºá á€á¡áá¬ááẠáá»á¬ážá
áœá¬áá±á¬ááá
á¹á
áá»á¬ážááœáẠáááá¯ááááºááŸáá¯ááºáá±ážáá±á¬ write commands áá»á¬ážááᯠdisk ááŸáá·áºá¡áá¯ááºáá¯ááºáááºáááºááœááºáá±á¬ command áá»á¬ážá¡ááŒá
Ạááá¯ááºááá¯ááºáá¬áá¬ááŒááºááŒááºážááᯠááá¯ááá¯áááºá ááá¯á·áá±á¬áº áá±áá¯áá»á¡á¬ážááŒáá·áº á€ááá¹ááá¬ážááẠáá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážá¡ááœáẠá¡á
á¬ážááá¯ážááŸá¯ááá¯ááºáá«á fsync()
ááá¯á·ááá¯áẠfdatasync()
. á¡ááŸááºááŸá¬ disk ááá¯ááºááá¯ááºáá¯ááºááá¯ááºáááºá O_DIRECT
, O_DSYNC
ááá¯ááá¯áááºááŸá¬ á
á¬áá±ážááŒááºážáá¯ááºáááºážáá
áºáá¯á
á®ááẠáá±á«áºááá¯ááŸá¯áá
áºáá¯ááŒáá·áº áá¯ááºáá±á¬ááºááœá¬ážáááºááŒá
áºáááºá fdatasync()
.
XFS ááá¯ááºá
áá
áºááẠáááŒá¬áá±ážáá®á "fast path" ááᯠááá·áºááœááºážáá²á·ááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá O_DIRECT|O_DSYNC
- áá±áá¬ááŸááºáááºážáá»á¬ážá á¡áááºá block ááá¯á¡áá¯á¶ážááŒá¯á overwrite áá¯ááºáá«á O_DIRECT|O_DSYNC
ááá¯á·áá±á¬áẠXFS ááẠáááºááŸáºááᯠáááºááŸá¬ážááŒááºážá¡á
á¬ážá á
ááºá áááºážááᯠáá¶á·ááá¯ážáá«á FUA áá±ážáá¬ážááá·áº á¡áááá·áºááᯠáá¯ááºáá±á¬ááºáááºááŒá
áºáááºá utility ááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáá«á
á
áºáá±ážáá²á·áááºá blktrace
Linux 5.4/Ubuntu 20.04 á
áá
áºááœááºá áááºážááẠá¡áááºážáá¯á¶ážáá±áá¬ááá¬áááᯠdisk ááá¯á·áá±ážááŒá®áž áá¯ááºáá±á¬ááºáá»ááºááŸá
áºáᯠ(ááŸá
áºáá¯ááá¯ááº) (áá±ážáá»ááŒá®áž áááºááŸáºááá¯áááºááŸá¬ážááŒááºáž) ááŒá
áºáá±á¬ááŒá±á¬áá·áº á€áá»ááºážáááºááŸá¯ááẠááá¯ááá¯áááá±á¬ááºááá·áºáááºá ááá·áºááºáá
áºáá¯ááœá±á·áááºá
sync_file_range() áá¯ááºáá±á¬ááºáá»ááº
Linux ááœáẠsystem call áá
áºáá¯ááŸááááºá sync_file_range()
á€á¡áááá·áºááẠ"á¡ááœááºá¡áá¹ááá¬ááºáá»á¬áž" áá¯ááá¯áááºá áááºážááá¯á¡áá¯á¶ážááŒá¯áááºáá¡ááŒá¶ááŒá¯áá«á á¡ááºá¹áá«áááºáá»á¬ážááŸáá·áºá¡áá¹ááá¬ááºáá»á¬áž sync_file_range()
á¡ááœááºáá±á¬ááºážááœááºá
áœá¬ áá±á¬áºááŒáá¬ážáá«áááºá fdatasync()
á á¡ááá¯áá« sync_file_range()
ZFS ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœááºáá±áá¬ááᯠdisk ááá¯á·ááá¯ááºáá«á á¡áá¯á¶ážááŒá¯áá²áá±á¬áá¯ááºááœáẠáá»áœááºááœááºážáá»ááºáá»á¬áž áá«áááºááá¯ááºáááºáᯠá¡ááœá±á·á¡ááŒá¯á¶á ááŒá±á¬ááŒáááºá ááá¯á·ááŒá±á¬áá·áºá áá¯á¶ážááááá¯á¡ááºáá² á€á
áá
áºáá±á«áºááá¯ááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážáááŒá¯ááẠáá»áœááºá¯ááºá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
áá±áá¬áááºááŒá²ááŸá¯ááŸáá á±áááºá¡ááœáẠá áá áºáá±á«áºááá¯ááŸá¯áá»á¬áž
á¡ááŒá²áááŒáẠI/O áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáá»ááºážáááºááŸá¯ áá¯á¶ážáá¯ááŸáááŒá±á¬ááºáž áá»áœááºá¯áẠáááá¯á¶ážáá»á¯ááºááá¯ááºáá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠfunction call áá
áºáá¯ááá¯á¡ááºáááºá fsync()
ááá¯ááºááá¯áááºáá®ážáá²á·ááá·áºáááºážááœáŸááºá¡ááœááºá áá»ááºážáááºáá¯á¶áá»á¬ážááŸá¬-
- áá¯ááºáá±á¬ááºáá»ááºáá±á«áºááá¯ááŸá¯
fdatasync()
ááá¯á·ááá¯ááºfsync()
function ááŒá®ážáá±á¬ááºwrite()
(áá¯á¶ážááẠááá¯áá±á¬ááºážáá«áááºáfdatasync()
). - á¡áá¶áá
áºáá¯ááŒáá·áºááœáá·áºáá¬ážáá±á¬ ááá¯ááºáá±á¬áºááŒáá»ááºáá
áºáá¯ááŸáá·áº á¡áá¯ááºáá¯ááºááŒááºážá
O_DSYNC
ááá¯á·ááá¯ááºO_SYNC
(á¡áá¶ááŸáá·áº ááá¯áá±á¬ááºážáááºáO_DSYNC
). - ááœáŸááºááŒá¬ážáá»ááºá¡áá¯á¶ážááŒá¯ááŸá¯
pwritev2()
á¡áá¶ááŸáá·áºá¡áá°RWF_DSYNC
ááá¯á·ááá¯ááºRWF_SYNC
(ááŒá áºááá¯ááºááẠá¡áá¶áá²á·RWF_DSYNC
).
á áœááºážáá±á¬ááºáááºááŸááºá á¯áá»á¬áž
áá«á á¯á¶á ááºážá á áºáá±ážáá²á·áá±á¬ á¡áá»áá¯ážáá»áá¯ážáá±á¬ááá¹ááá¬ážáá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠááá¯áá áá¯ááºáááá¯ááºážáá¬áá²á·áá«á áá°ááá¯á·áá²á· áá¯ááºáááºážá¡ááŸáááºá¡áá¯ááºááŸá¬ áááááŒá¯áááá²á· ááœá¬ááŒá¬ážáá»ááºááœá±á á¡ááœááºáá±ážáááºáá«áááºá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááŸá¬ážááá¯ááºáááºá á¡ááŒá¬ážá¡ááŒá±á¡áá±áá»á¬ážááœáẠáá°áá®áá±á¬á¡áá¬ááẠááá°áá®áá±á¬ááááºáá»á¬ážááᯠááŒáááá¯ááºáááºáᯠááá¯ááá¯áááºá ááááŠážá áœá¬á á áœááºážáá±á¬ááºáááºááá¯ááááºáá±á¬ááºááá·áºá¡áá¬áá»á¬ážá¡ááŒá±á¬ááºážá ááá¯á·áá±á¬áẠá áœááºážáá±á¬ááºáááºáá»á±á¬á·áááºážá á±ááá·áºá¡áá¬áá»á¬ážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
- ááá¯ááºáá±áá¬ááᯠáááºáá±ážááŒááºážááẠááá¯ááºáá
áºáá¯ááá¯á· áá±áá¬áááºááá·áºááŒááºážááẠááá¯ááŒááºááẠ(á
áœááºážáá±á¬ááºáááºáááŸáááŸá¯ááẠ2-100%) ááŸáááá¯ááºáá«áááºá ááá¯ááºáá
áºáá¯ááá¯á· áá±áá¬ááᯠááœá²áá»áááºááŒááºážááẠá
áá
áºáá±á«áºááá¯ááŒá®ážáá±á¬ááºááœááºááẠááá¯ááºá áááºáá¬áá±áá¬ááᯠáááºáá±á¬ááºážááŒá±á¬ááºážáá²ááŸá¯ ááá¯á¡ááºáá«áááºá
fallocate()
ááá¯á·áá±á¬áº á€á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááá¬á ááœá²ááŒá¬ážááá¯ááºáááºá á¡áá±á¬ááºážáá¯á¶ážá áœááºážáá±á¬ááºáááºá¡ááœáẠáá¯ááºážáá±á«áºááá¯ááẠá¡ááŒá¶ááŒá¯á¡ááºáá«áááºáfallocate()
ááá¯á¡ááºáá±á¬áá±áá¬ááᯠááŒáá¯áááºááœá²áá±áá±ážáááºá ááá¯á·áá±á¬áẠá€áá±áá¬ááᯠáá¯áááŒáá·áº á¡ááá¡áááºážááŒáá·áºááŒá®áž áá±á«áºááá«áááºáfsync()
. áááºážááẠááá¯ááºá áá áºááŸá áááºá ááºááááºááá¯á·ááŸá¯áá»á¬ážááᯠ"ááœá²áá±ááá¬ážáá±á¬" á¡á á¬áž "ááœá²áá±áááºááŸááºááŒááºáž" á¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯á á±áááºááŒá áºáááºá áááºážááẠá áœááºážáá±á¬ááºááẠá¡áááºážááẠ(2%) ááá·áº ááá¯ážáááºááŸá¯ááᯠáá±ážáááºá ááá¯á·á¡ááŒááºá á¡áá»áá¯á·áá±á¬áá áºáá»á¬ážááẠá¡ááŒá¬ážá¡áá¬áá»á¬ážááẠáááááá±á¬ááºáááºáá±á¬ááºáááºáááºááŸá¯ ááŸá±ážááœá±ážááœá¬ážááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ áá±áá¬ááᯠáá¯áááŒáá·áº ááŒáá·áºááœááºážááŒááºážááŒáá·áº áááá¬áááºááŸá¬ážáá±á¬ (100%) á áœááºážáá±á¬ááºááẠááá¯ážáááºááŸá¯ááᯠááŒá áºáá±á«áºá á±ááá¯ááºáááºá á¡áá°ážáááŒáá·áºá áááºážááẠdisks áá»á¬ážááŸáá·áºááŒá áºááœá¬ážááá¯ááºáááºáAWS EBS (áá«áááá¬ážáááºááá¯ááºáá²á·á¡áá»ááºá¡áááºáá«á áá«áá°ááá¯á·ááá¯á¡áááºáááŒá¯ááá¯ááºáá°áž)á Storage ááŸá¬áááºáž á¡áá¬ážáá°áá«áá²áGCP Persistent Disk (áááºážááẠááá¬ážáááºá¡áá»ááºá¡áááºááŒá áºááŒá®ážá á ááºážáááºááŸá¯áá»á¬ážááŒáá·áº á¡áááºááŒá¯ááŒá®ážáá¬ážááŒá áºáááº)á áááŒá¬áž ááá¬ááŸááºááœá±áááºáž áá®ááá¯áá«áá²ááá±á·áá¬áá±áž ááá°áá®áá±á¬ disk áá»á¬ážááŸáá·áºáááºááá¯ááºáááºá - á
áá
áºáá±á«áºááá¯ááŸá¯ áááºážáá«ážáá±á á
áœááºážáá±á¬ááºááẠááŒáá·áºáá¬ážáá± (á¡ááŒáẠ5%) ááá·áº ááŸáááá¯ááºáá«áááºá áá±á«áºáá¯á¶ááááºá
open()
á¡áá¶ááŸáá·áºá¡áá°O_DSYNC
ááá¯á·ááá¯áẠáá¯ááºážáá±á«áºááá¯áá«ápwritev2()
á¡áá¶ááŸáá·áºá¡áá°RWF_SYNC
ááŒááºááŒááºáá±á«áºáá«áfdatasync()
. á€áá±áá¬ááœáẠá¡áááá¡áá»ááºááŸá¬ á€áá»ááºážáááºááŸá¯ááŒáá·áºá áá°áá®áá±á¬áá¯ááºáááºážáá¬áááºááá¯ááŒá±ááŸááºážááẠ(áá±á«áºááá¯ááŸá¯ááŸá áºáá¯á¡á á¬áž áá±á«áºááá¯ááŸá¯áá áºáá¯á¡á á¬áž) áááºážáá«ážáá±á¬á áá áºáá±á«áºááá¯ááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºááááºáᯠáá»áœááºá¯ááºáá¶ááááŸááá«áááºá ááá¯á·áá±á¬áº á áœááºážáá±á¬ááºáááºááœá¬ááŒá¬ážáá»ááºááŸá¬ á¡ááœááºáá±ážáááºáá±á¬ááŒá±á¬áá·áº áááºááẠáááºážááᯠá¡ááœááºááá° áá»á áºáá»á°ááŸá¯ááá¯ááºááŒá®áž áááºážááá¯áá¹áááá±áá ááŸá¯ááºááœá±ážááŸá¯ááᯠáááŒá áºáá±á«áºá á±ááá·áº á¡ááá®áá±ážááŸááºážááœáẠáá áºáá¯áá¯ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
áá±ááŸááºáááºáá¶á·áá±á¬ áá±áá¬ááááºážáááºážááŒááºážááá¯ááºáᬠáá±á«ááºážá ááºááᯠáááºá áááºáááºá á¬ážáá«áá á€á¡áá¬áá»á¬ážááẠá¡áá¯á¶ážáááºáá±á¬ áá á¹á ááºážá¡áá»áá¯á·ááŒá áºáááºá
I/O á¡áá¯á¶ážááŒá¯ááœáá·áºáááºážáááºážáá»á¬áž - á¡áááº/á¡ááœáẠááá¹ááá¬ážáá»á¬ážá á¡ááŒá±áᶠááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááá±áᬠáá áºááºááá¯á· áá±á¬ááºááŸáááŒá±á¬ááºáž áá±áá»á¬á á±áá«áááºá - á¡ááá®áá±ážááŸááºážááŸáá áºááá¯á·ááœá¬ážáá¬áááºážááŸááá±áá¬áá»á¬ážááŒá áºáá»ááºáá¯á¶á¡ááŒá±á¬ááºážáá¬ááºáááºážááá«áááºáá±á¬áááºážááœáŸááºááᯠáááºááá·áºá¡áá»áááºááœáẠá áá·áºááºáá¯ááºááá·áºááááºážá - áá»áŸá±á¬ááºáá¬ážáááá·áºá¡áá»áááºááá±ážááœááºážáá¡ááŒá±fsync()
áááºážááœáŸááºáá»á¬ážá¡ááœááºá á¡ááá¯áá»á¯ááºá¡á¬ážááŒáá·áºá ááá¯ááºá¡áá áºáá áºáá¯áááºáá®ážáá±á¬á¡áá«ááœáẠáááºááẠáááºážááá¯áá¯ááºáá±á¬ááºááẠááá¯á¡ááºááŒá±á¬ááºáž ááœááºáá±á«áºáá¬ááŒá®áž á€á¡ááŒá¶ááŒá¯áá»ááºá¡ááœáẠá¡ááŒá±á¬ááºážáááºážááŸá¬ Linux ááœáẠáá°áá®áá±á¬ááá¯ááºááᯠááá¯ážáá¬ážááŸá¯áá»á¬ážá áœá¬ááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºáLinux ááŸá SQL Server- FUA á¡ááœááºážááá¯ááºáž - á€áá±áá¬ááœáẠLinux ááááºáá±á¬ááºážáá±á«áºááŸá SQL Server ááœáẠá¡áááºáááŒááºáá±áá¬ááá¯ááŸá±á¬ááºááŸá¯ááᯠáááºáá²á·ááá¯á·áá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá±á¬áºááŒáá»ááºááŒá áºáááºá á€áá±áá¬ááœáẠWindows ááŸáá·áº Linux á áá áºáá±á«áºááá¯ááŸá¯áá»á¬ážá¡ááŒá¬áž á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ ááŸáá¯ááºážááŸááºáá»ááºá¡áá»áá¯á·ááŸááááºá XFS á FUA ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá¡ááŒá±á¬ááºáž áá±á·áá¬ááááŸááá²á·áá±á¬ á€á¡ááŒá±á¬ááºážá¡áá¬ááŒá±á¬áá·áº áá»á±ážáá°ážáááºááŒá±á¬ááºáž áá±áá»á¬áá«áááºá
áá áºáá±á«áºááœáẠáá¯á¶ááŒá¯á¶á áœá¬ááááºážáááºážáá¬ážáááºáᯠáááºáááºáá¬ážááá·áº áá±áá¬áá»á¬áž áá¯á¶ážááŸá¯á¶ážáá°ážáá«ááá¬ážá
source: www.habr.com