рдЯрд┐рдХрд╛рдК рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд░ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рд╣рд░реВ

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

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

рдЯрд┐рдХрд╛рдК рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд░ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рд╣рд░реВ

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

рд▓реЗрдЦрди () рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдкреНрд░рдгрд╛рд▓реА рдХрд▓ 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 рдЗрдиреНрдЯрд░рдлреЗрд╕ рдлреНрд░рд┐рдЬ рднрдпреЛ рдпрджрд┐ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдбрд┐рд╕реНрдХрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛред рд╕рдорд╕реНрдпрд╛ рдпреЛ рдерд┐рдпреЛ рдХрд┐ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓реЗ рдпрд╕рдХреЛ рд░рд╛рдЬреНрдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди 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 рд▓рд┐рдирдХреНрд╕ 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%) рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рджрд┐рдиреНрдЫред рдердк рд░реВрдкрдорд╛, рдХреЗрд╣реА рдбрд┐рд╕реНрдХрд╣рд░реВрдорд╛ рдЕрд░реВрд╣рд░реВ рднрдиреНрджрд╛ рдмреНрд▓рдХрдорд╛ рдврд┐рд▓реЛ рдкрд╣рд┐рд▓реЛ рдкрд╣реБрдБрдЪ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдЕрд░реНрде рд╢реВрдиреНрдпрд╕рдБрдЧ рдЦрд╛рд▓реА рдард╛рдЙрдБ рднрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг (рд▓рдЧрднрдЧ резрежреж%) рд╕реБрдзрд╛рд░ рд╣реБрди рд╕рдХреНрдЫред рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдпреЛ рдбрд┐рд╕реНрдХ рд╕рдВрдЧ рд╣реБрди рд╕рдХреНрдЫ AWS EBS (рдпреЛ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдбрд╛рдЯрд╛ рд╣реЛ, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрди рд╕рдХреЗрди)ред рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдЙрд╕реНрддреИ рдЬрд╛рдиреНрдЫ GCP рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдиреНрдЯ рдбрд┐рд╕реНрдХ (рд░ рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ, рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐)ред рдЕрдиреНрдп рд╡рд┐рдЬреНрдЮрд╣рд░реВрд▓реЗ рдкрдирд┐ рддреНрдпрд╕реНрддреИ рдЧрд░реЗрдХрд╛ рдЫрдиреН рдЕрд╡рд▓реЛрдХрди, рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╕реНрдХ рд╕рдореНрдмрдиреНрдзрд┐рддред
  2. рдХрдо рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВ, рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди (рд▓рд╛рдн рд▓рдЧрднрдЧ 5% рд╣реБрди рд╕рдХреНрдЫ)ред рдЪреБрдиреМрддреА рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ open() рдЭрдгреНрдбрд╛ рд╕рдВрдЧ O_DSYNC рд╡рд╛ рдХрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН pwritev2() рдЭрдгреНрдбрд╛ рд╕рдВрдЧ RWF_SYNC рдХрд▓ рднрдиреНрджрд╛ рдЫрд┐рдЯреЛ fdatasync()ред рдорд▓рд╛рдИ рд╢рдВрдХрд╛ рдЫ рдХрд┐ рдпрд╣рд╛рдБ рдмрд┐рдиреНрджреБ рдпреЛ рд╣реЛ рдХрд┐ рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рдПрдЙрдЯреИ рд╕рдорд╕реНрдпрд╛ (рджреБрдИрдХреЛ рд╕рдЯреНрдЯрд╛ рдПрдХ рдХрд▓) рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдХрдо рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБ рдкрд░реНрдиреЗ рддрдереНрдпрдорд╛ рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫред рддрд░ рдкреНрд░рджрд░реНрд╢рдирдорд╛ рднрд┐рдиреНрдирддрд╛ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдХреЗрд╣рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рдпрд╕рдХреЛ рддрд░реНрдХрд▓рд╛рдИ рдЬрдЯрд┐рд▓ рдмрдирд╛рдЙрдБрджреИрдиред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рджрд┐рдЧреЛ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╡рд┐рд╖рдпрдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЫрдиреН:

  • I/O рдкрд╣реБрдБрдЪ рд╡рд┐рдзрд┐рд╣рд░реВ - рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рдореЗрдХрд╛рдирд┐рдЬрдорд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рднреВрддрд╣рд░реВрдХреЛ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрдиред
  • рдбрд╛рдЯрд╛ рдбрд┐рд╕реНрдХрдорд╛ рдкреБрдЧреНрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджреИ - рдЕрдиреБрдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдбрд┐рд╕реНрдХрдорд╛ рдЬрд╛рдиреЗ рдмрд╛рдЯреЛрдорд╛ рдбреЗрдЯрд╛рдорд╛ рдХреЗ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдПрдЙрдЯрд╛ рдХрдерд╛ред
  • рддрдкрд╛рдИрдБрд▓реЗ рд╕рдорд╛рд╡реЗрд╢ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдХрд╣рд┐рд▓реЗ fsync рдЧрд░реНрдиреБрдкрд░реНрдЫ - рдХрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдкреНрд░рд╢реНрдирдХреЛ рдЬрд╡рд╛рдл fsync() рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рдпрд╕рд▓рд╛рдИ рд╕рдВрдХреНрд╖реЗрдкрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдирдпрд╛рдБ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреНрдиреЗ рдерд╛рд╣рд╛ рд╣реБрдиреНрдЫ, рд░ рдпреЛ рд╕рд┐рдлрд╛рд░рд┐рд╕рдХреЛ рдХрд╛рд░рдг рд▓рд┐рдирдХреНрд╕рдорд╛ рдПрдЙрдЯреИ рдлрд╛рдЗрд▓рдорд╛ рдзреЗрд░реИ рд╕рдиреНрджрд░реНрднрд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред
  • рд▓рд┐рдирдХреНрд╕рдорд╛ SQL рд╕рд░реНрднрд░: FUA рдЖрдиреНрддрд░рд┐рдХрд╣рд░реВ - рдпрд╣рд╛рдБ рд▓рд┐рдирдХреНрд╕ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ SQL рд╕рд░реНрднрд░рдорд╛ рдХрд╕рд░реА рдирд┐рд░рдиреНрддрд░ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рд╡рд┐рд╡рд░рдг рдЫред рдпрд╣рд╛рдБ рд╡рд┐рдиреНрдбреЛрдЬ рд░ рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВ рдмреАрдЪ рдХреЗрд╣реА рд░реЛрдЪрдХ рддреБрд▓рдирд╛рд╣рд░реВ рдЫрдиреНред рдо рд▓рдЧрднрдЧ рдкрдХреНрдХрд╛ рдЫреБ рдХрд┐ рдпреЛ рдпрд╕ рд╕рд╛рдордЧреНрд░реАрдХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж рд╣реЛ рдЬреБрди рдореИрд▓реЗ XFS рдХреЛ FUA рдЕрдиреБрдХреВрд▓рди рдмрд╛рд░реЗ рд╕рд┐рдХреЗрдВред

рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ рдбрд╛рдЯрд╛ рд╣рд░рд╛рдЙрдиреБрднрдПрдХреЛ рдЫ рдЬреБрди рддрдкрд╛рдИрдВрд▓реЗ рд╕реЛрдЪреНрдиреБрднрдПрдХреЛ рдерд┐рдпреЛ рдХрд┐ рдбрд┐рд╕реНрдХрдорд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ?

рдЯрд┐рдХрд╛рдК рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд░ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рд╣рд░реВ

рдЯрд┐рдХрд╛рдК рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд░ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ API рд╣рд░реВ

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