เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบปเบ™เบ—เบฒเบ™เปเบฅเบฐ APIs เป„เบŸเบฅเปŒ Linux

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบ„เบงเบฒเบกเบเบทเบ™เบเบปเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเบŸเบฑเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบปเบ”เบชเบญเบšเบ•เบปเบงเป€เบญเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™. I เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบเปเบฒเบ™เบปเบ” NVMe เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปเบšเบšเบเบทเบ™เบเบปเบ‡ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบกเบตเบขเบนเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš) เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเปเบœเปˆเบ™ NMVe. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบฐเบซเบผเบธเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบชเบเบซเบฒเบเบˆเบฒเบเป€เบงเบฅเบฒเบ—เบตเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบกเบญเบšเปƒเบซเป‰เบˆเบปเบ™เบเปˆเบงเบฒเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเบชเบทเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป‚เบ›เบผเปเบเบผเบกเบชเปˆเบงเบ™เปƒเบซเบเปˆเปƒเบŠเป‰เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เบกเบตเบ„เบงเบฒเบกเบชเบธเบ.

เปƒเบ™เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰, เบ‚เป‰เบญเบเบ„เบปเป‰เบ™เบซเบฒเบเบปเบ™เป„เบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ API เป„เบŸเบฅเปŒ Linux. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ„เบงเบ™เบˆเบฐเบ‡เปˆเบฒเบเบ”เบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰: เป‚เบ›เบผเปเบเบผเบกเป€เบญเบตเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ write(), เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบชเปเบฒเป€เบฅเบฑเบ”, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเปƒเบชเปˆเปเบœเปˆเบ™. เปเบ•เปˆ write() เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเบ”เบฅเบญเบเบ‚เปเป‰เบกเบนเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ›เบซเบฒ kernel cache เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ RAM. เป€เบžเบทเปˆเบญเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบฅเบฐเบšเบปเบšเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเปเบœเปˆเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบšเบฒเบ‡เบเบปเบ™เป„เบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบปเบ™เบ—เบฒเบ™เปเบฅเบฐ APIs เป„เบŸเบฅเปŒ Linux

เป‚เบ”เบเบฅเบงเบกเปเบฅเป‰เบง, เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เปƒเบ™เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบปเบ™เปƒเบˆ. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”, เบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปเบšเบšเบเบทเบ™เบเบปเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡. fdatasync() เบซเบผเบทเป€เบ›เบตเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบ—เบธเบ‡ O_DSYNC. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเบขเบฒเบเบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เป„เบ›เบซเบฒเปเบœเปˆเบ™, เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡ เบ™เบตเป‰ เบšเบปเบ”เบ„เบงเบฒเบก.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ write().

เป‚เบ—เบฅเบฐเบšเบปเบš write() เบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ IEEE POSIX เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบชเบปเบšโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹ write() เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบเบฑเบšเบ„เบทเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ bytes เบ—เบตเปˆเบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ™เบตเป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบผเบทเบซเบปเบงเบ‚เปเป‰เบญเบทเปˆเบ™เป† (เบˆเบปเปˆเบ‡เป€เบšเบดเปˆเบ‡, เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ POSIX). เบกเบฑเบ™เป€เบ›เบฑเบ™, เปƒเบ™เบžเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฐเบ—เบนเป‰เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบŸเบฅเปŒเบ›เบปเบเบเบฐเบ•เบด, เบกเบตเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบšเบญเบเบงเปˆเบฒเบ–เป‰เบฒเบชเบญเบ‡ threads เปเบ•เปˆเบฅเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ—เบˆเบฐเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—เบญเบทเปˆเบ™, เบซเบผเบทเบšเปเปˆเบกเบตเป€เบฅเบตเบ. เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™. เบ™เบตเป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเบงเปˆเบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ I/O เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เบฅเบฑเบญเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ write() เบกเบฑเบ™เปเบกเปˆเบ™เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน? เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™, เปเบกเปˆเบ™เปเบฅเป‰เบง. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบฑเบ‡ เปเบปเบ” เบซเบผเบทเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เบ”เป‰เบงเบ write(). เปเบ•เปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ write(), เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฝเบ™เบฅเบปเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ‚เปเปƒเบซเป‰เบ‚เบฝเบ™เบฅเบปเบ‡. เบ™เบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เบฝเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบชเบญเบ‡เบเบฐเบ—เบนเป‰เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ•เปเปˆเบ—เป‰เบฒเบ 1024 bytes เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป‚เบ”เบเบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™. เบˆเบฒเบเบกเบธเบกเป€เบšเบดเปˆเบ‡เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ byte เบเบฑเบšเป„เบŸเบฅเปŒ. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบชเปเบฒเป€เบฅเบฑเบ”, เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบเบ›เบฐเบชเบปเบก. เบ—เบตเปˆเบ™เบตเป‰ เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰เบเปˆเบฝเบงเบเบฑเบš Stack Overflow.

