рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API

рдореА, рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯреАрдордордзреАрд▓ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рд╕реНрдерд┐рд░рддреЗрд╡рд░ рд╕рдВрд╢реЛрдзрди рдХрд░рдд рдЕрд╕рддрд╛рдирд╛, рдорд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рд╕рдордЬрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЭреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рдЪреЗ рдард░рд╡рд┐рд▓реЗ. рдЖрдп NVMe рд╕реНрдкреЗрдХ рд╡рд╛рдЪреВрди рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА рдбреЗрдЯрд╛ рдЯрд┐рдХреВрди рд░рд╛рд╣рдгреНрдпрд╛рдЪреА рд╣рдореА рдХрд╛рдп рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА (рдореНрд╣рдгрдЬреЗ, рд╕рд┐рд╕реНрдЯрдо рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдИрд▓ рдпрд╛рдЪреА рд╣рдореА) рдЖрдореНрд╣рд╛рд▓рд╛ NMVe рдбрд┐рд╕реНрдХ рджреНрдпрд╛. рдореА рдЦрд╛рд▓реАрд▓ рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврд▓реЗ: рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛ рджрд┐рд▓реНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рдЖрдгрд┐ рддреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдорд╛рдзреНрдпрдорд╛рдд рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдЬрд╛рдИрдкрд░реНрдпрдВрдд рддреБрдореНрд╣рд╛рд▓рд╛ рдиреБрдХрд╕рд╛рди рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдмрд░реНтАНрдпрд╛рдЪ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ, рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдХреНрддреАрдЪреА рдпрдВрддреНрд░рдгрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рддреЛ. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдпреЗрдереЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЕрд╕рд╛рд╡реЗ: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдорд╛рдВрдбрд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ write(), рдЖрдгрд┐ рдпрд╛ рдХрдорд╛рдВрдбрдЪреЗ рдСрдкрд░реЗрд╢рди рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХрд╡рд░ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдкрд░рдВрддреБ write() рдлрдХреНрдд RAM рдордзреНрдпреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд░реНрдирд▓ рдХреЕрд╢реЗрдордзреНрдпреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рддреЗ. рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдбрд┐рд╕реНрдХрд╡рд░ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрдгреНрдпрд╛рд╕рд╛рдареА, рдХрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реА рд╕рд╛рдордЧреНрд░реА рдорд╛рдЭреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ рдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯреНрд╕рдЪрд╛ рд╕рдВрдЪ рдЖрд╣реЗ. рдЬрд░ рдЖрдкрдг рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрдмрджреНрджрд▓ рдереЛрдбрдХреНрдпрд╛рдд рдмреЛрд▓рд▓реЛ рддрд░ рдЕрд╕реЗ рджрд┐рд╕реВрди рдпреЗрддреЗ рдХреА рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕рдВрдЪрдпрди рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ fdatasync() рдХрд┐рдВрд╡рд╛ рдзреНрд╡рдЬрд╛рд╕рд╣ рдлрд╛рдЗрд▓ рдЙрдШрдбрд╛ O_DSYNC. рдХреЛрдбрдкрд╛рд╕реВрди рдбрд┐рд╕реНрдХрдкрд░реНрдпрдВрддрдЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдбреЗрдЯрд╛рдЪреЗ рдХрд╛рдп рд╣реЛрддреЗ рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рдд рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рдкрд╣рд╛ рд╣реЗ рд▓реЗрдЦ.

write() рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ write() рдорд╛рдирдХ рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрдпрдИрдИрдИ рдкреЙрд╕рд┐рдХреНрд╕ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░рд╡рд░ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдореНрд╣рдгреВрди. рдХрд╛рдо рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ write() рдбреЗрдЯрд╛ рд░реАрдб рдСрдкрд░реЗрд╢рдиреНрд╕рдиреЗ рдкреВрд░реНрд╡реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдкрд░рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬрд░реА рдбреЗрдЯрд╛ рдЗрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рдВрд╡рд╛ рдереНрд░реЗрдбреНрд╕рдордзреВрди рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЬрд╛рдд рдЕрд╕рд▓рд╛ рддрд░реАрд╣реА (рдкрд╛рд╣рд╛, рдкрд╛рд╣рд╛ POSIX рдорд╛рдирдХрд╛рдЪрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЧ). рддреЛ рдЖрд╣реЗ, рд╕рд╛рдорд╛рдиреНрдп рдлрд╛рдЗрд▓ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╣ рдереНрд░реЗрдбреНрд╕рдЪреНрдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд, рдПрдХ рдЯреАрдк рдЖрд╣реЗ рдЬреА рдореНрд╣рдгрддреЗ рдХреА рдЬрд░ рдкреНрд░рддреНрдпреЗрдХ рджреЛрди рдереНрд░реЗрдбреНрд╕рдиреЗ рдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рд▓рд╛ рдХреЙрд▓ рдХреЗрд▓рд╛, рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рд▓рд╛ рдПрдХрддрд░ рдЗрддрд░ рдХреЙрд▓рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдореБрд│реЗ рд╣реЛрдгрд╛рд░реЗ рд╕рд░реНрд╡ рд╕реВрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд, рдХрд┐рдВрд╡рд╛ рдХреЛрдгрддреЗрд╣реА рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣реВ рдирдХрд╛. рд╣реЗ рдирд┐рд╖реНрдХрд░реНрд╖рд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддреЗ рдХреА рд╕рд░реНрд╡ рдлрд╛рдЗрд▓ I/O рдСрдкрд░реЗрд╢рдиреНрд╕рдордзреНрдпреЗ рдХрд╛рдо рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рд╡рд░ рд▓реЙрдХ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдСрдкрд░реЗрд╢рди write() рдЕрдгреБ рдЖрд╣реЗ? рддрд╛рдВрддреНрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рд╣реЛрдп. рдбреЗрдЯрд╛ рд░реАрдб рдСрдкрд░реЗрд╢рдиреНрд╕рдиреЗ рдЬреЗ рд▓рд┐рд╣рд┐рд▓реЗ рд╣реЛрддреЗ рддреНрдпрд╛рдкреИрдХреА рд╕рд░реНрд╡ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрд╣реА рдкрд░рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ write(). рдкрдг рдСрдкрд░реЗрд╢рди write(), рдорд╛рдирдХрд╛рдиреБрд╕рд╛рд░, рддрд┐рд▓рд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЧреЗрд▓реЗрд▓реЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд▓рд┐рд╣реВрди рдареЗрд╡рдд, рддрд┐рд▓рд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдбреЗрдЯрд╛рдЪрд╛ рдлрдХреНрдд рдХрд╛рд╣реА рднрд╛рдЧ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕рдорд╛рди рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддреНрдпрд╛рдиреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХреА 1024 рдмрд╛рдЗрдЯ рдЬреЛрдбрдгрд╛рд░реЗ рджреЛрди рдкреНрд░рд╡рд╛рд╣ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдорд╛рдирдХрд╛рдВрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рдмрд╛рдЗрдЯ рдЬреЛрдбреВ рд╢рдХрддреЗ рддреЗрд╡реНрд╣рд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЕрд╕реЗрд▓. рд╣реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдЕрдгреВ рд░рд╛рд╣рддреАрд▓, рдкрд░рдВрддреБ рддреА рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдВрдиреА рдлрд╛рдЗрд▓рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрд▓рд╛ рдЬрд╛рдИрд▓. рдпреЗрдереЗ рд╕реНрдЯреЕрдХ рдУрд╡реНрд╣рд░рдлреНрд▓реЛрд╡рд░ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдЕрддрд┐рд╢рдп рдордиреЛрд░рдВрдЬрдХ рдЪрд░реНрдЪрд╛.

fsync() рдЖрдгрд┐ fdatasync() рдлрдВрдХреНрд╢рдиреНрд╕

