ืžืžืฉืงื™ API ืขืžื™ื“ื™ื ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ื•ืงื‘ืฆื™ Linux

ืื ื™, ื—ื•ืงืจ ืืช ื”ื™ืฆื™ื‘ื•ืช ืฉืœ ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื‘ืžืขืจื›ื•ืช ืขื ืŸ, ื”ื—ืœื˜ืชื™ ืœื‘ื“ื•ืง ืืช ืขืฆืžื™, ื›ื“ื™ ืœื•ื•ื“ื ืฉืื ื™ ืžื‘ื™ืŸ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืกื™ืกื™ื™ื. ืื ื™ ื”ืชื—ื™ืœ ื‘ืงืจื™ืืช ืžืคืจื˜ NVMe ืขืœ ืžื ืช ืœื”ื‘ื™ืŸ ืื™ืœื• ืขืจื‘ื•ื™ื•ืช ืœื’ื‘ื™ ื”ืชืžื“ื” ืฉืœ ื ืชื•ื ื™ื (ื›ืœื•ืžืจ, ืขืจื‘ื•ื™ื•ืช ืฉื”ื ืชื•ื ื™ื ื™ื”ื™ื• ื–ืžื™ื ื™ื ืœืื—ืจ ื›ืฉืœ ื‘ืžืขืจื›ืช) ืชืŸ ืœื ื• ื“ื™ืกืงื™ NMVe. ื”ืกืงืชื™ ืืช ื”ืžืกืงื ื•ืช ื”ืขื™ืงืจื™ื•ืช ื”ื‘ืื•ืช: ืืชื” ืฆืจื™ืš ืœืฉืงื•ืœ ืืช ื”ื ืชื•ื ื™ื ืฉื ืคื’ืขื• ืžืจื’ืข ืžืชืŸ ืคืงื•ื“ืช ื›ืชื™ื‘ืช ื”ื ืชื•ื ื™ื ื•ืขื“ ืœืจื’ืข ื›ืชื™ื‘ืชื ืœืืžืฆืขื™ ื”ืื—ืกื•ืŸ. ืขื ื–ืืช, ื‘ืจื•ื‘ ื”ืชื•ื›ื ื™ื•ืช, ืงืจื™ืื•ืช ืžืขืจื›ืช ืžืฉืžืฉื•ืช ื‘ืฆื•ืจื” ื‘ื˜ื•ื—ื” ืœืžื“ื™ ืœื›ืชื™ื‘ืช ื ืชื•ื ื™ื.

ื‘ืžืืžืจ ื–ื”, ืื ื™ ื—ื•ืงืจ ืืช ืžื ื’ื ื•ื ื™ ื”ื”ืชืžื“ื” ื”ืžืกื•ืคืงื™ื ืขืœ ื™ื“ื™ ืžืžืฉืงื™ API ืฉืœ ืงื‘ืฆื™ ืœื™ื ื•ืงืก. ื ืจืื” ืฉื”ื›ืœ ืฆืจื™ืš ืœื”ื™ื•ืช ืคืฉื•ื˜ ื›ืืŸ: ื”ืชื•ื›ื ื™ืช ืงื•ืจืืช ืœืคืงื•ื“ื” write(), ื•ืœืื—ืจ ื”ืฉืœืžืช ืคืขื•ืœืช ื”ืคืงื•ื“ื” ื”ื–ื•, ื”ื ืชื•ื ื™ื ื™ืื•ื—ืกื ื• ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ื‘ื“ื™ืกืง. ืื‘ืœ write() ืžืขืชื™ืง ืจืง ื ืชื•ื ื™ ื™ื™ืฉื•ื ืœืžื˜ืžื•ืŸ ื”ืœื™ื‘ื” ืฉื ืžืฆื ื‘-RAM. ืขืœ ืžื ืช ืœืืœืฅ ืืช ื”ืžืขืจื›ืช ืœื›ืชื•ื‘ ื ืชื•ื ื™ื ืœื“ื™ืกืง, ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ื›ืžื” ืžื ื’ื ื•ื ื™ื ื ื•ืกืคื™ื.

ืžืžืฉืงื™ API ืขืžื™ื“ื™ื ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ื•ืงื‘ืฆื™ Linux

ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื—ื•ืžืจ ื”ื–ื” ื”ื•ื ืื•ืกืฃ ืฉืœ ื”ืขืจื•ืช ื”ืžืชื™ื™ื—ืกื•ืช ืœืžื” ืฉืœืžื“ืชื™ ื‘ื ื•ืฉื ืฉืžืขื ื™ื™ืŸ ืื•ืชื™. ืื ื ื“ื‘ืจ ื‘ืงืฆืจื” ืขืœ ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ, ืžืชื‘ืจืจ ืฉื›ื“ื™ ืœืืจื’ืŸ ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื‘ืจ-ืงื™ื™ืžื, ืืชื” ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” fdatasync() ืื• ืœืคืชื•ื— ืงื‘ืฆื™ื ืขื ื“ื’ืœ O_DSYNC. ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ืžื” ืฉืงื•ืจื” ืœื ืชื•ื ื™ื ื‘ื“ืจืš ืžืงื•ื“ ืœื“ื™ืกืง, ืชืกืชื›ืœ ืขืœ ื–ื” ืžืืžืจ.

ืชื›ื•ื ื•ืช ืฉืœ ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื” write().

