рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ Linux рдлрд╝рд╛рдЗрд▓ APIs

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

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

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ Linux рдлрд╝рд╛рдЗрд▓ APIs

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдореЗрд░реА рд░реБрдЪрд┐ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрджрд┐ рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ 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 рдореЗрдВ рд╣реБрдЖ рдерд╛. рдпрджрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦреА рдЧрдИрдВ рддреЛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 3 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛ рдЧрдпрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ fsync(), рдЬрд┐рд╕рдиреЗ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреА рдЕрдЪреНрдЫреА рдЧрд╛рд░рдВрдЯреА рджреАред рддрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП ext3 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди fsync() рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА "рдЧрдВрджреЗ" рдкреЗрдЬреЛрдВ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдбрдВрдк рдХрд░ рджрд┐рдпрд╛, рди рдХрд┐ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдерд╛ рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдЪреБрдВрдмрдХреАрдп рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╕реЗрдХрдВрдб рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЗрд╕ рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдиреЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрдареЛрд░ рднрдВрдбрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ ext3 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдерд╛ред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ 2009 рдореЗрдВ рд╣реБрдИ. рдлрд┐рд░, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реИрд╢ рдХреЗ рдмрд╛рдж, рдирдП ext4 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдХрдИ рдирдИ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рд╢реВрдиреНрдп рдереА, рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ ext3 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖред рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА рдХрд┐ рдХреИрд╕реЗ ext3 рдиреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдзреАрдореА рд╣реЛ рдЧрдИрдВред fsync(). рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП, ext4 рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдЧрдВрджреЗ рдкреГрд╖реНрда рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ, рдбрд┐рд╕реНрдХ рдкрд░ рдлреНрд▓рд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдбреЗрдЯрд╛ ext3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдореЗрдореЛрд░реА рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛ 30 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЧрдВрджрд╛_рд╕рдорд╛рдкреНрдд_рд╕реЗрдВрдЯреАрд╕реЗрдХ; рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рдЦреЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ 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(). рдореЗрдВ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЗрд╕реЗ "рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб 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 рдХрд░реНрдиреЗрд▓, рдЬреЛ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдиреНрдп рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдПрдХреНрд╕рдПрдлрдПрд╕ рдПрдХрдорд╛рддреНрд░ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ рдЕрдм рддрдХ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

sync_file_range() рдлрд╝рдВрдХреНрд╢рди

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

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

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

рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд╣ рдбреЗрдЯрд╛ рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рд╡рд╣ рдбрд┐рд╕реНрдХ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ?

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ Linux рдлрд╝рд╛рдЗрд▓ APIs

рдЯрд┐рдХрд╛рдК рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ Linux рдлрд╝рд╛рдЗрд▓ APIs

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