рдбрд┐рд╕реНрдХрд╡рд░ рдбреЗрдЯрд╛ рдлреНрд▓рд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдгреЗ fsync(). рд╣реЗ рдлрдВрдХреНрд╢рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рд╕рд░реНрд╡ рд╕реБрдзрд╛рд░рд┐рдд рдмреНрд▓реЙрдХреНрд╕ рдХреЕрд╢реЗрдордзреВрди рдбрд┐рд╕реНрдХрд╡рд░ рд╣рд▓рд╡рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрддреЗ. рдпрд╛рдордзреНрдпреЗ рдлрд╛рдЗрд▓рдЪрд╛ рд╕рд░реНрд╡ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдЕреЕрдХреНрд╕реЗрд╕ рд╡реЗрд│, рдлрд╛рдЗрд▓ рдмрджрд▓рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЗ.) рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдорд▓рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рд╣рд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреНрд╡рдЪрд┐рддрдЪ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓ рдХреА рддреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╛рд╣реА, рддрд░ рддреБрдореНрд╣реА рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ fdatasync(). рдж рдорджрдд рд╡рд░ fdatasync() рд╣реЗ рдЕрд╕реЗ рдореНрд╣рдгрддреЗ рдХреА рдпрд╛ рдлрдВрдХреНрд╢рдирдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рди рджрд░рдореНрдпрд╛рди, рдбрд┐рд╕реНрдХрд╡рд░ рдЗрддрдХрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬрддрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ "рдЦрд╛рд▓реАрд▓ рдбреЗрдЯрд╛ рд╡рд╛рдЪрди рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдпреЛрдЧреНрдп рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ." рдЖрдгрд┐ рдмрд░реНтАНрдпрд╛рдЪ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдирд╛ рдпрд╛рдЪреА рдХрд╛рд│рдЬреА рд╡рд╛рдЯрддреЗ.

рдпреЗрдереЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡реВ рд╢рдХрддреЗ рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдпрд╛ рдпрдВрддреНрд░рдгрд╛ рд╕рдВрднрд╛рд╡реНрдп рдмрд┐рдШрд╛рдбрд╛рдирдВрддрд░ рдлрд╛рдЗрд▓ рд╢реЛрдзреВ рд╢рдХрддреАрд▓ рдпрд╛рдЪреА рд╣рдореА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реАрдд. рд╡рд┐рд╢реЗрд╖рддрдГ, рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреА рдирд╡реАрди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ рддреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреНрдпрд╛рдиреЗ рдХреЙрд▓ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ fsync() рддреНрдпрд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╕рд╛рдареА. рдЕрдиреНрдпрдерд╛, рдХреНрд░реЕрд╢ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рд╣реА рдлрд╛рдИрд▓ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдпреЗрдИрд▓. рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЕрд╕реЗ рдХреА UNIX рдЕрдВрддрд░реНрдЧрдд, рд╣рд╛рд░реНрдб рд▓рд┐рдВрдХреНрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдореБрд│реЗ, рдПрдХ рдлрд╛рдИрд▓ рдПрдХрд╛рдзрд┐рдХ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕реВ рд╢рдХрддреЗ. рдореНрд╣рдгреВрди, рдХреЙрд▓ рдХрд░рддрд╛рдирд╛ fsync() рдХреЛрдгрддреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЪрд╛ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХрд╡рд░ рдлреНрд▓рд╢ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рдлрд╛рдЗрд▓рд╕рд╛рдареА рдирд╛рд╣реА (рдпреЗрдереЗ рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛). ext4 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕рдХреНрд╖рдо рдЖрд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдЖрдкреЛрдЖрдк рд╡рд╛рдкрд░рд╛ fsync() рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реНрд╕ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдордзреНрдпреЗ, рдкрд░рдВрддреБ рдЗрддрд░ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдореНрд╕рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЕрд╕реЗ рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реА.

