áĽá, á á°áá áľáááśá˝ ááľáĽ á¨ááἠáá¨ááť áá¨áááľá á ááĽááľ, áĽáŤá´á áááá°á˝ áá°ááŠá, áá°á¨áłá áááŽá˝á áá¨áłá´á ááá¨áááĽ. á á
á áá
á˝áá ááľáĽáŁ á ááááľ ááá á¤áá ááá˝ á¨áá¨áĄáľá á¨ááá¨áľ áá´áá˝á áĽáłáľáłááᢠáĽáá
ááá ááá ááá ááá áŤáá áľ áááľáá: ááŽááŤá áľáááá áá áŤá write()
, áĽá á¨áá
áľááá áľáŤ á¨á°á ááá á áá ááᥠá°á
áááą á á°á á á áááł á á˛áľá áá ááááŁá. áá write()
á¨áá°áá áŞáŤ áááĽá á RAM ááľáĽ ááłáá á¨á¨ááá áá¸á፠áĽáť áááłáᢠáľáááą áá¨áá áá° á˛áľá áĽáá˛á˝á áááľáá°áľ, á ááłááľ á°á¨á᪠áá´áá˝á áá áá áŤáľáááá.
á á á ááá áá
ááłááľ ááĽá áľáŠá¨áľ á áá°áĽ áááľ áá á¨á°áááŠáľ áá á¨á°ááá á¨ááľáłááť áľáĽáľáĽ ááᢠáľá á áŁá á áľáááá ááá á á áአá¨á°ááááá, ááá á¨ááἠáá¨ááťá ááá°áŤááľ áľáááá áá áá áŤáľáááááłá. fdatasync()
ááá á áŁáá˛áŤ áááá˝á ááááą O_DSYNC
. á¨áŽáľ áá° á˛áľá á áááľá°á ááááľ áá áŁáá áá¨á áá áá áĽáá°ááá á á¨á áá áááá
ááááľ áŤááľ áááá¨áą
á¨ááťá () á°ááŁáá á¨áá áá áŁá áŞáá˝
á¨áľáááľ áĽáŞ write()
á á°á¨áá ááľáĽ ááááťá write()
á¨ááἠááŁáĽ ááááá˝ á¨áá
áá°á á¨á°áááľá áŁááśá˝ á áľááá ááááľ á ááŁá¸á ᣠáá
ááá á ááľá¨á ááᥠá¨ááá˝ áá°áśá˝ ááá ááŽá˝ áĽá¨á°á¨á° á˘ááá (
áá
áááľ áŚááŹá˝á áááľ áá write()
á áśáá áá? á¨á´áááŤá áĽááł, á á. á¨ááἠááŁáĽ ááááá˝ á¨á°áááľá á áá ááá á ááłá¸áá ááááľ á ááŁá¸á write()
. áá ááś áĽááá write()
, á áľáłááłááľ áá°á¨áľ, áĽááľáľá˝á á¨á°á á¨áá˝áá áá á ááťá ááá
á¨áá áľá. á¨áá¨ááá ááá áĽáť áááá á°áá
áśááłáᢠáááłáᣠá á°ááłáłáŠ á¨ááá ááá á á°ááá¸á ááá áá áĽáŤááłááłá¸á 1024 áŁááľ á¨áá¨áአáááľ áĽá¨áśá˝ áááŠá áá˝ááᢠá¨á°á¨áá á ááťá áĽáŤááłááą á¨á
áá áľáŤáá˝ á ááá áá á ááľ áŁááľ áĽáť á˛á¨áአáá¤áą á°ááŁáááľ ááá¨ááᢠáĽááá
ááááá˝ á áśáá ááá áááŤáᣠááá áá á¨á¨á¨áą á ááᣠáá° ááá á¨áá˝ááľ áłáł áá°áá°áłáá˘
fsync () áĽá fdatasync () á°ááŁáŤáľ
áá¨áá áá° á˛áľá ááááŁáľ ááá ááááľ á°ááŁáŠá ááĽáŤáľ áá fdatasync()
. á fdatasync()
áá
á°ááŁá á áá áŤá áľ áá áĽáá˛á
áŤáá á¨ááłáłáł áá á á á˛áľá áá áĽáá°áááἠááááŤá áá
á "ááá¨á°ááľ á¨ááἠááŁáĽ áľáŤáá˝ áľáááá á áááá á áľááá áá." áĽá á áĽááá á áááŹá˝áá˝ á¨áá¨áááľ áá ááá˘
áĽáá
áááł á¨áá˝á á ááľ á˝áá áĽááá
áá´áá˝ ááá á¨á°áłáŤ ááľááľ á áá ááá áĽáá°áá˝á ááľáľá á áá°áĄá. á á°ááá á á˛áľ ááá á˛áá á á ááľ á°á áá°áá á áá áľ fsync()
á ááľáĄ á¨áŤáá áááŤ. áŤáá áá፠ᣠá¨áĽáá˝áľ á áá ᣠáá
ááá áĽáá°áá ááłáá
áá˝ááᢠáá
á¨ááá áľ ááááŤáľ á UNIX áľá, á áááľ áááááá˝ á á ááá ááááŤáľ, ááá á á ááŤáł áááŤáá˝ ááľáĽ ááá áá˝áá. áľááá
, á˛á°áá fsync()
ááá á¨áľáá áá፠ááἠáá° á˛áľá ááá°áľ áĽááłáá áľ á¨ááŤáá
á áľ ááá ááááľ á¨áá (fsync()
á°ááłá áááá˝á áá°áŤá áááŤáá˝, ááá áá áá
á ááá˝ á¨ááá áľáááśá˝ áá áááá áá˝áá.
áá
áá´ á á°ááŤáŠ á¨ááá áľáááśá˝ ááľáĽ á á°áᨠááááľ áá°áá á áá˝áá. á° á á á አfdatasync()
áľáá˝ ááŁá fsync()
. áááá፠blktrace
áááá áá ááá fdatasync()
áĽááá áá áŤáá° ááἠáá° á˛áľá áá˝áá (á ext4 fsync()
20 áŞá˘ áá˝áá, áĽá fdatasync()
- 16 áŞ.á˘.) áĽáá˛ááᣠXFS ᨠext4 áľáá˝ ááŁá áááá á°á¨áľáťááᢠáĽá áĽáá
á áĽááłáł blktrace
á¨áááá áááá
á˝ááᢠfdatasync()
áŤáá° ááἠáá° á˛áľá (4 áŞá˘ á XFS) áŤááľáłáá˘
fsync () á˛á áá á áťá áááłáá˝
áľá áśáľáľ á áťá áááłáá˝ áá°áĽ áĽá˝ááá fsync()
á á°ááŁá áŤáá áá.
á¨ááááŞáŤá áĽáá˛á
ááááą ááľá°áľ á 2008 á°á¨áľáˇá. á ááŤá áá á¨áá¨ááááľ 3 á áááá˝ áĽá ááĽá áŤáá¸á áááá˝ áá° á˛áľá áĽá¨á°áťá á¨áá "á á¨áś" áá á. á˝áአá¨á áááá˝ á á°ááŁá á áľá áááą áá¨á ááá¨áá¸áľ ᨠSQLite áłáłá¤á á°á á
ááᢠá ááááš ááľáĽ á¨á°áá á¨á áĽáŤááłááą ááἠá áá á°ááŁáŠ á°á ááˇá fsync()
, áá
á á¨á°á¨áá á¨ááἠáá¨ááť áĽáŠ ááľáľááá˝á á°áĽáˇá. á ááŤá áá áĽá
á áá á áá ext3 á¨ááá áľáááľ, á°ááŁáŠ fsync()
á áľáá áą ááľáĽ áŤááľá áááá "ááťáť" ááá˝ á á˛áľá áá áłáĽá§á, áĽá á¨á°ááá
ááá áá á¨ááááąáľá áĽáť á áá°áá. áá
áááľ á áá¨ááááľ ááľáĽ á ááľ áááá á á
ááľá¨á áááŁááľ áłáł áá° áááá˛á á˛áľá áĽáá˛áá ááŤá°áá áá˝áá áá
á áĽá á°á¨ááśá˝ áááľáľ áá˝áá. áĽá áĽáľá¨ááŁá áľá¨áľ áá˝áአáááľá
ááá°áá á˝áá á 2009 á.á. á¨á፠á¨áľáááľ áĽáá˝áľ á áá á¨á á˛áą ext4 ááá áľáááľ á°á áááá˝ áĽá á á˛áľ á¨á°áá አáááá˝ áᎠááááľ áĽááłáá¸á á°áá°áá áłá ááá áá áá
á á áŽáá ᨠext3 ááá áľáááľ á ááááᢠá áá°áá á ááá
ext3 á á˛áľá áá áĽá áá¨ááá˝á áĽáá´áľ áĽáá°áŁá á°ááááŠáŁ áá
á áááŽá˝á á áŁá áĽáá˛áááľ á áľáááᢠfsync()
. áááłáá áááťáťá ext4 á¨á ááľ á¨á°áá°á ááá áá á°ááá
ááľ áŤáá¸áá "ááťáť" áážá˝á áĽáť áŤá áá. áĽá á¨ááá˝ áááá˝ ááἠᨠext3 ááá
áá¨á
á áá á áá
á°á¨ áľááľáł ááľáĽ áááŤáᢠáá
á¨á°á°á¨áá á ááááá áááťáťá áá (á ááŁáŞááľ ááᥠá áá
áááł á 30 á°á¨ááľ áááŤá ᣠáá
áá á áá áá áááá áá˝áá) fsync()
á¨á°á¨áá á¨ááἠáá¨ááť áá
á¨áĽ áĽá á á°áťá áá á á¨ááľááśá˝ ááá ááá á á
á áááá áá°áá áŞáŤáá˝ ááľáĽá˘ á°ááŁá fsync()
ᨠext4 ááá
á ext3 á áŁá á áĽááľ áá°áŤáᢠá¨áá
á á°áŤá ááłáą áá áĽáá°á ááą áá á ááłááľ áľáŤáá˝á ááááłá, áááłá ááŽááŤáá˝á ááŤá. á áá
áá ááááŽá˝á áááá¨áą
áŚáľá°áá á˝áá á á°ááá¨á° fsync()
á 2018 á¨ááá¨á˘ á¨ááŤá, á PostgreSQL ááŽáááľ áááá ááľáĽ, á°ááŁáŠ á¨áá áłáá fsync()
áľá
á°áľ á ááĽááłáᣠ"ááťáť" áážá˝á áĽáá° "ááá
" ááááľ áŤá°áááᢠá áá¤áąá, á¨áá¨á°ááľ áĽáŞáá˝ fsync()
áĽáá°áá
áŁá áážá˝ ááá á áłáľáá. á áá
ááááŤáľ, á¨á°áťáťá áážá˝ á áá
á°á¨ áľááľáł ááľáĽ ááááŁá áĽá á ááŤá˝ áá° á˛áľá á ááťáá. áá
áĽááá°á á á°á áá, ááááŤáąá á áááŹá˝á á ááłááľ áá¨ááá˝ á á˛áľá áá áĽáá°á°áá áŤáľáŁá, áá á áĽáááą áá á áááá. áĽáá°áá
áŤá ááľááśá˝ fsync()
á áŁá á áá á áá áá ᣠá áĽáá°áá
ááááľ áááłáá˝ ááľáĽ áŤáá áá°áá áŞáŤ á˝ááŠá ááááá ááá ááľá¨á á áá˝áá ᢠá áĽááá
áááľáŁ áá
á áááá áľ ááᣠPostgreSQL áĽá ááá˝ áá°áá áŞáŤáá˝ áá ááťáᢠO_SYNC
ááá á¨áŁáá˛áŤ áá O_DSYNC
. á áá
á ááŤá¨áĽ áľáááą á¨á°áá°á á¨ááἠááá áľáŤáá˝á á ááŤá¨áááá áľ áá áá¨á°áą á¨áá˝á áľá
á°áśá˝á áŞáááľ áŤá°ááá, ááá áá áá
á ááŤá¨áĽ á áááŹá˝áá áĽáŤáąá áááľá°áłá°á ááááá. áľá áĽáą á¨á áá áŤááĽáĄ
á¨O_SYNC áĽá O_DSYNC áŁáá˛áŤáá˝á á áá áá áááá˝á á ááááľ áá
ááŁáááľ áŤáá á¨áá¨á áá¨ááť áá°ááŤáááĄáľ á¨ááááľ áľááśá˝ ááááľ áĽááááľá˘ áá¸áá áŁáá˛áŤ áľááá áá áĽá¨á°ááááá ááᢠO_SYNC
ááá áŁáá˛áŤ O_DSYNC
á¨áľáááľ áĽáŞá á áá áá áááá˝á á˛á¨ááą write()
áľáááą á á
á°á á°á¨á°á áá°áŁá fsync()
и fdatasync()
. á write()
и fdatasync()
). á¨áá
á ááŤá¨áĽ áááá ááłáą á°ááłá á¨ááá áááá á áá áá ááá á¨ááá áľáŤáá˝ áĽáá˛ááłá°á áá°á¨áá, áá
á á¨áá°áá áŞáŤáá áŽáľ á¨áááá á˝ááłá áááľáĽ áá˝áá.
ááĽáł I/Oá á¨O_DIRECT áŁáá˛áŤ áá áá áá
á¨áľáááľ áĽáŞ open()
áŁáá˛áŤáá áá°ááá O_DIRECT
á¨áľááá° ááááá áá¸á፠áááá á¨á°áá°á, ᨠI / O áľáŤáá˝á áŤá¨áááá, á¨á˛áľá áá á ááĽáł ááááá. áá
, á áĽá á ááŁááá˝, á ááŽááŤá á¨á°á°áĄ á¨ááťá áľáááá˝ á ááĽáł á¨á˛áľá áá áááľáŤáľ áá°áłá°áĄ áľáááá˝ áá°á¨ááá. ááá áá, á á á ááá, áá
áá´ áá°ááŁáŽáš ááľá á áá°áá fsync()
ááá fdatasync()
. áĽáááłá áá á˛áľáŠ áŤáą áá˝áá O_DIRECT
, O_DSYNC
, áá
á áááľ áĽáŤááłááą á¨á˝áá á á áŤá á áĽáŞ áá¨á°áá áááľ áá fdatasync()
.
ᨠXFS ááá áľáááľ á á
áᥠá "ááŁá ááááľ" á ááá O_DIRECT|O_DSYNC
- á¨ááἠááááŚá˝. áĽááłá á°á á
á á¨á°áá O_DIRECT|O_DSYNC
, á¨á፠XFS, áá¸ááŤáá á¨áá ἠááá
, ááłáŞáŤá á¨áá°ááá á¨áá á¨FUA á˝áá áľááá áŤáľáá˝áá. áá
áá áááááŤáá á°á á
á á á¨áááŤááᢠblktrace
á ááááľ 5.4/áĄáĄááą 20.04 á˛áľá°áᢠá ááľá°ááá á¨áá¨á áá á á á˛áľá áá áľááá˝á áĽá á ááľ áŚááŹá˝á áľááá áá áá
á áŤááľ á¨á áá áááŁá ááá á áá áľ áĽáá áááľ (áá¸ááŤáá áá˝áá áĽá áŤáĽáŁá)ᢠá¨áááľáľ á ááá á ááá
á¨áááłá°á_ááá_ááá() á°ááŁá
ááááľ á¨áľáááľ áĽáŞ á ááᢠsync_file_range()
áá
áľááá "á áŁá á á°áá" áá á°áĽááᢠáĽáąá áá áá á ááá¨áá. áŁá
áŞáŤáľ áĽá á á°ááá˝ sync_file_range()
ááľáĽ á áŁá á á°áἠá°áááżá fdatasync()
. á sync_file_range()
ZFS á˛á áá áá¨áá áá° á˛áľá á áŤááľáľá. á°áááŽá á¨áááá¨á áĽááĽáá áĽá
á áá áŤááá áŽáľ áłááŤáá˝á ááá áá˝ááᢠáľááá
ᣠá áľááá áŤááá á áľá°áá áá
áá á¨áľáááľ áĽáŞ áĽááłáá áá áĽáááŤááá˘
á¨ááἠáááááľá ááá¨ááἠá¨áľáááľ áĽáŞáá˝
ááŁáááľ áŤáá á¨I/O áľáŤáá˝á ááá¨ááá á¨ááŤáááá áśáľáľ á ááŤá¨áŚá˝ á á á¨áá áá°áá°á፠áá á°ááťááᢠááá á¨á°ááŁá áĽáŞ áŤáľáááá¸áá fsync()
ááá áá°áá á¨á áľ áááŤ. áĽááá
á áŤááśá˝ áá¸ááĄ-
- á¨á°ááŁá áĽáŞ
fdatasync()
áááfsync()
á¨á°ááŁá á ááwrite()
(ááá áá á¨á°áťá ááá˘fdatasync()
). - á áŁáá˛áŤ á¨á°á¨áá° ááá ááá áá ááľáŤáľ
O_DSYNC
áááO_SYNC
(á¨á°áťá - á¨áŁáá˛áŤ ááO_DSYNC
). - á¨áľáĽáá á á ááá
pwritev2()
áŁáá˛áŤ áŤááRWF_DSYNC
áááRWF_SYNC
(ááá¨áŁá á¨áŁáá˛áŤ ááRWF_DSYNC
).
á¨á ááťá¸á ááľáłááťáá˝
á¨áá¨áááłá¸áá á¨á°ááŤáŠ áľááśá˝á á ááťá¸á á áĽááá á áááŤáᢠá áľáŤá¸á ááĽááľ áŤá¨áá¸á ááŠááśá˝ á áŁá áľáá˝ áá¸áᢠáá áááľ ááłáłáľ áĽá˝ááá, áĽá á ááá˝ áááłáá˝ á°ááłáłá ááá á¨á°ááŤáŠ áá¤áśá˝á ááŤáłá áá˝áá. á ááááŞáŤ ᣠá á áááá áá áá á°á˝áá áĽáá°ááŤáłáľá áĽá á ááá á ᣠá á áááá áá áá á°á˝áá áĽáá°ááŤáłáľá áĽáááŤáá á˘
- á¨ááá áááĽá áááá ἠáá¨áá áá° ááá á¨áá¨á á¨á áá ááŁá áá (á¨á ááťá¸á áľáá 2-100%)ᢠáááĽá áá° ááá ááŤáŤá á¨áľáááą áĽáŞ á ááá á˘áá á ááá ááłáłáł áá á°á¨á᪠áááŚá˝á ááááá
fallocate()
ááá áá á¨áá á°á áá áá á áááŤá áá˝áá. ááĽáŠ á ááťá¸áᣠááá°áá áĽáááŤááá˘fallocate()
á áľááááá áŚáł á áľááľáá áááá°áĽ. á¨ááŤá áá áŚáł á ááá á ááŽáá˝ á°áááś áá áŤáľ á áá áľfsync()
. áá á ááá áľáááą ááľáĽ áŤááľ á°ááłá áĽááŽá˝ "áŤáá°áá°á " á°áĽá ááááľ áĽáá˛á°á¨ááŁá¸á áŤá°áááᢠáá áľáá˝ (áá° 2%) á¨á ááťá¸á ááťáťáŤ áá°áŁáᢠáĽáá˛áá á ááłááľ á˛áľáŽá˝ á¨ááá˝ ááá áááá á¨ááááŞáŤ á¨ááá ááá áááŤá¸á áá˝ááᢠáá áááľ áŚáłáá á ááŽáá˝ ááááľ áá° á¨áá°á (100% áá°á) á¨á áááá ááťáťáá áŤááŁá. á á°ááá áá á á˛áľáŽá˝ áá¨á°áľ áá˝áá.AWS á˘á˘á¤áľ (áá áá°á á áŤááá áá¨á ááᣠáá¨áááĽáá¸á á ááťááŠá)ᢠááá¨ááťá á°ááłáłá áá.á¨áá˛á áá á˛áľá (áĽá áá ááľááá áŚáá´áá áá¨á áá, á áá°ááá˝ á¨á°á¨ááá ). ááá˝ áŁáááŤáá˝á áĽáá˛á á áľááááááá¨áł á¨á°ááŤáŠ á˛áľáŽá˝ áá á¨á°áŤáŤá. - áĽááľ á¨áľáááľ áĽáŞáá˝, á áááá á¨á áŤá áá (áľáá áá° 5% áá°á ááá áá˝áá). ááłá áááľáá
open()
áŁáá˛áŤ áŤááO_DSYNC
ááá áá°áápwritev2()
áŁáá˛áŤ áŤááRWF_SYNC
ááŁá áĽáŞfdatasync()
. áĽáá áá ááá áá ááá á¨áá á áŤááľ áá á°ááłáłá á°ááŁá ááááłáľ (á¨áááľ ááá á ááľ áĽáŞ) áĽááľ á¨áľáááľ áĽáŞáá˝ áá°á¨á á¨áŤáąá áá áĽáá°ááŤááľ áĽáááłááᢠááá áá á¨á áááá ááŠááľ á áŁá áľáá˝ áá, áľááá á ááá á˝á áááľ áĽá á áá°áá áŞáŤá ááľáĽ áá° á ááááŽá ááľáĽáľáĽááľ á¨ááááŤáá ááá áá áá áá˝áá.
ááá á¨áá¨á áá¨ááť áááľ áá ááááľ áŤááľ á ááłááľ á áá ááłááśá˝ áĽáá á á
á¨I/O ááłá¨áť áá´áá˝ - á¨áá¤áľ / áá ááľ áá´áá˝ á á ááá áĽááłá˘áá¨á áá° á˛áľá ááľá¨áąá áá¨ááἠ- á¨áá°áá áŞáŤá áá° á˛áľá á áááľá°á ááááľ áá áŁáá áá¨á áá áá áĽáá°áá¨á°áľ áłáŞáá˘áááŤáá ááź áááłá°á á ááĽááľ? - ááź áááá¨áľ áĽááłáá áľ áááá áĽáŤá áááľfsync()
á áááŤáá˝. á á áá á áááá, á á˛áľ ááá á˛ááĽáŠ áá á ááľá¨á áŤáľáááááłá, áĽá á¨áá ááá ááááŤáľ á ááááľ ááľáĽ áá°ááłáłá ááá áĽá ááŁááťáá˝ ááአáá˝áá.SQL á áááá á ááááľáĄ FUA Internals - á¨ááἠá˝ááľ á ááááľ ááľá¨á áá á SQL á áááá ááľáĽ áĽáá´áľ áĽáá°áá°áá á ááá፠áĽáá á áᢠá áááśááľ áĽá ááááľ á˛áľá°á áĽáŞáá˝ ááŤá¨á á ááłááľ á áľá°áłá˝ áá á áŽá˝ áĽáá á áᢠáĽááá á áá áľá FUA XFS áááťá¸áľ á¨á°áááŠáľ ááá ááłááľ ááľáá áááŁá áá áá˘
á°á áááą á á°á á á áááł á á˛áľá áá á°á¨áá˝áˇá áĽáá á¨ááŤáľáĄáľá ááἠá áá°á áŤááá?
ááá: hab.com