ํด๋ผ์ฐ๋ ์์คํ
์์ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง์ ์ง์ ๊ฐ๋ฅ์ฑ์ ์ฐ๊ตฌํ๋ฉด์ ๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ ์ดํดํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ง์ ํ
์คํธํด ๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋
์ด ๊ฒ์๋ฌผ์์๋ Linux ํ์ผ API๊ฐ ์ ๊ณตํ๋ ์๊ตฌ ์ ์ฅ ๋ฉ์ปค๋์ฆ์ ์ดํด๋ด
๋๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋ก๊ทธ๋จ์ด ๋ช
๋ น์ ํธ์ถํฉ๋๋ค. write()
, ์ด ๋ช
๋ น์ด ์๋ฃ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์์ ํ๊ฒ ์ ์ฅ๋ฉ๋๋ค. ํ์ง๋ง write()
์์ฉ ํ๋ก๊ทธ๋จ ๋ฐ์ดํฐ๋ฅผ RAM์ ์๋ ์ปค๋ ์บ์์๋ง ๋ณต์ฌํฉ๋๋ค. ์์คํ
์ด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฐ๋๋ก ํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ถ๊ฐ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด ์๋ฃ๋ ๋ด๊ฐ ๊ด์ฌ ์๋ ์ฃผ์ ์ ๋ํด ๋ฐฐ์ด ๋ด์ฉ๊ณผ ๊ด๋ จ๋ ์ผ๋ จ์ ๋ฉ๋ชจ์
๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ํด ์์ฃผ ๊ฐ๋ตํ๊ฒ ์ด์ผ๊ธฐํ๋ฉด ์ง์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. fdatasync()
๋๋ ํ๋๊ทธ๊ฐ ์๋ ํ์ผ ์ด๊ธฐ O_DSYNC
. ์ฝ๋์์ ๋์คํฌ๋ก ์ด๋ํ๋ ๋์ ๋ฐ์ดํฐ์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์์ธํ ์์๋ณด๋ ค๋ฉด ๋ค์์ ์ดํด๋ณด์ธ์.
write() ํจ์ ์ฌ์ฉ์ ํน์ง
์์คํ
ํธ์ถ write()
ํ์ค์ ์ ์๋์ด ์์ write()
๋ฐ์ดํฐ ์ฝ๊ธฐ ์์
์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋์์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๊ฒฝ์ฐ์๋ ์ด์ ์ ๊ธฐ๋ก๋ ๋ฐ์ดํธ๋ฅผ ์ ํํ ๋ฐํํด์ผ ํฉ๋๋ค(
์ด๊ฒ์ด ์์ ์ ์๋ฏธํฉ๋๊น? write()
์์์
๋๊น? ๊ธฐ์ ์ ์ธ ๊ด์ ์์ ๋ณด๋ฉด ๊ทธ๋ ์ต๋๋ค. ๋ฐ์ดํฐ ์ฝ๊ธฐ ์์
์ ์์ฑ๋ ๋ด์ฉ์ ๋ชจ๋ ๋ฐํํ๊ฑฐ๋ ์ ํ ๋ฐํํ์ง ์์์ผ ํฉ๋๋ค. write()
. ํ์ง๋ง ์์ ์ write()
, ํ์ค์ ๋ฐ๋ผ ๊ทธ๋
๊ฐ ๊ธฐ๋กํ๋๋ก ์์ฒญ๋ฐ์ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋กํ์ฌ ๋๋ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง ์ธ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋์ผํ ํ์ผ ์ค๋ช
์๊ฐ ์ค๋ช
ํ๋ ํ์ผ์ ๊ฐ๊ฐ 1024๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํ๋ ๋ ๊ฐ์ ์คํธ๋ฆผ์ด ์์ ์ ์์ต๋๋ค. ํ์ค์ ๊ด์ ์์ ๊ฐ ์ฐ๊ธฐ ์์
์ด ํ์ผ์ XNUMX๋ฐ์ดํธ๋ง ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๊ฐ ํ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์์
์ ์์์ฑ์ผ๋ก ์ ์ง๋์ง๋ง ์๋ฃ๋๋ฉด ํ์ผ์ ์ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ์ด ๋ฉ๋๋ค.
fsync() ๋ฐ fdatasync() ํจ์
๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ํ๋ฌ์ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์
๋๋ค. fdatasync()
. ์ fdatasync()
์ด ๊ธฐ๋ฅ์ด ์๋ํ๋ ๋์ "๋ค์ ๋ฐ์ดํฐ ์ฝ๊ธฐ ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์คํํ๋ ๋ฐ ํ์ํ" ๋งํผ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์ ์ฅ๋๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋ฐ๋ก ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ด์ฌ์ ๊ฐ๋ ๋ถ๋ถ์
๋๋ค.
์ฌ๊ธฐ์ ๋ฐ์ํ ์ ์๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ด ๊ฐ๋ฅํ ์ค๋ฅ ํ์ ํ์ผ์ ๊ฒ์ํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ํนํ, ์ ํ์ผ์ ์์ฑํ ๋ ๋ค์์ ํธ์ถํด์ผ ํฉ๋๋ค. fsync()
๊ทธ๊ฒ์ ํฌํจํ๋ ๋๋ ํ ๋ฆฌ์ ๋ํด. ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํจ ํ ์ด ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒ์ผ๋ก ํ๋ช
๋ ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ UNIX์์๋ ํ๋ ๋งํฌ ์ฌ์ฉ์ผ๋ก ์ธํด ํ์ผ์ด ์ฌ๋ฌ ๋๋ ํ ๋ฆฌ์ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ํํ ๋ fsync()
์ด๋ค ๋๋ ํ ๋ฆฌ ๋ฐ์ดํฐ๋ ๋์คํฌ๋ก ํ๋ฌ์ํด์ผ ํ๋์ง ํ์ผ์ด ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(fsync()
ํด๋น ํ์ผ์ด ํฌํจ๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ง๋ง ๋ค๋ฅธ ํ์ผ ์์คํ
์์๋ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ๋ค์ํ ํ์ผ ์์คํ
์์ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ ์ ์์ต๋๋ค. ๋๋ ์ฌ์ฉํ๋ค fdatasync()
์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ fsync()
. ๊ณต์ต์ฌ์
blktrace
๊ฒ์ ๋ํ๋
๋๋ค fdatasync()
์ผ๋ฐ์ ์ผ๋ก ๋์คํฌ์ ๋ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์๋๋ค(ext4์ ๊ฒฝ์ฐ). fsync()
20KiB๋ฅผ ์ฐ๊ณ fdatasync()
- 16KiB). ๋ํ XFS๊ฐ ext4๋ณด๋ค ์ฝ๊ฐ ๋น ๋ฅด๋ค๋ ๊ฒ๋ ์๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ๋์์ผ๋ก blktrace
๊ทธ๊ฑธ ์์๋ผ ์ ์์์ด fdatasync()
๋ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ํ๋ฌ์ํฉ๋๋ค(XFS์ ๊ฒฝ์ฐ 4KiB).
fsync() ์ฌ์ฉ ์ ๋ชจํธํ ์ํฉ
์ธ ๊ฐ์ง ๋ชจํธํ ์ํฉ์ ์๊ฐํ ์ ์์ต๋๋ค. fsync()
๋ด๊ฐ ์ค์ ๋ก ๋ง๋ ๊ฒ์
๋๋ค.
์ฒซ ๋ฒ์งธ ์ฌ๊ฑด์ 2008๋
์ ๋ฐ์ํ์ต๋๋ค. ๊ทธ ๋น์ ๋ง์ ์์ ํ์ผ์ด ๋์คํฌ์ ๊ธฐ๋ก๋๋ ๊ฒฝ์ฐ Firefox 3 ์ธํฐํ์ด์ค๊ฐ "์ ์ง"๋์์ต๋๋ค. ๋ฌธ์ ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ด ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ์ธํฐํ์ด์ค์์ ๋ฐ์ํ ๊ฐ ๋ณ๊ฒฝ ํ ํจ์๊ฐ ํธ์ถ๋์์ต๋๋ค. fsync()
์ด๋ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ณด์ฅํฉ๋๋ค. ext3 ํ์ผ ์์คํ
์์ ์ฌ์ฉ๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. fsync()
ํด๋น ํ์ผ๊ณผ ๊ด๋ จ๋ ํ์ด์ง๋ฟ๋ง ์๋๋ผ ์์คํ
์ ๋ชจ๋ "๋ํฐ" ํ์ด์ง๋ฅผ ๋์คํฌ์ ํ๋ฌ์ํ์ต๋๋ค. ์ฆ, Firefox์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋์คํฌ์ ๊ธฐ๋ก๋ ์ ์์ผ๋ฉฐ ์ด๋ ๋ช ์ด๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ด๊ฐ ์ดํดํ๋ ํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
๋ ๋ฒ์งธ ๋ฌธ์ ๋ 2009๋
์ ๋ฐ์ํ๋ค. ๊ทธ๋ฐ ๋ค์ ์์คํ
์ถฉ๋ ํ ์๋ก์ด ext4 ํ์ผ ์์คํ
์ฌ์ฉ์๋ ์๋ก ์์ฑ๋ ๋ง์ ํ์ผ์ ๊ธธ์ด๊ฐ 3์ด๋ผ๋ ์ฌ์ค์ ์ง๋ฉดํ์ง๋ง ์ด์ ext3 ํ์ผ ์์คํ
์์๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์์์ต๋๋ค. ์ด์ ๋จ๋ฝ์์๋ extXNUMX๊ฐ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ํ๋ฌ์ํ์ฌ ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ์ต๋๋ค. fsync()
. ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด ext4์์๋ ํน์ ํ์ผ๊ณผ ๊ด๋ จ๋ ๋ํฐ ํ์ด์ง๋ง ๋์คํฌ์ ํ๋ฌ์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ์ผ์ ๋ฐ์ดํฐ๋ ext3๋ณด๋ค ํจ์ฌ ์ค๋ซ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ์์ต๋๋ค. ์ด๋ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ํ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ 30์ด ๋์ ์ด ์ํ๋ก ์ ์ง๋๋ฉฐ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. fsync()
์์ ์ ์ธ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง๋ฅผ ์ ๊ณตํ๊ณ ์ค๋ฅ์ ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ต๋ํ ๋ณดํธํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์์. ๊ธฐ๋ฅ fsync()
ext4์ ์ฌ์ฉํ ๋๋ณด๋ค ext3๋ฅผ ์ฌ์ฉํ ๋ ํจ์ฌ ํจ์จ์ ์ผ๋ก ์๋ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋จ์ ์ ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ ์ค์น์ ๊ฐ์ ์ผ๋ถ ์์
์ ์คํ ์๋๊ฐ ๋๋ ค์ง๋ค๋ ๊ฒ์
๋๋ค. ์ด์ ๋ํ ์ธ๋ถ์ ๋ณด ๋ณด๊ธฐ
์ ๊ดํ ์ธ ๋ฒ์งธ ๋ฌธ์ fsync()
, 2018๋
์ ์์๋์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ PostgreSQL ํ๋ก์ ํธ์ ํ๋ ์์ํฌ ๋ด์์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค. fsync()
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด "๋ํฐ" ํ์ด์ง๋ฅผ "๊นจ๋ํจ"์ผ๋ก ํ์ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํธ์ถ์ด ๋ฐ์ํฉ๋๋ค. fsync()
๊ทธ๋ฌํ ํ์ด์ง์๋ ์๋ฌด ๊ฒ๋ ํ์ง ๋ง์ญ์์ค. ์ด ๋๋ฌธ์ ์์ ๋ ํ์ด์ง๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋๋ค๊ณ ์๊ฐํ์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค์ ์ฌ์์
๋๋ค. ์ด๋ฌํ ์คํจ fsync()
์ด๋ฌํ ์ํฉ์์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฉํด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ฑฐ์ ์๋ฌด ๊ฒ๋ ํ ์ ์์ต๋๋ค. ์์ฆ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด PostgreSQL๊ณผ ๊ธฐํ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ถฉ๋ํฉ๋๋ค. O_SYNC
์๋๋ฉด ๊น๋ฐ๋ก O_DSYNC
. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์์คํ
์ ํน์ ์ฐ๊ธฐ ์์
์ค์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฒํผ ์์ฒด๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ด์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
O_SYNC ๋ฐ O_DSYNC ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์ด๊ธฐ
์๊ตฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ Linux ๋ฉ์ปค๋์ฆ์ ๋ํ ๋
ผ์๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ๊น๋ฐ์ ์ฌ์ฉ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค O_SYNC
๋๋ ํ๋๊ทธ O_DSYNC
์์คํ
์ฝ์ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ด ๋ write()
์์คํ
์ ๊ฐ๊ฐ ๋ช
๋ น์ด ๋ถ์ฌ๋ฉ๋๋ค. fsync()
ะธ fdatasync()
. ์ write()
ะธ fdatasync()
). ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ๋จ์ ์ ํด๋น ํ์ผ ์ค๋ช
์๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฐ๊ธฐ๊ฐ ๋๊ธฐํ๋์ด ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๊ตฌ์กฐํํ๋ ๊ธฐ๋ฅ์ด ์ ํ๋ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
O_DIRECT ํ๋๊ทธ์ ํจ๊ป ์ง์ I/O ์ฌ์ฉ
์์คํ
ํธ์ถ open()
๊น๋ฐ์ ์ง์งํ๋ค O_DIRECT
๋ ์ด์ ์ฒด์ ์บ์๋ฅผ ์ฐํํ์ฌ ๋์คํฌ์ ์ง์ ์ํธ ์์ฉํ์ฌ I/O ์์
์ ์ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์์ ์คํ๋ ์ฐ๊ธฐ ๋ช
๋ น์ด ๋์คํฌ ์์
์ ์ํ ๋ช
๋ น์ผ๋ก ์ง์ ๋ณํ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ๋ฉ์ปค๋์ฆ์ ๊ธฐ๋ฅ์ ๋์ฒดํ์ง ์์ต๋๋ค. fsync()
๋๋ fdatasync()
. ์ฌ์ค์ ๋์คํฌ ์์ฒด๊ฐ O_DIRECT
, O_DSYNC
, ์ด๋ ๊ฐ ์ฐ๊ธฐ ์์
๋ค์ ํธ์ถ์ด ๋ค๋ฐ๋ฅธ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. fdatasync()
.
XFS ํ์ผ ์์คํ
์ด ์ต๊ทผ์ "๋น ๋ฅธ ๊ฒฝ๋ก"๋ฅผ ์ถ๊ฐํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. O_DIRECT|O_DSYNC
-๋ฐ์ดํฐ ๊ธฐ๋ก. ๋ค์์ ์ฌ์ฉํ์ฌ ๋ธ๋ก์ ๋ฎ์ด์ฐ๋ ๊ฒฝ์ฐ O_DIRECT|O_DSYNC
, ๊ทธ๋ฌ๋ฉด XFS๋ ์บ์๋ฅผ ํ๋ฌ์ํ๋ ๋์ ์ฅ์น๊ฐ ์ง์ํ๋ ๊ฒฝ์ฐ FUA ์ฐ๊ธฐ ๋ช
๋ น์ ์คํํฉ๋๋ค. ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํ์ธํ์ต๋๋ค. blktrace
Linux 5.4/Ubuntu 20.04 ์์คํ
์์. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ ์ ์ต์ํ์ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋๊ณ ๋ ๊ฐ์ง ์์
(์บ์ ์ฐ๊ธฐ ๋ฐ ํ๋ฌ์)์ด ์๋ ํ ๊ฐ์ง ์์
์ด ์ฌ์ฉ๋๋ฏ๋ก ๋ ํจ์จ์ ์
๋๋ค. ์ ๋ํ ๋งํฌ๋ฅผ ์ฐพ์์ต๋๋ค.
sync_file_range() ํจ์
๋ฆฌ๋
์ค์๋ ์์คํ
์ฝ์ด ์๋ค 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()
ํ์ํ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ ๋นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๊ณต๊ฐ์ ๋ช ์์ ์ผ๋ก XNUMX์ผ๋ก ์ฑ์์ง๊ณ ํธ์ถ๋์ด์ผ ํฉ๋๋ค.fsync()
. ์ด๋ ๊ฒ ํ๋ฉด ํ์ผ ์์คํ ์ ํด๋น ๋ธ๋ก์ด "ํ ๋น๋์ง ์์"์ด ์๋๋ผ "ํ ๋น๋จ"์ผ๋ก ํ์๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ๋ฅ์ด ์ฝ๊ฐ(์ฝ 2%) ํฅ์๋ฉ๋๋ค. ๋ํ ์ผ๋ถ ๋์คํฌ๋ ๋ค๋ฅธ ๋์คํฌ๋ณด๋ค ์ฒซ ๋ฒ์งธ ๋ธ๋ก ์ก์ธ์ค ์์ ์ด ๋๋ฆด ์ ์์ต๋๋ค. ์ฆ, ๊ณต๊ฐ์ 100์ผ๋ก ์ฑ์ฐ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ(์ฝ XNUMX%) ํฅ์๋ ์ ์์ต๋๋ค. ํนํ ์ด๊ฒ์ ๋์คํฌ์์ ๋ฐ์ํ ์ ์์ต๋๋ค.AWS EBS (๋น๊ณต์ ๋ฐ์ดํฐ๋ผ ํ์ธํ ์ ์์์ต๋๋ค.) ๋ณด๊ด๋ ๋ง์ฐฌ๊ฐ์งGCP ์๊ตฌ ๋์คํฌ (๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด๋ฏธ ํ ์คํธ๋ฅผ ํตํด ํ์ธ๋ ๊ณต์ ์ ๋ณด์ ๋๋ค). ๋ค๋ฅธ ์ ๋ฌธ๊ฐ๋ค๋ ๊ทธ๋ ๊ฒ ํ๊ณ๊ด์ธก , ๋ค์ํ ๋์คํฌ์ ๊ด๋ จ๋ฉ๋๋ค. - ์์คํ
ํธ์ถ์ด ์ ์์๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค(์ด๋์ ์ฝ 5%์ผ ์ ์์). ๋์ ์ธ ๊ฒ ๊ฐ๋ค์
open()
๊น๋ฐ์ด ๋ฌ๋ฆฐO_DSYNC
๋๋ ์ ํpwritev2()
๊น๋ฐ์ด ๋ฌ๋ฆฐRWF_SYNC
๋ ๋น ๋ฅธ ํตํfdatasync()
. ์ฌ๊ธฐ์ ์์ ์ ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ์ ์ ์์ ์์คํ ํธ์ถ(๋ ๊ฐ๊ฐ ์๋ ํ ๊ฐ ํธ์ถ)์ด ์ํ๋์ด์ผ ํ๋ค๋ ์ฌ์ค์์ ์ด ์ ๊ทผ ๋ฐฉ์์ด ์ค์ํ ์ญํ ์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ฅ ์ฐจ์ด๋ ๋งค์ฐ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์์ ํ ๋ฌด์ํ๊ณ ๋ ผ๋ฆฌ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ง์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์ฉํ ์๋ฃ๋ฅผ ์ฐธ์กฐํ์ธ์.
I/O ์ก์ธ์ค ๋ฐฉ๋ฒ โ ์ ๋ ฅ/์ถ๋ ฅ ๋ฉ์ปค๋์ฆ์ ๊ธฐ๋ณธ ๊ฐ์.๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๋๋ฌํ๋๋ก ๋ณด์ฅ โ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์คํฌ๋ก ์ด๋ํ๋ ๋์ ๋ฐ์ดํฐ์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง์ ๋ํ ์ด์ผ๊ธฐ์ ๋๋ค.ํฌํจ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ธ์ fsyncํด์ผ ํฉ๋๊น? - ์ง์ ์๊ธฐ ์ง๋ฌธ์ ๋ํ ๋ต๋ณfsync()
๋๋ ํ ๋ฆฌ์ฉ. ๊ฐ๋จํ ๋งํด์ ์ ํ์ผ์ ์์ฑํ ๋ ์ด ์์ ์ ์ํํด์ผ ํจ์ ์ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฒ ๊ถ์ฅํ๋ ์ด์ ๋ Linux์์๋ ๋์ผํ ํ์ผ์ ๋ํ ์ฐธ์กฐ๊ฐ ๋ง์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.Linux์ SQL Server: FUA ๋ด๋ถ - ๋ค์์ Linux ํ๋ซํผ์ SQL Server์์ ์๊ตฌ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ๊ตฌํ๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์ ๋๋ค. ์ฌ๊ธฐ์์ Windows์ Linux ์์คํ ํธ์ถ ๊ฐ์ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋น๊ต๊ฐ ์์ต๋๋ค. XFS์ FUA ์ต์ ํ์ ๋ํด ์๊ฒ ๋ ๊ฒ์ ์ด ์๋ฃ ๋๋ถ์ด๋ผ๊ณ ๊ฑฐ์ ํ์ ํฉ๋๋ค.
๋์คํฌ์ ์์ ํ๊ฒ ์ ์ฅ๋์ด ์๋ค๊ณ ์๊ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ด๋ฒ๋ฆฐ ์ ์ด ์์ต๋๊น?
์ถ์ฒ : habr.com