рд╣реА рдпрдВрддреНрд░рдгрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдореА рд╡рд╛рдкрд░рд▓реЗ blktrace ext4 рдЖрдгрд┐ XFS рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдХреЛрдгрддреА рдбрд┐рд╕реНрдХ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддрд╛рдд рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА. рджреЛрдиреНрд╣реА рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЬрд░реНрдирд▓ рдпрд╛ рджреЛрдиреНрд╣реА рд╕рд╛рдордЧреНрд░реАрд╕рд╛рдареА рдбрд┐рд╕реНрдХрд╡рд░ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рд▓реЗрдЦрди рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░рддрд╛рдд, рдХреЕрд╢реЗ рдлреНрд▓рд╢ рдХрд░рддрд╛рдд рдЖрдгрд┐ FUA (рдлреЛрд░реНрд╕ рдпреБрдирд┐рдЯ рдНрдХреНрд╕реЗрд╕, рдбрд┐рд╕реНрдХрд╡рд░ рдереЗрдЯ рдбреЗрдЯрд╛ рд▓рд┐рд╣реВрди, рдХреЕрд╢реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реВрди) рдЬрд░реНрдирд▓рдордзреНрдпреЗ рд▓рд┐рд╣реВрди рдмрд╛рд╣реЗрд░ рдкрдбрд╛. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреНрдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдЪреА рдкреБрд╖реНрдЯреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреЗ рдХрджрд╛рдЪрд┐рдд рддрд╕реЗ рдХрд░рддрд╛рдд. FUA рд▓рд╛ рд╕рдкреЛрд░реНрдЯ рди рдХрд░рдгрд╛рд▒реНрдпрд╛ рдбреНрд░рд╛рдЗрд╡реНрд╣рд╡рд░, рдпрд╛рдореБрд│реЗ рджреЛрди рдХреЕрд╢реЗ рдлреНрд▓рд╢ рд╣реЛрддрд╛рдд. рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рдВрдиреА рддреЗ рджрд╛рдЦрд╡реВрди рджрд┐рд▓реЗ рдЖрд╣реЗ 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() рд╕рд┐рд╕реНрдЯреАрдордордзреАрд▓ рд╕рд░реНрд╡ "рдЧрд▓рд┐рдЪреНрдЫ" рдкреГрд╖реНрдареЗ рдбрд┐рд╕реНрдХрд╡рд░ рдлреНрд▓рд╢ рдХреЗрд▓реА, рдЖрдгрд┐ рдХреЗрд╡рд│ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдирд╕рд▓реЗрд▓реА. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрддреЛ рдХреА рдлрд╛рдпрд░рдлреЙрдХреНрд╕рдордзреАрд▓ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдиреЗ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдЪреБрдВрдмрдХреАрдп рдбрд┐рд╕реНрдХрд╡рд░ рд▓рд┐рд╣рд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЬреНрдпрд╛рд▓рд╛ рдЕрдиреЗрдХ рд╕реЗрдХрдВрдж рд▓рд╛рдЧреВ рд╢рдХрддрд╛рдд. рдорд▓рд╛ рд╕рдордЬрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рддреЛ рдордЯреЗрд░рд┐рдпрд▓, рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмреЕрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХрдордзреНрдпреЗ рд╣рд▓рд╡рд╛рдпрдЪреЗ рд╣реЛрддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдлрд╛рдпрд░рдлреЙрдХреНрд╕рдиреЗ рдЦрд░реЛрдЦрд░ рдЖрд╡рд╢реНрдпрдХрддреЗрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдХрдареЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░реНрд╕рд┐рд╕реНрдЯрдиреНрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЖрдгрд┐ ext3 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдореБрд│реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрдгрдЦреА рд╡рд╛рдврд▓реА.