ืฉื™ื—ืช ืžืขืจื›ืช write() ืžื•ื’ื“ืจ ื‘ืชืงืŸ IEEE POSIX ื›ื ื™ืกื™ื•ืŸ ืœื›ืชื•ื‘ ื ืชื•ื ื™ื ืœืชื™ืื•ืจ ืงื•ื‘ืฅ. ืœืื—ืจ ืกื™ื•ื ืขื‘ื•ื“ื” ืžื•ืฆืœื— write() ืคืขื•ืœื•ืช ืงืจื™ืืช ื ืชื•ื ื™ื ื—ื™ื™ื‘ื•ืช ืœื”ื—ื–ื™ืจ ื‘ื“ื™ื•ืง ืืช ื”ื‘ืชื™ื ืฉื ื›ืชื‘ื• ืงื•ื“ื ืœื›ืŸ, ืœืขืฉื•ืช ื–ืืช ื’ื ืื ื”ื’ื™ืฉื” ืœื ืชื•ื ื™ื ืžืชื‘ืฆืขืช ืžืชื”ืœื™ื›ื™ื ืื• ืฉืจืฉื•ืจื™ื ืื—ืจื™ื (ื›ืืŸ ื”ืกืขื™ืฃ ื”ืžืงื‘ื™ืœ ื‘ืชืงืŸ POSIX). ื›ืืŸ, ื‘ืกืขื™ืฃ ืขืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืฉืจืฉื•ืจื™ื ืขื ืคืขื•ืœื•ืช ืงื‘ืฆื™ื ืจื’ื™ืœื•ืช, ื™ืฉ ื”ืขืจื” ืฉืื•ืžืจืช ืฉืื ืฉื ื™ ืฉืจืฉื•ืจื™ื ื›ืœ ืื—ื“ ืžืชืงืฉืจื™ื ืœืคื•ื ืงืฆื™ื•ืช ื”ืืœื”, ืื– ื›ืœ ืงืจื™ืื” ื—ื™ื™ื‘ืช ืœืจืื•ืช ืืช ื›ืœ ื”ื”ืฉืœื›ื•ืช ื”ืžืฆื•ื™ื ื•ืช ืฉื‘ื™ืฆื•ืข ื”ืฉื™ื—ื” ื”ืื—ืจืช ืžื•ื‘ื™ืœ ืืœื™ื”, ืื• ืœื ืจื•ืื” ื‘ื›ืœืœ ืื™ืŸ ื”ืฉืœื›ื•ืช. ื–ื” ืžื•ื‘ื™ืœ ืœืžืกืงื ื” ืฉื›ืœ ืคืขื•ืœื•ืช ื”-I/O ืฉืœ ื”ืงื‘ืฆื™ื ื—ื™ื™ื‘ื•ืช ืœื”ื—ื–ื™ืง ื ืขื™ืœื” ืขืœ ื”ืžืฉืื‘ ืฉืขืœื™ื• ืขื•ื‘ื“ื™ื.

ื”ืื ื–ื” ืื•ืžืจ ืฉื”ืžื‘ืฆืข write() ื”ื•ื ืื˜ื•ืžื™? ืžื ืงื•ื“ืช ืžื‘ื˜ ื˜ื›ื ื™ืช, ื›ืŸ. ืคืขื•ืœื•ืช ืงืจื™ืืช ื ืชื•ื ื™ื ื—ื™ื™ื‘ื•ืช ืœื”ื—ื–ื™ืจ ืืช ื›ืœ ืžื” ืฉื ื›ืชื‘ ืื• ืืฃ ืื—ื“ ืžืžื ื• write(). ืื‘ืœ ื”ืžื‘ืฆืข write(), ื‘ื”ืชืื ืœืชืงืŸ, ืœื ื—ื™ื™ื‘ืช ืœื”ืกืชื™ื™ื, ืœืื—ืจ ืฉืจืฉืžื” ืืช ื›ืœ ืžื” ืฉื”ืชื‘ืงืฉื” ืœืจืฉื•ื. ืžื•ืชืจ ืœื›ืชื•ื‘ ืจืง ื—ืœืง ืžื”ื ืชื•ื ื™ื. ืœื“ื•ื’ืžื”, ื™ื™ืชื›ืŸ ืฉื™ืฉ ืœื ื• ืฉื ื™ ื–ืจืžื™ื ืฉืžื•ืกื™ืคื™ื ื›ืœ ืื—ื“ 1024 ื‘ืชื™ื ืœืงื•ื‘ืฅ ื”ืžืชื•ืืจ ืขืœ ื™ื“ื™ ืื•ืชื• ืžืชืืจ ืงื•ื‘ืฅ. ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ื”ืชืงืŸ, ื”ืชื•ืฆืื” ืชื”ื™ื” ืžืงื•ื‘ืœืช ื›ืืฉืจ ื›ืœ ืื—ืช ืžืคืขื•ืœื•ืช ื”ื›ืชื™ื‘ื” ื™ื›ื•ืœื” ืœืฆืจืฃ ื‘ื™ืช ืื—ื“ ื‘ืœื‘ื“ ืœืงื•ื‘ืฅ. ืคืขื•ืœื•ืช ืืœื• ื™ื™ืฉืืจื• ืื˜ื•ืžื™ื•ืช, ืืš ืœืื—ืจ ืฉื”ืŸ ื™ืกืชื™ื™ืžื•, ื”ื ืชื•ื ื™ื ืฉื”ื ื›ื•ืชื‘ื™ื ืœืงื•ื‘ืฅ ื™ืชื‘ืœื‘ืœื•. ื›ืืŸ ื“ื™ื•ืŸ ืžืขื ื™ื™ืŸ ืžืื•ื“ ื‘ื ื•ืฉื ื–ื” ื‘-Stack Overflow.

