рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рд╢реЛрдз рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдореИрдВ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдВред рдореИрдВ
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рдЧрд╛рддрд╛рд░ рднрдВрдбрд╛рд░рдг рддрдВрддреНрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ write()
, рдФрд░ рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди write()
рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ RAM рдореЗрдВ рд╕реНрдерд┐рдд рдХрд░реНрдиреЗрд▓ рдХреИрд╢ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдореЗрд░реА рд░реБрдЪрд┐ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрджрд┐ рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ fdatasync()
рдпрд╛ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЗрдВ рдЦреЛрд▓реЗрдВ O_DSYNC
. рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рд╕реЗ рдбрд┐рд╕реНрдХ рддрдХ рдЬрд╛рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
рд░рд╛рдЗрдЯ() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ 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() рдлрд╝рдВрдХреНрд╢рди
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%) рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИрдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрдмреАрдПрд╕ (рдпрд╣ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдбреЗрдЯрд╛ рд╣реИ, рдореИрдВ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛)ред рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рдмрд╛рдд рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдЬреАрд╕реАрдкреА рдкрд░рд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдбрд┐рд╕реНрдХ (рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ)ред рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдиреЗ рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд╣реИрдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ , рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╕реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рддред - рдЬрд┐рддрдиреА рдХрдо рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реЗрдВ рд╣реЛрдВрдЧреА, рдкреНрд░рджрд░реНрд╢рди рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ (рд▓рд╛рдн рд▓рдЧрднрдЧ 5% рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдПрдХ рдЪреБрдиреМрддреА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ
open()
рдПрдХ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рдеO_DSYNC
рдЕрдерд╡рд╛ рдлреЛрди рдХрд░реЗрдВpwritev2()
рдПрдХ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рдеRWF_SYNC
рдПрдХ рдХреЙрд▓ рд╕реЗ рднреА рддреЗрдЬрд╝fdatasync()
. рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рддрдереНрдп рдореЗрдВ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ (рджреЛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреЙрд▓)ред рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рддрд░реНрдХ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░рд┐рдпрд╛рдВ рджреА рдЧрдИ рд╣реИрдВ:
I/O рдкрд╣реБрдБрдЪ рд╡рд┐рдзрд┐рдпрд╛рдБ - рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рддрдВрддреНрд░ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрдиредрдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХ рддрдХ рдкрд╣реБрдВрдЪреЗ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбрд┐рд╕реНрдХ рддрдХ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреАредрдЖрдкрдХреЛ рдпреБрдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдХрдм fsync рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░fsync()
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП. рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣реЗрдВ рддреЛ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрдИ рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВредрд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░: рдПрдлрдпреВрдП рдЗрдВрдЯрд░рдирд▓реНрд╕ - рдпрд╣рд╛рдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ SQL рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рддреБрд▓рдирд╛рдПрдВ рд╣реИрдВред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреА рдмрджреМрд▓рдд рд╣реА рдореИрдВрдиреЗ рдПрдХреНрд╕рдПрдлрдПрд╕ рдХреЗ рдПрдлрдпреВрдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд╣ рдбреЗрдЯрд╛ рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рд╡рд╣ рдбрд┐рд╕реНрдХ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ?
рд╕реНрд░реЛрдд: www.habr.com