рджреБрд╕рд░реА рд╕рдорд╕реНрдпрд╛ 2009 рдордзреНрдпреЗ рдЖрд▓реА. рдирдВрддрд░, рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЕрд╢ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рдирд╡реАрди ext4 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЖрдврд│рд▓реЗ рдХреА рдЕрдиреЗрдХ рдирд╡реАрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рд╢реВрдиреНрдп-рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рд╣реЛрддреНрдпрд╛, рдкрд░рдВрддреБ рдЬреБрдиреНрдпрд╛ ext3 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдЕрд╕реЗ рдШрдбрд▓реЗ рдирд╛рд╣реА. рдорд╛рдЧреАрд▓ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдд, рдореА ext3 рдиреЗ рдбрд┐рд╕реНрдХрд╡рд░ рдЦреВрдк рдЬрд╛рд╕реНрдд рдбреЗрдЯрд╛ рдХрд╕рд╛ рдЯрд╛рдХрд▓рд╛ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рд▓реЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдЧреЛрд╖реНрдЯреА рдЦреВрдк рдХрдореА рдЭрд╛рд▓реНрдпрд╛. fsync(). рдкрд░рд┐рд╕реНрдерд┐рддреА рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА, ext4 рдлрдХреНрдд рддреА "рдШрд╛рдгреЗрд░рдбреА" рдкреГрд╖реНрдареЗ рдлреНрд▓рд╢ рдХрд░рддреЗ рдЬреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдЗрд▓рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд. рдЖрдгрд┐ рдЗрддрд░ рдлрд╛рдЗрд▓реНрд╕рдЪрд╛ рдбреЗрдЯрд╛ ext3 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд│ рдореЗрдорд░реАрдордзреНрдпреЗ рд░рд╛рд╣рддреЛ. рд╣реЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓реЗ рдЧреЗрд▓реЗ (рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ 30 рд╕реЗрдХрдВрджрд╛рдВрд╕рд╛рдареА рдпрд╛ рд╕реНрдерд┐рддреАрдд рд░рд╛рд╣рддреЛ, рддреБрдореНрд╣реА рд╣реЗ рд╡рд╛рдкрд░реВрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛ dirty_expire_centisecs; рдпреЗрдереЗ рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рд╢реЛрдзреВ рд╢рдХрддрд╛). рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдХреНрд░реЕрд╢ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрдкрдгреЗ рдЧрдорд╛рд╡рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпрд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рдЙрдкрд╛рдп рд╡рд╛рдкрд░рдгреЗ рдЖрд╣реЗ fsync() рдЕтАНреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреНрдпреЗ рдЬреНрдпрд╛рдВрдирд╛ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрдгрд┐ рдЕрдкрдпрд╢рд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрдкрд╛рд╕реВрди рд╢рдХреНрдп рддрд┐рддрдХреЗ рддреНрдпрд╛рдВрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХрд╛рд░реНрдп fsync() ext4 рдкреЗрдХреНрд╖рд╛ ext3 рд╕рд╣ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рддреЛрдЯрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░, рдкреВрд░реНрд╡реАрдкреНрд░рдорд╛рдгреЗрдЪ, рдХрд╛рд╣реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрдореА рдХрд░рддреЛ, рдЬрд╕реЗ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ. рдпрд╛рдмрджреНрджрд▓ рддрдкрд╢реАрд▓ рдкрд╣рд╛ рдпреЗрдереЗ ╨╕ рдпреЗрдереЗ.