ืคื•ื ืงืฆื™ื•ืช fsync() ื•-fdatasync().

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœืฉื˜ื•ืฃ ื ืชื•ื ื™ื ืœื“ื™ืกืง ื”ื™ื ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื” fsync (). ืคื•ื ืงืฆื™ื” ื–ื• ืžื‘ืงืฉืช ืžืžืขืจื›ืช ื”ื”ืคืขืœื” ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ื‘ืœื•ืงื™ื ืฉืฉื•ื ื• ืžื”ืžื˜ืžื•ืŸ ืœื“ื™ืกืง. ื–ื” ื›ื•ืœืœ ืืช ื›ืœ ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ื”ืงื•ื‘ืฅ (ื–ืžืŸ ื’ื™ืฉื”, ื–ืžืŸ ืฉื™ื ื•ื™ ืงื•ื‘ืฅ ื•ื›ืŸ ื”ืœืื”). ืื ื™ ืžืืžื™ืŸ ืฉื™ืฉ ืฆื•ืจืš ื‘ืžื˜ื ื ืชื•ื ื™ื ืืœื” ืœืขืชื™ื ืจื—ื•ืงื•ืช, ืื– ืื ืืชื” ื™ื•ื“ืข ืฉื–ื” ืœื ื—ืฉื•ื‘ ืœืš, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” fdatasync(). ื‘ืชื•ืš ืขื–ืจื” ืขืœ fdatasync() ื”ื•ื ืื•ืžืจ ืฉื‘ืžื”ืœืš ื”ืคืขื•ืœื” ืฉืœ ืคื•ื ืงืฆื™ื” ื–ื•, ื›ืžื•ืช ื›ื–ื• ืฉืœ ืžื˜ื ื ืชื•ื ื™ื ื ืฉืžืจืช ื‘ื“ื™ืกืง, ืฉื”ื™ื "ื”ื›ืจื—ื™ ืœื‘ื™ืฆื•ืข ื ื›ื•ืŸ ืฉืœ ืคืขื•ืœื•ืช ืงืจื™ืืช ื”ื ืชื•ื ื™ื ื”ื‘ืื•ืช." ื•ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื—ืฉื•ื‘ ืœืจื•ื‘ ื”ืืคืœื™ืงืฆื™ื•ืช.

ื‘ืขื™ื” ืื—ืช ืฉื™ื›ื•ืœื” ืœื”ืชืขื•ืจืจ ื›ืืŸ ื”ื™ื ืฉืžื ื’ื ื•ื ื™ื ืืœื• ืื™ื ื ืžื‘ื˜ื™ื—ื™ื ืฉื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ืงื•ื‘ืฅ ืœืื—ืจ ืชืงืœื” ืืคืฉืจื™ืช. ื‘ืคืจื˜, ื›ืืฉืจ ื ื•ืฆืจ ืงื•ื‘ืฅ ื—ื“ืฉ, ื™ืฉ ืœื”ืชืงืฉืจ fsync() ืขื‘ื•ืจ ื”ืกืคืจื™ื™ื” ืฉืžื›ื™ืœื” ืื•ืชื•. ืื—ืจืช, ืœืื—ืจ ืงืจื™ืกื”, ืขืœื•ืœ ืœื”ืชื‘ืจืจ ืฉื”ืงื•ื‘ืฅ ื”ื–ื” ืœื ืงื™ื™ื. ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉืชื—ืช UNIX, ืขืงื‘ ื”ืฉื™ืžื•ืฉ ื‘ืงื™ืฉื•ืจื™ื ืงืฉื™ื—ื™ื, ืงื•ื‘ืฅ ื™ื›ื•ืœ ืœื”ืชืงื™ื™ื ื‘ืžืกืคืจ ืกืคืจื™ื•ืช. ืœื›ืŸ, ื›ืฉืžืชืงืฉืจื™ื fsync() ืื™ืŸ ื“ืจืš ืœืงื•ื‘ืฅ ืœื“ืขืช ืื™ืœื• ื ืชื•ื ื™ ืกืคืจื™ื™ื” ืฆืจื™ื›ื™ื ื’ื ืœื”ื™ื•ืช ืžืจื•ื—ืง ืœื“ื™ืกืง (ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ื–ื”). ื ืจืื” ืฉืžืขืจื›ืช ื”ืงื‘ืฆื™ื ext4 ืžืกื•ื’ืœืช ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืœื”ื—ื™ืœ fsync() ืœืกืคืจื™ื•ืช ื”ืžื›ื™ืœื•ืช ืืช ื”ืงื‘ืฆื™ื ื”ืžืชืื™ืžื™ื, ืืš ื™ื™ืชื›ืŸ ืฉื–ื” ืœื ื”ืžืงืจื” ื‘ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ืื—ืจื•ืช.

