рдореА, рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯреАрдордордзреАрд▓ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рд╕реНрдерд┐рд░рддреЗрд╡рд░ рд╕рдВрд╢реЛрдзрди рдХрд░рдд рдЕрд╕рддрд╛рдирд╛, рдорд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рд╕рдордЬрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЭреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рдЪреЗ рдард░рд╡рд┐рд▓реЗ. рдЖрдп
рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдХреНрддреАрдЪреА рдпрдВрддреНрд░рдгрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рддреЛ. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдпреЗрдереЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЕрд╕рд╛рд╡реЗ: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдорд╛рдВрдбрд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ 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()
рдбрд┐рд╕реНрдХрд╡рд░ рдХрдореА рдбреЗрдЯрд╛ рдлреНрд▓рд╢ рдХрд░рддреЗ (XFS рдордзреНрдпреЗ 4 KiB).
fsync() рд╡рд╛рдкрд░рддрд╛рдирд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреА
рдореА рд╕рдВрдмрдВрдзрд┐рдд рддреАрди рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ fsync()
рдЬреЗ рдореА рд╕рд░рд╛рд╡рд╛рдд рдЕрдиреБрднрд╡рд▓реЗ рдЖрд╣реЗ.
рдЕрд╢реА рдкрд╣рд┐рд▓реА рдШрдЯрдирд╛ 2008 рдордзреНрдпреЗ рдШрдбрд▓реА рд╣реЛрддреА. рддреНрдпрд╛ рд╡реЗрд│реА, рдлрд╛рдпрд░рдлреЙрдХреНрд╕ 3 рдЗрдВрдЯрд░рдлреЗрд╕ "рдЧреЛрдард╡рд▓реЗ" рдЬрд░ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдлрд╛рдЗрд▓реНрд╕ рдбрд┐рд╕реНрдХрд╡рд░ рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдЬрд╛рдд рдЕрд╕рддреАрд▓. рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рд╣реЛрддреА рдХреА рдЗрдВрдЯрд░рдлреЗрд╕рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдиреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА SQLite рдбреЗрдЯрд╛рдмреЗрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛. рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рдирдВрддрд░, рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ fsync()
, рдЬреНрдпрд╛рдиреЗ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬрдЪреА рдЪрд╛рдВрдЧрд▓реА рд╣рдореА рджрд┐рд▓реА. рдирдВрддрд░ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ ext3 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ, рдлрдВрдХреНрд╢рди fsync()
рд╕рд┐рд╕реНрдЯреАрдордордзреАрд▓ рд╕рд░реНрд╡ "рдЧрд▓рд┐рдЪреНрдЫ" рдкреГрд╖реНрдареЗ рдбрд┐рд╕реНрдХрд╡рд░ рдлреНрд▓рд╢ рдХреЗрд▓реА, рдЖрдгрд┐ рдХреЗрд╡рд│ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдирд╕рд▓реЗрд▓реА. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрддреЛ рдХреА рдлрд╛рдпрд░рдлреЙрдХреНрд╕рдордзреАрд▓ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдиреЗ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдЪреБрдВрдмрдХреАрдп рдбрд┐рд╕реНрдХрд╡рд░ рд▓рд┐рд╣рд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЬреНрдпрд╛рд▓рд╛ рдЕрдиреЗрдХ рд╕реЗрдХрдВрдж рд▓рд╛рдЧреВ рд╢рдХрддрд╛рдд. рдорд▓рд╛ рд╕рдордЬрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг
рджреБрд╕рд░реА рд╕рдорд╕реНрдпрд╛ 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 рдзреНрд╡рдЬ рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓ рдЙрдШрдбрдд рдЖрд╣реЗ
рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рдгрд╛рд▒реНрдпрд╛ рд▓рд┐рдирдХреНрд╕ рдореЗрдХреЕрдирд┐рдЭрдордЪреНрдпрд╛ рдЪрд░реНрдЪреЗрдХрдбреЗ рдкрд░рдд рдпреЗрдК. рдмрд╣реБрджрд╛, рдЖрдореНрд╣реА рдзреНрд╡рдЬрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд O_SYNC
рдХрд┐рдВрд╡рд╛ рдзреНрд╡рдЬ O_DSYNC
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓реНрд╕ рдЙрдШрдбрддрд╛рдирд╛ write()
рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдЕрдиреБрдХреНрд░рдореЗ рдЖрджреЗрд╢ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд fsync()
╨╕ fdatasync()
. рдж write()
╨╕ fdatasync()
). рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рдореБрдЦреНрдп рддреЛрдЯрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓, рдЬреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрдЪреА рд░рдЪрдирд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд.
O_DIRECT рдзреНрд╡рдЬрд╛рд╕рд╣ рдереЗрдЯ I/O рд╡рд╛рдкрд░рдгреЗ
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ 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() рдлрдВрдХреНрд╢рди
рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЖрд╣реЗ 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 рд╕рд░реНрд╡реНрд╣рд░: FUA рдЕрдВрддрд░реНрдЧрдд - рд▓рд┐рдирдХреНрд╕ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ SQL рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╕реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдпреЗрдереЗ рдЖрд╣реЗ. рдпреЗрдереЗ рд╡рд┐рдВрдбреЛрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдордзреАрд▓ рдХрд╛рд╣реА рдордиреЛрд░рдВрдЬрдХ рддреБрд▓рдирд╛ рдЖрд╣реЗрдд. рдорд▓рд╛ рдЬрд╡рд│рдЬрд╡рд│ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рдпрд╛ рд╕рд╛рдордЧреНрд░реАрдореБрд│реЗрдЪ рдорд▓рд╛ XFS рдЪреНрдпрд╛ FUA рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╛рд▓реА.
рдЖрдкрдг рдХрдзреАрд╣реА рдбрд┐рд╕реНрдХрд╡рд░ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рд▓рд╛ рдЖрд╣реЗ рдХрд╛?
рд╕реНрддреНрд░реЛрдд: www.habr.com