fsync() เปเบฅเบฐ fdatasync() เบŸเบฑเบ‡เบŠเบฑเบ™

เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เป€เบžเบทเปˆเบญ flush เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเบฑเบšโ€‹เปเบœเปˆเบ™โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹เบซเบฒโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹ fsync(). เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบ‚เปเปƒเบซเป‰เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบญเบ™เบšเบฅเบฑเบญเบเบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเปเบ„เบ”เป„เบ›เบซเบฒเปเบœเปˆเบ™. เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบต metadata เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ” (เป€เบงเบฅเบฒเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡, เป€เบงเบฅเบฒเบ”เบฑเบ”เปเบเป‰เป„เบŸเบฅเปŒ, เปเบฅเบฐเบญเบทเปˆเบ™เป†). เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบงเปˆเบฒ metadata เบ™เบตเป‰เบšเปเปˆเบ„เปˆเบญเบเบˆเปเบฒเป€เบ›เบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆ fdatasync(). เบเบฒเบ™ เบŠเปˆเบงเบเป€เบซเบผเบทเบญ on the fdatasync() เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเบงเปˆเบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ™เบตเป‰, เบˆเปเบฒเบ™เบงเบ™ metadata เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เปเบœเปˆเบ™เบ—เบตเปˆ "เบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰." เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเบปเบ™เปƒเบˆ.

เบšเบฑเบ™เบซเบฒเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบเบปเบ™เป„เบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบšเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเปƒเบซเบกเปˆ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป‚เบ—เบซเบฒ fsync() เบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบกเบฑเบ™. เบ–เป‰เบฒโ€‹เบšเปเปˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ„เบงเบฒเบกโ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹, เบกเบฑเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เบกเบตโ€‹. เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ UNIX, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฒเบ, เป„เบŸเบฅเปŒเบชเบฒเบกเบฒเบ”เบกเบตเบขเบนเปˆเปƒเบ™เบซเบผเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป‚เบ—เบซเบฒ fsync() เบšเปเปˆเบกเบตเบ—เบฒเบ‡เบ—เบตเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปƒเบ”เบ„เบงเบ™เบˆเบฐเบ–เบทเบ flushed เป„เบ›เปƒเบชเปˆเปเบœเปˆเบ™ (เบ—เบตเปˆเบ™เบตเป‰ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰). เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext4 เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ” เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ fsync() เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™, เปเบ•เปˆเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบญเบทเปˆเบ™เป†.

เบเบปเบ™เป„เบเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ‚เป‰เบญเบโ€‹เปƒเบŠเป‰ blktrace เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เปเบœเปˆเบ™เปƒเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext4 เปเบฅเบฐ XFS. เบ—เบฑเบ‡เบชเบญเบ‡เบญเบญเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบฝเบ™เบ›เบปเบเบเบฐเบ•เบดเปƒเบชเปˆเปเบœเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเปเบฅเบฐเบงเบฒเบฅเบฐเบชเบฒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ, flush cache, เปเบฅเบฐเบญเบญเบเป‚เบ”เบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” FUA (Force Unit Access, เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบชเปˆเปเบœเปˆเบ™, bypassing the cache) เบ‚เบฝเบ™เปƒเบชเปˆเบงเบฒเบฅเบฐเบชเบฒเบ™. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰เป€เบžเบทเปˆเบญเบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เปƒเบ™เป„เบ”เบฃเบŸเปŒเบ—เบตเปˆเบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบš FUA, เบญเบฑเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบฅเป‰เบฒเบ‡เปเบ„เบ”เบชเบญเบ‡เบญเบฑเบ™. เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ fdatasync() เป„เบงเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ fsync(). เบ›เบฐเป‚เบซเบเบ” blktrace เบŠเบตเป‰โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹ fdatasync() เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเบˆเบฐเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปœเป‰เบญเบเบฅเบปเบ‡เปƒเบชเปˆเปเบœเปˆเบ™ (เปƒเบ™ ext4 fsync() เบ‚เบฝเบ™ 20 KiB, เปเบฅเบฐ fdatasync() - 16 เบเบดเบš). เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบงเปˆเบฒ XFS เปเบกเปˆเบ™เป„เบงเบเบงเปˆเบฒ ext4 เป€เบฅเบฑเบเบ™เป‰เบญเบ. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ”เป‰เบงเบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญ blktrace เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบงเปˆเบฒ fdatasync() เบฅเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปœเป‰เบญเบเบฅเบปเบ‡เปƒเบชเปˆเปเบœเปˆเบ™ (4 KiB เปƒเบ™ XFS).

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰ fsync()

เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป€เบ–เบดเบ‡เบชเบฒเบกเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเปˆเบฝเบงเบเบฑเบš fsync()เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เบ—เบตเปˆโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เบ›เบต 2008โ€‹. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Firefox 3 froze เบ–เป‰เบฒเป„เบŸเบฅเปŒเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป„เบ”เป‰เบ™เปเบฒเปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ SQLite เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ fsync(), เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบเบฒเบ™เบ„เปเป‰เบฒเบ›เบฐเบเบฑเบ™เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡. เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext3 เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบซเบ™เป‰เบฒเบ—เบตเปˆ fsync() เบ–เบดเป‰เบกเบซเบ™เป‰เบฒ "เป€เบ›เบทเป‰เบญเบ™" เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบฅเบฐเบšเบปเบšเปƒเบชเปˆเปเบœเปˆเบ™, เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเปƒเบ™ Firefox เบชเบฒเบกเบฒเบ”เบเบฐเบ•เบธเป‰เบ™เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™ megabytes เบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™เปเบกเปˆเป€เบซเบผเบฑเบ, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบงเบดเบ™เบฒเบ—เบต. เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ, เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบˆเบฒเบ เบกเบฑเบ™ เบงเบฑเบ”เบชเบฐเบ”เบธเปเบกเปˆเบ™เบเบฒเบ™เป‚เบญเบ™เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒเบงเบฝเบเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบเบปเบ‡เบเบฑเบ™. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ Firefox เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเบงเปˆเบฒเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext3 เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบฎเป‰เบฒเบเปเบฎเบ‡เบ‚เบถเป‰เบ™.

เบšเบฑเบ™เบซเบฒเบ—เบตเบชเบญเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ›เบต 2009. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบฅเบฐเบšเบปเบšเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡, เบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext4 เปƒเบซเบกเปˆเป„เบ”เป‰เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบซเบกเปˆเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบกเบตเบ„เบงเบฒเบกเบเบฒเบงเบชเบนเบ™, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ext3 เป€เบเบปเปˆเบฒ. เปƒเบ™เบงเบฑเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ ext3 flushed เบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบชเปˆเปเบœเปˆเบ™, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เบŠเป‰เบฒเบฅเบปเบ‡เบซเบผเบฒเบ. fsync(). เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เปƒเบ™ ext4 เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบทเป‰เบญเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบŸเบฅเปŒเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™ flushed เบเบฑเบšเปเบœเปˆเบ™. เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป„เบŸเบฅเปŒเบญเบทเปˆเบ™เป†เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒเบเบฑเบš ext3. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” (เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ™เบตเป‰เป€เบ›เบฑเบ™เป€เบงเบฅเบฒ 30 เบงเบดเบ™เบฒเบ—เบต, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ„เปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ dirty_expire_centisecs; เบ—เบตเปˆเบ™เบตเป‰ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป€เบญเบเบฐเบชเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰). เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เบชเบนเบ™เป€เบชเบ irretrievably เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบง. เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ fsync() เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เปเบฅเบฐเบ›เบปเบเบ›เป‰เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบˆเบฒเบเบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบง. เบŸเบฑเบ‡เบŠเบฑเบ™ fsync() เป€เบฎเบฑเบ”เบงเบฝเบเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเป€เบกเบทเปˆเบญเปƒเบŠเป‰ ext4 เบเปˆเบงเบฒเป€เบกเบทเปˆเบญเปƒเบŠเป‰ ext3. เบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบเปˆเบญเบ™, เบŠเป‰เบฒเบฅเบปเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™. เป€เบšเบดเปˆเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰ ะธ เบ—เบตเปˆเบ™เบตเป‰.