ื ื™ืชืŸ ืœื™ื™ืฉื ืžื ื’ื ื•ืŸ ื–ื” ื‘ืฆื•ืจื” ืฉื•ื ื” ื‘ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ืฉื•ื ื•ืช. ื”ืฉืชืžืฉืชื™ blktrace ื›ื“ื™ ืœืœืžื•ื“ ืื™ืœื• ืคืขื•ืœื•ืช ื“ื™ืกืง ืžืฉืžืฉื•ืช ื‘ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ext4 ื•-XFS. ืฉื ื™ื”ื ืžื•ืฆื™ืื™ื ืืช ืคืงื•ื“ื•ืช ื”ื›ืชื™ื‘ื” ื”ืจื’ื™ืœื•ืช ืœื“ื™ืกืง ื”ืŸ ืขื‘ื•ืจ ืชื•ื›ืŸ ื”ืงื‘ืฆื™ื ื•ื”ืŸ ืขื‘ื•ืจ ื™ื•ืžืŸ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื, ืฉื•ื˜ืคื™ื ืืช ื”ืžื˜ืžื•ืŸ ื•ื™ื•ืฆืื™ื ืขืœ ื™ื“ื™ ื‘ื™ืฆื•ืข FUA (Force Unit Access, ื›ืชื™ื‘ืช ื ืชื•ื ื™ื ื™ืฉื™ืจื•ืช ืœื“ื™ืกืง, ืขืงื™ืคืช ื”ืžื˜ืžื•ืŸ) ื›ืชื™ื‘ื” ืœื™ื•ืžืŸ. ื”ื ื›ื ืจืื” ืขื•ืฉื™ื ื‘ื“ื™ื•ืง ืืช ื–ื” ื›ื“ื™ ืœืืฉืจ ืืช ืขื•ื‘ื“ืช ื”ืขืกืงื”. ื‘ื›ื•ื ื ื™ื ืฉืื™ื ื ืชื•ืžื›ื™ื ื‘-FUA, ื”ื“ื‘ืจ ื’ื•ืจื ืœืฉืชื™ ืฉื˜ื™ืคื•ืช ืžื˜ืžื•ืŸ. ื”ื ื™ืกื•ื™ื™ื ืฉืœื™ ื”ืจืื• ืืช ื–ื” fdatasync() ืงืฆืช ื™ื•ืชืจ ืžื”ืจ fsync(). ืชื•ึนืขึถืœึถืช blktrace ืžืขื™ื“ ืขืœ ื›ืš fdatasync() ื‘ื“ืจืš ื›ืœืœ ื›ื•ืชื‘ ืคื—ื•ืช ื ืชื•ื ื™ื ืœื“ื™ืกืง (ื‘-ext4 fsync() ื›ื•ืชื‘ 20 KiB, ื• fdatasync() - 16 KiB). ื›ืžื• ื›ืŸ, ื’ื™ืœื™ืชื™ ืฉ-XFS ืžืขื˜ ืžื”ื™ืจ ื™ื•ืชืจ ืž-ext4. ื•ื›ืืŸ ื‘ืขื–ืจืช ื”ืขื–ืจื” blktrace ื”ืฆืœื™ื— ืœื’ืœื•ืช ื–ืืช fdatasync() ืฉื•ื˜ืฃ ืคื—ื•ืช ื ืชื•ื ื™ื ืœื“ื™ืกืง (4 KiB ื‘-XFS).

ืžืฆื‘ื™ื ืžืขื•ืจืคืœื™ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-fsync()

ืื ื™ ื™ื›ื•ืœ ืœื—ืฉื•ื‘ ืขืœ ืฉืœื•ืฉื” ืžืฆื‘ื™ื ืœื ื‘ืจื•ืจื™ื fsync()ืฉื‘ื” ื ืชืงืœืชื™ ื‘ืคื•ืขืœ.

ื”ืชืงืจื™ืช ื”ืจืืฉื•ื ื” ื›ื–ื• ื”ืชืจื—ืฉื” ื‘-2008. ื‘ืื•ืชื• ื–ืžืŸ, ืžืžืฉืง Firefox 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(). ื‘ืชื•ืš ืžืคืจื˜ื™ POSIX ื–ื” ื ืงืจื "ื”ืฉืœืžื” ืฉืœ ืฉืœืžื•ืช ืงื‘ืฆื™ I/O ืžืกื•ื ื›ืจื ื™ื" ื•"ื”ืฉืœืžืช ืฉืœืžื•ืช ื ืชื•ื ื™ื". ื”ื™ืชืจื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ื’ื™ืฉื” ื–ื• ื”ื•ื ืฉืฆืจื™ืš ืœื‘ืฆืข ืจืง ืงืจื™ืืช ืžืขืจื›ืช ืื—ืช ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉืœืžื•ืช ื”ื ืชื•ื ื™ื, ื•ืœื ืฉืชื™ื™ื (ืœื“ื•ื’ืžื” - write() ะธ fdatasync()). ื”ื—ื™ืกืจื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ื’ื™ืฉื” ื–ื• ื”ื•ื ืฉื›ืœ ืคืขื•ืœื•ืช ื”ื›ืชื™ื‘ื” ื‘ืืžืฆืขื•ืช ืžืชืืจ ื”ืงื•ื‘ืฅ ื”ืžืชืื™ื ื™ืกื•ื ื›ืจื ื•, ืžื” ืฉื™ื›ื•ืœ ืœื”ื’ื‘ื™ืœ ืืช ื”ื™ื›ื•ืœืช ืœื‘ื ื•ืช ืืช ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื”.