рд╕рдВрдмрдВрдзрд┐рдд рддрд┐рд╕рд░реА рд╕рдорд╕реНрдпрд╛ fsync(), 2018 рдордзреНрдпреЗ рдЙрдЧрдо рдЭрд╛рд▓рд╛. рдирдВрддрд░, PostgreSQL рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдЪреМрдХрдЯреАрдд, рд╣реЗ рдХрд╛рд░реНрдп рдЖрдврд│рд▓реЗ рдХреА рдЬрд░ fsync() рдПрдХ рддреНрд░реБрдЯреА рдЖрдврд│рддреЗ, рддреЗ "рдЧрд▓рд┐рдЪреНрдЫ" рдкреГрд╖реНрдард╛рдВрдирд╛ "рд╕реНрд╡рдЪреНрдЫ" рдореНрд╣рдгреВрди рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рддреЗ. рдкрд░рд┐рдгрд╛рдореА, рдЦрд╛рд▓реАрд▓ рдХреЙрд▓ fsync() рдЕрд╢рд╛ рдкреГрд╖реНрдард╛рдВрд╕рд╣ рдХрд╛рд╣реАрд╣реА рдХрд░реВ рдирдХрд╛. рдпрд╛рдореБрд│реЗ, рд╕реБрдзрд╛рд░рд┐рдд рдкреГрд╖реНрдареЗ рдореЗрдорд░реАрдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдбрд┐рд╕реНрдХрд╡рд░ рдХрдзреАрд╣реА рд▓рд┐рд╣рд┐рд▓реА рдЬрд╛рдд рдирд╛рд╣реАрдд. рд╣реА рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдкрддреНрддреА рдЖрд╣реЗ, рдХрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрд▓ рдХреА рдХрд╛рд╣реА рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХрд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддрд╕реЗ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рдЕрд╢рд╛ рдЕрдкрдпрд╢ fsync() рджреБрд░реНрдорд┐рд│ рдЖрд╣реЗрдд, рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╕реНрдпреЗрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрд╡рд│рдЬрд╡рд│ рдХрд╛рд╣реАрд╣реА рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдЖрдЬрдХрд╛рд▓, рдЬреЗрд╡реНрд╣рд╛ рд╣реЗ рдШрдбрддреЗ, PostgreSQL рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреНрд░реЕрд╢ рд╣реЛрддрд╛рдд. рддреЛ рдЖрд╣реЗ, "рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ fsync рдлреЗрд▓реНрдпреБрдЕрд░реНрд╕рдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рд╣реЛрдК рд╢рдХрддрд╛рдд рдХрд╛?" рдпрд╛ рд▓реЗрдЦрд╛рдд, рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪрд╛ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╢реЛрдз рдШреЗрддрд▓рд╛ рдЖрд╣реЗ. рд╕рдзреНрдпрд╛ рдпрд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЙрдкрд╛рдп рдореНрд╣рдгрдЬреЗ рдлреНрд▓реЕрдЧрд╕рд╣ рдбрд╛рдпрд░реЗрдХреНрдЯ I/O рд╡рд╛рдкрд░рдгреЗ O_SYNC рдХрд┐рдВрд╡рд╛ рдзреНрд╡рдЬрд╛рд╕рд╣ O_DSYNC. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рд╕рд╣, рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рддрд╛рдирд╛ рдЙрджреНрднрд╡реВ рд╢рдХрдгрд╛рд▒реНрдпрд╛ рддреНрд░реБрдЯреАрдВрдЪрд╛ рдЕрд╣рд╡рд╛рд▓ рджреЗрдИрд▓, рдкрд░рдВрддреБ рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕ рд╕реНрд╡рддрдГ рдмрдлрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛ рдпреЗрдереЗ ╨╕ рдпреЗрдереЗ.

O_SYNC рдЖрдгрд┐ O_DSYNC рдзреНрд╡рдЬ рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓ рдЙрдШрдбрдд рдЖрд╣реЗ

рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рдгрд╛рд▒реНрдпрд╛ рд▓рд┐рдирдХреНрд╕ рдореЗрдХреЕрдирд┐рдЭрдордЪреНрдпрд╛ рдЪрд░реНрдЪреЗрдХрдбреЗ рдкрд░рдд рдпреЗрдК. рдмрд╣реБрджрд╛, рдЖрдореНрд╣реА рдзреНрд╡рдЬрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд O_SYNC рдХрд┐рдВрд╡рд╛ рдзреНрд╡рдЬ O_DSYNC рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓реНрд╕ рдЙрдШрдбрддрд╛рдирд╛ рдЙрдШрдбрд╛(). рдпрд╛ рдкрдзреНрджрддреАрдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдирдВрддрд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ write() рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдЕрдиреБрдХреНрд░рдореЗ рдЖрджреЗрд╢ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд fsync() ╨╕ fdatasync(). рдж POSIX рддрдкрд╢реАрд▓ рдпрд╛рд▓рд╛ "рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреНрдб I/O рдлрд╛рдЗрд▓ рдЗрдВрдЯрд┐рдЧреНрд░рд┐рдЯреА рдХрдореНрдкреНрд▓реАрд╢рди" рдЖрдгрд┐ "рдбреЗрдЯрд╛ рдЗрдВрдЯрд┐рдЧреНрд░рд┐рдЯреА рдХрдореНрдкреНрд▓реАрд╢рди" рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рдореБрдЦреНрдп рдлрд╛рдпрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рджреЛрди рдирд╛рд╣реА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде тИТ write() ╨╕ fdatasync()). рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рдореБрдЦреНрдп рддреЛрдЯрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓, рдЬреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрдЪреА рд░рдЪрдирд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд.