เบšเบฑเบ™เบซเบฒเบ—เบตเบชเบฒเบกเบเปˆเบฝเบงเบเบฑเบš fsync(), เบกเบตโ€‹เบ•เบปเป‰เบ™โ€‹เบเปเบฒโ€‹เป€เบ™เบตเบ”โ€‹เปƒเบ™โ€‹เบ›เบต 2018โ€‹. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบฒเบเปƒเบ™เบเบญเบšเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ PostgreSQL, เบกเบฑเบ™เบžเบปเบšเป€เบซเบฑเบ™เบงเปˆเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ fsync() เบžเบปเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เบกเบฑเบ™เบซเบกเบฒเบเบซเบ™เป‰เบฒ "เป€เบ›เบทเป‰เบญเบ™" เป€เบ›เบฑเบ™ "เบชเบฐเบญเบฒเบ”". เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป‚เบ—เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰ fsync() เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบเบฑเบšเปœเป‰เบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฑเบ”เปเบเป‰เป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบฅเบฐเบšเปเปˆเป€เบ„เบตเบเบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เปเบœเปˆเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป„เบžเบžเบดเบšเบฑเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบ„เบดเบ”เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เปเบœเปˆเบ™, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™. เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง fsync() เปเบกเปˆเบ™เบซเบฒเบเบฒเบ, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป€เบเบทเบญเบšเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบˆเบฐเบ•เปเปˆเบชเบนเป‰เบเบฑเบšเบšเบฑเบ™เบซเบฒ. เบ—เบธเบเบกเบทเป‰เบ™เบตเป‰, เป€เบกเบทเปˆเบญเป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™, PostgreSQL เปเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบญเบทเปˆเบ™เป†เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เบกเบฑเบ™เป€เบ›เบฑเบ™, เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ "เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฒเบกเบฒเบ”เบŸเบทเป‰เบ™เบ•เบปเบงเบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡ fsync เป„เบ”เป‰เบšเป?", เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบซเบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ•เปเปˆเบเบฑเบšเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ Direct I/O เบเบฑเบšเบ—เบธเบ‡ O_SYNC เบซเบผเบทเบ”เป‰เบงเบเบ—เบธเบ‡ O_DSYNC. เบ”เป‰เบงเบเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰, เบฅเบฐเบšเบปเบšเบˆเบฐเบฅเบฒเบเบ‡เบฒเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเป€เบžเบฒเบฐ, เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡ buffers เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰ ะธ เบ—เบตเปˆเบ™เบตเป‰.

เบเบฒเบ™เป€เบ›เบตเบ”เป„เบŸเบฅเปŒเป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ O_SYNC เปเบฅเบฐ O_DSYNC

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบเบปเบ™เป„เบ Linux เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡. เบ„เบท, เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปƒเบŠเป‰เบ—เบธเบ‡เบŠเบฒเบ” O_SYNC เบซเบผเบทเบ—เบธเบ‡ O_DSYNC เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เป„เบŸเบฅเปŒเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš เป€เบ›เบตเบ”(). เบ”เป‰เบงเบเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰, เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบทเบเบฑเบšเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡ write() เบฅเบฐเบšเบปเบšเปเบกเปˆเบ™เปƒเบซเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก fsync() ะธ fdatasync(). เบเบฒเบ™ เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเป€เบžเบฒเบฐเบ‚เบญเบ‡ POSIX เบญเบฑเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบเบฒเบ™เบชเบณเป€เบฅเบฑเบ”เบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ synchronized I/O" เปเบฅเบฐ "เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™". เบ›เบฐเป‚เบซเบเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบšเบ”เบฝเบง, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบชเบญเบ‡ (เบ•เบปเบงเบขเปˆเบฒเบ‡ -. write() ะธ fdatasync()). เบ‚เปเป‰เป€เบชเบเบซเบผเบฑเบเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ‚เบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบˆเบฐเบ–เบทเบ synchronized, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบˆเปเบฒเบเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เปƒเบŠเป‰ Direct I/O เบเบฑเบšเบ—เบธเบ‡ O_DIRECT