ืฉื™ืžื•ืฉ ื‘-I/O ื™ืฉื™ืจ ืขื ื”ื“ื’ืœ O_DIRECT

ืฉื™ื—ืช ืžืขืจื›ืช open() ืชื•ืžืš ื‘ื“ื’ืœ O_DIRECT, ืืฉืจ ื ื•ืขื“ ืœืขืงื•ืฃ ืืช ื”ืžื˜ืžื•ืŸ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืœื‘ืฆืข ืคืขื•ืœื•ืช I/O, ืชื•ืš ืื™ื ื˜ืจืืงืฆื™ื” ื™ืฉื™ืจื” ืขื ื”ื“ื™ืกืง. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ, ื‘ืžืงืจื™ื ืจื‘ื™ื, ื”ื™ื ืฉืคืงื•ื“ื•ืช ื”ื›ืชื™ื‘ื” ืฉื™ื•ื ืคืงื• ืขืœ ื™ื“ื™ ื”ืชื•ื›ื ื™ืช ื™ืชื•ืจื’ืžื• ื™ืฉื™ืจื•ืช ืœืคืงื•ื“ื•ืช ืฉืžื˜ืจืชืŸ ืœืขื‘ื•ื“ ืขื ื”ื“ื™ืกืง. ืื‘ืœ, ื‘ืื•ืคืŸ ื›ืœืœื™, ืžื ื’ื ื•ืŸ ื–ื” ืื™ื ื• ืชื—ืœื™ืฃ ืœืคื•ื ืงืฆื™ื•ืช fsync() ืื• fdatasync(). ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉื”ื“ื™ืกืง ืขืฆืžื• ื™ื›ื•ืœ ืขื™ื›ื•ื‘ ืื• ืžื˜ืžื•ืŸ ืคืงื•ื“ื•ืช ืžืชืื™ืžื•ืช ืœื›ืชื™ื‘ืช ื ืชื•ื ื™ื. ื•ื—ืžื•ืจ ืžื›ืš, ื‘ืžืงืจื™ื ืžื™ื•ื—ื“ื™ื ืžืกื•ื™ืžื™ื, ืคืขื•ืœื•ืช ื”-I/O ืฉื‘ื•ืฆืขื• ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘ื“ื’ืœ O_DIRECT, ืžึดืฉืื“ึธืจ ืœืชื•ืš ืคืขื•ืœื•ืช ืžืื•ื—ืกื ื•ืช ืžืกื•ืจืชื™ื•ืช. ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื• ื”ื™ื ืœื”ืฉืชืžืฉ ื‘ื“ื’ืœ ื›ื“ื™ ืœืคืชื•ื— ืงื‘ืฆื™ื O_DSYNC, ืžื” ืฉื™ื’ืจื•ื ืœื›ืš ืฉื›ืœ ืคืขื•ืœืช ื›ืชื™ื‘ื” ืชื’ืจื•ืจ ืงืจื™ืื” fdatasync().

ื”ืชื‘ืจืจ ืฉืžืขืจื›ืช ื”ืงื‘ืฆื™ื XFS ื”ื•ืกื™ืคื” ืœืื—ืจื•ื ื” "ื ืชื™ื‘ ืžื”ื™ืจ" ืขื‘ื•ืจ O_DIRECT|O_DSYNC-ืจืฉื•ืžื•ืช ื ืชื•ื ื™ื. ืื ื”ื‘ืœื•ืง ืžื•ื—ืœืฃ ื‘ืืžืฆืขื•ืช O_DIRECT|O_DSYNC, ืื– XFS, ื‘ืžืงื•ื ืœืฉื˜ื•ืฃ ืืช ื”ืžื˜ืžื•ืŸ, ื™ื‘ืฆืข ืืช ืคืงื•ื“ืช ื”ื›ืชื™ื‘ื” FUA ืื ื”ื”ืชืงืŸ ืชื•ืžืš ื‘ื”. ืื™ืžืชืชื™ ื–ืืช ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช blktrace ื‘ืžืขืจื›ืช Linux 5.4/Ubuntu 20.04. ื’ื™ืฉื” ื–ื• ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื™ืขื™ืœื” ื™ื•ืชืจ, ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ื›ื•ืชื‘ืช ืืช ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ืžื™ื ื™ืžืœื™ืช ืœื“ื™ืกืง ื•ืžืฉืชืžืฉืช ื‘ืคืขื•ืœื” ืื—ืช, ืœื ืฉืชื™ื™ื (ื›ืชื™ื‘ื” ื•ืฉื˜ื™ืคื” ืฉืœ ื”ืžื˜ืžื•ืŸ). ืžืฆืืชื™ ืงื™ืฉื•ืจ ืœ ืชื™ืงื•ืŸ ืงืจื ืœ 2018 ืฉืžื™ื™ืฉื ืืช ื”ืžื ื’ื ื•ืŸ ื”ื–ื”. ื™ืฉ ื“ื™ื•ืŸ ืžืกื•ื™ื ืขืœ ื”ื—ืœืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื–ื• ืขืœ ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ืื—ืจื•ืช, ืืš ืขื“ ื›ืžื” ืฉื™ื“ื•ืข ืœื™, XFS ื”ื™ื ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื™ื—ื™ื“ื” ืฉืชื•ืžื›ืช ื‘ื” ืขื“ ื›ื”.