O_DIRECT рдзреНрд╡рдЬрд╛рд╕рд╣ рдереЗрдЯ I/O рд╡рд╛рдкрд░рдгреЗ

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ open() рдзреНрд╡рдЬрд╛рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ O_DIRECT, рдЬреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЕрд╢реЗрд▓рд╛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, I/O рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдбрд┐рд╕реНрдХрд╢реА рдереЗрдЯ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ. рдпрд╛рдЪрд╛, рдмрд░реНрдпрд╛рдЪ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорджреНрд╡рд╛рд░реЗ рдЬрд╛рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓реЗрдЦрди рдЖрджреЗрд╢рд╛рдВрдЪреЗ рдбрд┐рд╕реНрдХрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдереЗрдЯ рдХрдорд╛рдВрдбрдордзреНрдпреЗ рднрд╛рд╖рд╛рдВрддрд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рдкрд░рдВрддреБ, рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реА рдпрдВрддреНрд░рдгрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рдмрджрд▓реА рдирд╛рд╣реА fsync() рдХрд┐рдВрд╡рд╛ fdatasync(). рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдбрд┐рд╕реНрдХ рд╕реНрд╡рддрдГрдЪ рдХрд░реВ рд╢рдХрддреЗ рд╡рд┐рд▓рдВрдм рдХрд┐рдВрд╡рд╛ рдХреЕрд╢реЗ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрджреЗрд╢. рдЖрдгрд┐, рдЖрдгрдЦреА рд╡рд╛рдИрдЯ, рдХрд╛рд╣реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдзреНрд╡рдЬ рд╡рд╛рдкрд░рддрд╛рдирд╛ I/O рдСрдкрд░реЗрд╢рди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд 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 рдХрд░рд╛рд╡реА - рдХрдзреА рдЕрд░реНрдЬ рдХрд░рд╛рдпрдЪрд╛ рдпрд╛ рдкреНрд░рд╢реНрдирд╛рдЪреЗ рдЙрддреНрддрд░ fsync() рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрд╕рд╛рдареА. рдереЛрдбрдХреНрдпрд╛рдд, рдирд╡реАрди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛ рд╢рд┐рдлрд╛рд░рд╕реАрдЪреЗ рдХрд╛рд░рдг рдЕрд╕реЗ рдЖрд╣реЗ рдХреА рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдПрдХрд╛рдЪ рдлрд╛рдЗрд▓рдЪреЗ рдЕрдиреЗрдХ рд╕рдВрджрд░реНрдн рдЕрд╕реВ рд╢рдХрддрд╛рдд.
  • Linux рд╡рд░ SQL рд╕рд░реНрд╡реНрд╣рд░: FUA рдЕрдВрддрд░реНрдЧрдд - рд▓рд┐рдирдХреНрд╕ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ SQL рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╕реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдпреЗрдереЗ рдЖрд╣реЗ. рдпреЗрдереЗ рд╡рд┐рдВрдбреЛрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдордзреАрд▓ рдХрд╛рд╣реА рдордиреЛрд░рдВрдЬрдХ рддреБрд▓рдирд╛ рдЖрд╣реЗрдд. рдорд▓рд╛ рдЬрд╡рд│рдЬрд╡рд│ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рдпрд╛ рд╕рд╛рдордЧреНрд░реАрдореБрд│реЗрдЪ рдорд▓рд╛ XFS рдЪреНрдпрд╛ FUA рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╛рд▓реА.

рдЖрдкрдг рдХрдзреАрд╣реА рдбрд┐рд╕реНрдХрд╡рд░ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рд▓рд╛ рдЖрд╣реЗ рдХрд╛?

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API

рд╕реНрддреНрд░реЛрдд: www.habr.com