เป‚เบ—เบฅเบฐเบšเบปเบš open() เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบธเบ‡ O_DIRECT, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบญเบญเบเปเบšเบšเป€เบžเบทเปˆเบญเบ‚เป‰เบฒเบกเปเบ„เบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ I/O เป‚เบ”เบเบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเบžเบปเบงเบžเบฑเบ™เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเปเบœเปˆเบ™. เบ™เบตเป‰, เปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบต, เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ‚เบฝเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบญเบญเบเป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบ–เบทเบเปเบ›เป‚เบ”เบเบเบปเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปเบœเปˆเบ™. เปเบ•เปˆเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบปเบ™เป„เบเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ fsync() เบซเบผเบท fdatasync(). เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเปเบœเปˆเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เป€เบฅเบทเปˆเบญเบ™ เบซเบผเบท cache เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เปเบฅเบฐ, เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบšเบฑเบ™เบซเบฒเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ, เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”, เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ I/O เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เบ—เบธเบ‡ O_DIRECT, เบญเบญเบเบญเบฒเบเบฒเบ” เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก. เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰เบ—เบธเบ‡เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ O_DSYNC, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒ fdatasync().

เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ XFS เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เป„เบ”เป‰เป€เบžเบตเปˆเบก "เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบง" เบชเปเบฒเบฅเบฑเบš O_DIRECT|O_DSYNC- เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹. เบ–เป‰เบฒเบšเบฅเบฑเบญเบเบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เป‚เบ”เบเปƒเบŠเป‰ O_DIRECT|O_DSYNC, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ XFS, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ flushing cache, เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบฝเบ™ FUA เบ–เป‰เบฒเบญเบธเบ›เบฐเบเบญเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบกเบฑเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเบงเบ”เบชเบญเบšเบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ” blktrace เปƒเบ™เบฅเบฐเบšเบปเบš Linux 5.4/Ubuntu 20.04. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰, เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบ™เป‰เบญเบเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™เบ”เบดเบ”เปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบชเบญเบ‡ (เบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบฅเป‰เบฒเบ‡เปเบ„เบ”). เบ‚เป‰เบญเบเบžเบปเบšเบฅเบดเป‰เบ‡เบซเบฒ patch 2018 kernel, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบ™เบตเป‰. เบกเบตเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ™เบตเป‰เบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบญเบทเปˆเบ™เป†, เปเบ•เปˆเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเบฎเบนเป‰, XFS เปเบกเปˆเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ”เบฝเบงเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ™เบตเป‰เบˆเบปเบ™เป€เบ–เบดเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™.

เบŸเบฑเบ‡เบŠเบฑเบ™ sync_file_range()