ืคื•ื ืงืฆื™ื™ืช sync_file_range()โ€Ž

ืœืœื™ื ื•ืงืก ื™ืฉ ืงืจื™ืืช ืžืขืจื›ืช sync_file_range(), ื”ืžืืคืฉืจ ืœืš ืœืฉื˜ื•ืฃ ืจืง ื—ืœืง ืžื”ืงื•ื‘ืฅ ืœื“ื™ืกืง, ืœื ืืช ื›ืœ ื”ืงื•ื‘ืฅ. ืงืจื™ืื” ื–ื• ื™ื•ื–ืžืช ืฉื˜ื™ืคื” ืืกื™ื ื›ืจื•ื ื™ืช ื•ืื™ื ื” ืžืžืชื™ื ื” ืœืกื™ื•ื. ืื‘ืœ ื‘ื”ืชื™ื™ื—ืกื•ืช ืœ sync_file_range() ืื•ืžืจื™ื ืฉื”ืคืงื•ื“ื” ื”ื–ื• ื”ื™ื "ืžืกื•ื›ื ืช ืžืื•ื“". ืœื ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื•. ืชื›ื•ื ื•ืช ื•ืกื›ื ื•ืช sync_file_range() ืžืชื•ืืจ ื”ื™ื˜ื‘ ื‘ ื–ื” ื—ื•ึนืžึถืจ. ื‘ืคืจื˜, ื ืจืื” ืฉื”ืงืจื™ืื” ื”ื–ื• ืžืฉืชืžืฉืช ื‘- RocksDB ื›ื“ื™ ืœืฉืœื•ื˜ ื›ืืฉืจ ื”ืงืจื ืœ ืฉื•ื˜ืฃ ื ืชื•ื ื™ื "ืžืœื•ื›ืœื›ื™ื" ืœื“ื™ืกืง. ืื‘ืœ ื‘ืื•ืชื• ื”ื–ืžืŸ ืฉื, ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื™ืฆื™ื‘, ื”ื•ื ืžืฉืžืฉ ื’ื fdatasync(). ื‘ืชื•ืš ืงื•ื“ ืœ- RocksDB ื™ืฉ ื›ืžื” ื”ืขืจื•ืช ืžืขื ื™ื™ื ื•ืช ื‘ื ื•ืฉื ื–ื”. ืœื“ื•ื’ืžื”, ื–ื” ื ืจืื” ื›ืžื• ื”ืฉื™ื—ื” sync_file_range() ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-ZFS ืื™ื ื• ืฉื•ื˜ืฃ ื ืชื•ื ื™ื ืœื“ื™ืกืง. ื”ื ื™ืกื™ื•ืŸ ืื•ืžืจ ืœื™ ืฉืงื•ื“ ื‘ืฉื™ืžื•ืฉ ื ื“ื™ืจ ืขืฉื•ื™ ืœื”ื›ื™ืœ ื‘ืื’ื™ื. ืœื›ืŸ, ื”ื™ื™ืชื™ ืžืžืœื™ืฅ ืœื ืœื”ืฉืชืžืฉ ื‘ืฉื™ื—ืช ืžืขืจื›ืช ื–ื• ืืœื ืื ื›ืŸ ื”ื›ืจื—ื™.

ืงืจื™ืื•ืช ืžืขืจื›ืช ื›ื“ื™ ืœืกื™ื™ืข ื‘ื”ื‘ื˜ื—ืช ื”ืชืžื“ื” ืฉืœ ื”ื ืชื•ื ื™ื

ื”ื’ืขืชื™ ืœืžืกืงื ื” ืฉื™ืฉ ืฉืœื•ืฉ ื’ื™ืฉื•ืช ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ืœื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช I/O ืžืชืžืฉื›ื•ืช. ื›ื•ืœื ื“ื•ืจืฉื™ื ืงืจื™ืืช ืคื•ื ืงืฆื™ื” fsync() ืขื‘ื•ืจ ื”ืกืคืจื™ื™ื” ืฉื‘ื” ื ื•ืฆืจ ื”ืงื•ื‘ืฅ. ืืœื• ื”ื’ื™ืฉื•ืช:

  1. ืงืจื™ืืช ืคื•ื ืงืฆื™ื” fdatasync() ืื• fsync() ืœืื—ืจ ืคื•ื ืงืฆื™ื” write() (ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ fdatasync()).
  2. ืขื‘ื•ื“ื” ืขื ืžืชืืจ ืงื•ื‘ืฅ ื ืคืชื— ืขื ื“ื’ืœ O_DSYNC ืื• O_SYNC (ืขื“ื™ืฃ - ืขื ื“ื’ืœ O_DSYNC).
  3. ืฉื™ืžื•ืฉ ื‘ืคืงื•ื“ื” pwritev2() ืขื ื“ื’ืœ RWF_DSYNC ืื• RWF_SYNC (ืจืฆื•ื™ ืขื ื“ื’ืœ RWF_DSYNC).

ื”ืขืจื•ืช ื‘ื™ืฆื•ืขื™ื