Linux เบกเบตเบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบš sync_file_range(), เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเป‰เบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเป„เบ›เบซเบฒเปเบœเปˆเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบฒเบ™เป‚เบ—เบ™เบตเป‰เป€เบฅเบตเปˆเบกเบเบฒเบ™ flush เบ‚เปเป‰เบกเบนเบ™ asynchronous เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบกเบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เปเบ•เปˆเบขเบนเปˆเปƒเบ™เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™ sync_file_range() เบ—เบตเบกเบ‡เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเบงเปˆเบฒ "เป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบซเบผเบฒเบ". เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰เบกเบฑเบ™. เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เปเบฅเบฐเบญเบฑเบ™เบ•เบฐเบฅเบฒเบ sync_file_range() เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เบ”เบตเบซเบผเบฒเบเปƒเบ™ เบ™เบตเป‰ เบงเบฑเบ”เบชเบฐเบ”เบธ. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบเบฒเบ™เป‚เบ—เบ™เบตเป‰เบ›เบฒเบเบปเบ”เบงเปˆเบฒเปƒเบŠเป‰ RocksDB เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเป€เบงเบฅเบฒเบ—เบตเปˆ kernel เบฅเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบทเป‰เบญเบ™เป„เบ›เบซเบฒเปเบœเปˆเบ™. เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ 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%). เบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ•เปเปˆเบเบฑเบš metadata เบ‚เบญเบ‡เป„เบŸเบฅเปŒ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš fallocate(), เปเบ•เปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”, เป‚เบ—เบซเบฒ fallocate() เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบชเบฑเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเปˆเบงเบ‡เปœเป‰เบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบŠเปˆเบญเบ‡เบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบชเบนเบ™เปเบฅเบฐเป€เบญเบตเป‰เบ™เบงเปˆเบฒ fsync(). เบ™เบตเป‰เบˆเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ•เบฑเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ–เบทเบเบซเบกเบฒเบเป€เบ›เบฑเบ™ "เบˆเบฑเบ”เบชเบฑเบ™" เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ "เบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบชเบฑเบ™". เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ (เบ›เบฐเบกเบฒเบ™ 2%). เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบšเบฒเบ‡เปเบœเปˆเบ™เบญเบฒเบ”เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบšเบฅเบฑเบญเบเบ—เปเบฒเบญเบดเบ”เบŠเป‰เบฒเบเบงเปˆเบฒเปเบœเปˆเบ™เบญเบทเปˆเบ™. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ•เบทเปˆเบกเบŠเปˆเบญเบ‡เปƒเบชเปˆเบเบฑเบšเบชเบนเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ (เบ›เบฐเบกเบฒเบ™ 100%). เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเปเบœเปˆเบ™ AWS EBS (เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบขเบทเบ™เบขเบฑเบ™เป„เบ”เป‰). เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ GCP Persistent Disk (เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เปเบฅเป‰เบง, เบขเบทเบ™เบขเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš). เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบญเบทเปˆเบ™เป†เป„เบ”เป‰เป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™ เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™, เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเปเบœเปˆเบ™เบ•เปˆเบฒเบ‡เป†.
  2. เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบซเบ™เป‰เบญเบ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™ (เบเบฒเบ™เป€เบžเบตเปˆเบกเบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบฒเบ™ 5%). เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบ open() เบเบฑเบšเบ—เบธเบ‡ O_DSYNC เบซเบผเบทเป‚เบ—เบซเบฒ pwritev2() เบเบฑเบšเบ—เบธเบ‡ RWF_SYNC เป„เบงเบเบงเปˆเบฒเบเบฒเบ™เป‚เบ— fdatasync(). เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบปเบ‡เปƒเบชเบงเปˆเบฒเบˆเบธเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเบšเบปเบ”เบšเบฒเบ”เปƒเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบšเบซเบ™เป‰เบญเบเบ•เป‰เบญเบ‡เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™ (เบซเบ™เบถเปˆเบ‡เป‚เบ—เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเบญเบ‡). เปเบ•เปˆเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบ™เป‰เบญเบเบซเบผเบฒเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเปเปˆเบชเบปเบ™เปƒเบˆเบกเบฑเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบˆเบฐเบšเปเปˆเบชเบฑเบšเบชเบปเบ™เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบกเบฑเบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปเบšเบšเบเบทเบ™เบเบปเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”:

  • เบงเบดเบ—เบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ I/O โ€” เบžเบฒเบšโ€‹เบฅเบงเบกโ€‹เบ‚เบญเบ‡โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบปเบ™โ€‹เป„เบโ€‹เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ / เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹.
  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ–เบดเบ‡เปเบœเปˆเบ™ โ€” เป€เบฅเบทเปˆเบญเบ‡โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เบเบฑเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบˆเบฒเบโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบเบฑเบšโ€‹เปเบœเปˆเบ™โ€‹เป„เบ”เป‰โ€‹.
  • เป€เบกเบทเปˆเบญเปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™ fsync เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบšเบฑเบ™เบˆเบธ - เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ fsync() เบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบšเบกเบฑเบ™, เบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเปƒเบซเบกเปˆ, เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™ Linux เบชเบฒเบกเบฒเบ”เบกเบตเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบซเบผเบฒเบเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™.
  • SQL Server เปƒเบ™ Linux: FUA Internals โ€” เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ„เบปเบ‡เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™ SQL Server เปƒเบ™เป€เบงเบ—เบต Linux. เบกเบตเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš Windows เปเบฅเบฐ Linux เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบ‚เป‰เบญเบเป€เบเบทเบญเบšเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เบเป‰เบญเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš FUA เบ‚เบญเบ‡ XFS.

เบ—เปˆเบฒเบ™เป„เบ”เป‰เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเบขเบนเปˆเปƒเบ™เปเบœเปˆเบ™เบšเป?

เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบปเบ™เบ—เบฒเบ™เปเบฅเบฐ APIs เป„เบŸเบฅเปŒ Linux

เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบปเบ™เบ—เบฒเบ™เปเบฅเบฐ APIs เป„เบŸเบฅเปŒ Linux

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com