ืœื ืžื“ื“ืชื™ ื‘ืงืคื™ื“ื” ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืžื ื’ื ื•ื ื™ื ื”ืฉื•ื ื™ื ืฉื—ืงืจืชื™. ื”ื”ื‘ื“ืœื™ื ืฉืฉืžืชื™ ืœื‘ ืืœื™ื”ื ื‘ืžื”ื™ืจื•ืช ื”ืขื‘ื•ื“ื” ืฉืœื”ื ืงื˜ื ื™ื ืžืื•ื“. ื–ื” ืื•ืžืจ ืฉืื ื™ ื™ื›ื•ืœ ืœื˜ืขื•ืช, ื•ืฉื‘ืชื ืื™ื ืื—ืจื™ื ืื•ืชื• ื“ื‘ืจ ืขืฉื•ื™ ืœื”ืจืื•ืช ืชื•ืฆืื•ืช ืฉื•ื ื•ืช. ืจืืฉื™ืช, ืื“ื‘ืจ ืขืœ ืžื” ืฉืžืฉืคื™ืข ื™ื•ืชืจ ืขืœ ื”ื‘ื™ืฆื•ืขื™ื, ื•ืœืื—ืจ ืžื›ืŸ, ืขืœ ืžื” ืฉืžืฉืคื™ืข ืคื—ื•ืช ืขืœ ื”ื‘ื™ืฆื•ืขื™ื.

  1. ื”ื—ืœืคืช ื ืชื•ื ื™ ืงื•ื‘ืฅ ืžื”ื™ืจื” ื™ื•ืชืจ ืžืืฉืจ ื”ื•ืกืคืช ื ืชื•ื ื™ื ืœืงื•ื‘ืฅ (ื”ืจื•ื•ื— ื”ื‘ื™ืฆื•ืขื™ื ื™ื›ื•ืœ ืœื”ื™ื•ืช 2-100%). ืฆื™ืจื•ืฃ ื ืชื•ื ื™ื ืœืงื•ื‘ืฅ ื“ื•ืจืฉ ืฉื™ื ื•ื™ื™ื ื ื•ืกืคื™ื ื‘ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ื”ืงื•ื‘ืฅ, ื’ื ืœืื—ืจ ืงืจื™ืืช ื”ืžืขืจื›ืช fallocate(), ืืš ืขื•ืฆืžืช ื”ื”ืฉืคืขื” ื”ื–ื• ืขืฉื•ื™ื” ืœื”ืฉืชื ื•ืช. ืื ื™ ืžืžืœื™ืฅ, ืœื‘ื™ืฆื•ืขื™ื ื”ื˜ื•ื‘ื™ื ื‘ื™ื•ืชืจ, ืœื”ืชืงืฉืจ fallocate() ืœื”ืงืฆื•ืช ืžืจืืฉ ืืช ื”ืฉื˜ื— ื”ื ื“ืจืฉ. ืื– ื™ืฉ ืœืžืœื ืืช ื”ื—ืœืœ ื”ื–ื” ื‘ืžืคื•ืจืฉ ื‘ืืคืกื™ื ื•ืœืงืจื•ื fsync(). ื–ื” ื™ื’ืจื•ื ืœืกื™ืžื•ืŸ ื”ื‘ืœื•ืงื™ื ื”ืžืชืื™ืžื™ื ื‘ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื›"ืžื•ืงืฆื™ื" ื‘ืžืงื•ื "ืœื ืžื•ืงืฆื™ื". ื–ื” ื ื•ืชืŸ ืฉื™ืคื•ืจ ืงื˜ืŸ ื‘ื‘ื™ืฆื•ืขื™ื (ื›-2%). ื›ืžื• ื›ืŸ, ื™ื™ืชื›ืŸ ืฉืœื“ื™ืกืงื™ื ืžืกื•ื™ืžื™ื ืคืขื•ืœืช ื’ื™ืฉื” ื—ืกื™ืžื” ืจืืฉื•ื ื” ืื™ื˜ื™ืช ื™ื•ืชืจ ืžืื—ืจื™ื. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืžื™ืœื•ื™ ื”ื—ืœืœ ื‘ืืคืกื™ื ื™ื›ื•ืœ ืœื”ื•ื‘ื™ืœ ืœืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ื ืžืฉืžืขื•ืชื™ (ื›-100%). ื‘ืคืจื˜, ื–ื” ื™ื›ื•ืœ ืœืงืจื•ืช ืขื ื“ื™ืกืงื™ื. AWS EBS (ืืœื” ื ืชื•ื ื™ื ืœื ืจืฉืžื™ื™ื, ืœื ื™ื›ื•ืœืชื™ ืœืืฉืจ ืื•ืชื). ืื•ืชื• ื“ื‘ืจ ืœื’ื‘ื™ ืื—ืกื•ืŸ. ื“ื™ืกืง ืžืชืžื™ื“ ืฉืœ GCP (ื•ื–ื” ื›ื‘ืจ ืžื™ื“ืข ืจืฉืžื™, ืฉืื•ืฉืจ ื‘ื‘ื“ื™ืงื•ืช). ืžื•ืžื—ื™ื ืื—ืจื™ื ืขืฉื• ืืช ืื•ืชื• ื”ื“ื‘ืจ ืชืฆืคื™ื•ืชืงืฉื•ืจ ืœื“ื™ืกืงื™ื ืฉื•ื ื™ื.
  2. ื›ื›ืœ ืฉืคื—ื•ืช ืฉื™ื—ื•ืช ืžืขืจื›ืช, ื›ืš ื”ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื™ื•ืชืจ (ื”ืจื•ื•ื— ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›-5%). ื–ื” ื ืจืื” ื›ืžื• ืฉื™ื—ื” open() ืขื ื“ื’ืœ O_DSYNC ืื• ืฉื™ื—ื” pwritev2() ืขื ื“ื’ืœ RWF_SYNC ืฉื™ื—ื” ืžื”ื™ืจื” ื™ื•ืชืจ fdatasync(). ืื ื™ ื—ื•ืฉื“ ืฉื”ื ืงื•ื“ื” ื›ืืŸ ื”ื™ื ืฉื‘ื’ื™ืฉื” ื”ื–ื•, ื”ืขื•ื‘ื“ื” ืฉืฆืจื™ืš ืœื‘ืฆืข ืคื—ื•ืช ืงืจื™ืื•ืช ืžืขืจื›ืช ื›ื“ื™ ืœืคืชื•ืจ ืืช ืื•ืชื” ืžืฉื™ืžื” (ืงืจื™ืื” ืื—ืช ื‘ืžืงื•ื ืฉืชื™ื™ื) ืžืฉื—ืงืช ืชืคืงื™ื“. ืื‘ืœ ื”ื”ื‘ื“ืœ ื‘ื‘ื™ืฆื•ืขื™ื ื”ื•ื ืงื˜ืŸ ืžืื•ื“, ื›ืš ืฉืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœื”ืชืขืœื ืžืžื ื• ื•ืœื”ืฉืชืžืฉ ื‘ืžืฉื”ื• ื‘ืืคืœื™ืงืฆื™ื” ืฉืœื ืžื•ื‘ื™ืœ ืœืกื™ื‘ื•ืš ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ ืฉืœื”.

ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ื‘ื ื•ืฉื ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื‘ืจ-ืงื™ื™ืžื, ื”ื ื” ื›ืžื” ื—ื•ืžืจื™ื ืฉื™ืžื•ืฉื™ื™ื:

  • ืฉื™ื˜ื•ืช ื’ื™ืฉื” ืœ-I/O - ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ื”ื™ืกื•ื“ื•ืช ืฉืœ ืžื ื’ื ื•ื ื™ ืงืœื˜/ืคืœื˜.
  • ื”ื‘ื˜ื—ืช ืฉื”ื ืชื•ื ื™ื ืžื’ื™ืขื™ื ืœื“ื™ืกืง - ืกื™ืคื•ืจ ืขืœ ืžื” ืฉืงื•ืจื” ืœื ืชื•ื ื™ื ื‘ื“ืจืš ืžื”ืืคืœื™ืงืฆื™ื” ืœื“ื™ืกืง.
  • ืžืชื™ ืขืœื™ืš ืœืกื ื›ืจืŸ ืืช ื”ืกืคืจื™ื™ื” ื”ืžื›ื™ืœื” - ื”ืชืฉื•ื‘ื” ืœืฉืืœื” ืžืชื™ ืœื”ื’ื™ืฉ ื‘ืงืฉื” fsync() ืขื‘ื•ืจ ืกืคืจื™ื•ืช. ื‘ืงืฆืจื”, ืžืกืชื‘ืจ ืฉืฆืจื™ืš ืœืขืฉื•ืช ื–ืืช ื‘ืขืช ื™ืฆื™ืจืช ืงื•ื‘ืฅ ื—ื“ืฉ, ื•ื”ืกื™ื‘ื” ืœื”ืžืœืฆื” ื–ื• ื”ื™ื ืฉื‘ืœื™ื ื•ืงืก ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ื”ืคื ื™ื•ืช ืจื‘ื•ืช ืœืื•ืชื• ืงื•ื‘ืฅ.
  • SQL Server ื‘-Linux: FUA Internals - ื”ื ื” ืชื™ืื•ืจ ืฉืœ ื”ืื•ืคืŸ ืฉื‘ื• ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืžืชืžืฉืš ืžื™ื•ืฉื ื‘-SQL Server ื‘ืคืœื˜ืคื•ืจืžืช ืœื™ื ื•ืงืก. ื™ืฉ ื›ืืŸ ื›ืžื” ื”ืฉื•ื•ืื•ืช ืžืขื ื™ื™ื ื•ืช ื‘ื™ืŸ ืงืจื™ืื•ืช ืžืขืจื›ืช ืฉืœ Windows ื•-Linux. ืื ื™ ื›ืžืขื˜ ื‘ื˜ื•ื— ืฉื‘ื–ื›ื•ืช ื”ื—ื•ืžืจ ื”ื–ื” ืœืžื“ืชื™ ืขืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื™ืช FUA ืฉืœ XFS.

ื”ืื ืื™ื‘ื“ืช ืื™ ืคืขื ื ืชื•ื ื™ื ืฉื—ืฉื‘ืช ืฉืื•ื—ืกื ื• ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ื‘ื“ื™ืกืง?

ืžืžืฉืงื™ API ืขืžื™ื“ื™ื ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ื•ืงื‘ืฆื™ Linux

ืžืžืฉืงื™ API ืขืžื™ื“ื™ื ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ื•ืงื‘ืฆื™ Linux

ืžืงื•ืจ: www.habr.com