fio ๋ฐ etcd์ ๋ํ ์งง์ ์ด์ผ๊ธฐ
ํด๋ฌ์คํฐ ์ฑ๋ฅ
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest
๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๊ธฐ๊ฐ์ 99๋ฒ์งธ ๋ฐฑ๋ถ์์๋ฅผ ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
sync percentiles (usec):
| 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
| 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
| 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
| 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
| 99.99th=[15795]
์ฐธ๊ณ ์ฌํญ
- ํน์ ์๋๋ฆฌ์ค์ ๋ํด --size ๋ฐ --bs ์ต์
์ ์ฌ์ฉ์ ์ ์ํ์ต๋๋ค. fio์์ ์ ์ฉํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ณ ์ ํ ๊ฐ์ ์ ๊ณตํ์ญ์์ค. ์ด๋์์ ๊ตฌํ ์ ์์ต๋๊น? ์ฝ๋ค
์ฐ๋ฆฌ๊ฐ fio๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด ๋ฐฉ๋ฒ . - ํ ์คํธํ๋ ๋์ ๋ชจ๋ I/O ๋ก๋๋ fio์์ ๋ฐ์ํฉ๋๋ค. ์ค์ ์๋๋ฆฌ์ค์์๋ wal_fsync_duration_seconds์ ๊ด๋ จ๋ ์ฐ๊ธฐ ์์ฒญ ์ธ์ ๋ค๋ฅธ ์ฐ๊ธฐ ์์ฒญ์ด ์คํ ๋ฆฌ์ง์ ๋ค์ด์ฌ ์ ์์ต๋๋ค. ์ถ๊ฐ ๋ถํ๋ wal_fsync_duration_seconds ๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค. ๋ฐ๋ผ์ 99๋ฒ์งธ ๋ฐฑ๋ถ์์๊ฐ 10ms์ ๊ฐ๊น์ฐ๋ฉด ์คํ ๋ฆฌ์ง ์๋๊ฐ ๋ถ์กฑํ ๊ฒ์ ๋๋ค.
- ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ
fio 3.5 ์ด์ (์ด์ ํญ๋ชฉ์ fdatasync ๊ธฐ๊ฐ ๋ฐฑ๋ถ์์๋ฅผ ํ์ํ์ง ์์). - ์๋ fio์ ๊ฒฐ๊ณผ ์ค๋ํซ์ ๋๋ค.
fio ๋ฐ etcd์ ๋ํ ๊ธด ์ด์ผ๊ธฐ
etcd์์ WAL์ด๋ ๋ฌด์์ ๋๊น?
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋
ํด๋ผ์ด์ธํธ๊ฐ ํค-๊ฐ ์ ์ฅ์์ ํค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํค์ ๊ฐ์ ์
๋ฐ์ดํธํ๋ฉด etcd๋ ์๊ตฌ ์ ์ฅ์์ ์ผ๋ฐ ํ์ผ์ธ WAL์ ์์
์ ๊ธฐ๋กํฉ๋๋ค. etcd๋ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ํ๊ธฐ ์ ์ WAL ํญ๋ชฉ์ด ์ค์ ๋ก ๋ฐ์ํ๋์ง ์์ ํ ํ์ธํด์ผ ํฉ๋๋ค. Linux์์๋ ํ๋์ ์์คํ
ํธ์ถ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
21:23:09.894875 lseek(8, 0, SEEK_CUR) = 12808 <0.000012>
21:23:09.894911 write(8, ". 20210220361223255266632$10 20103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8) = 0 <0.008314>
๋ถํํ๋ ์๊ตฌ ์ ์ฅ์์ ์ฐ๋ ๊ฒ์ ์ฆ์ ๋ฐ์ํ์ง ์์ต๋๋ค. fdatasync ํธ์ถ์ด ๋๋ฆฌ๋ฉด etcd ์์คํ
์ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
fio๋ก ์คํ ๋ฆฌ์ง ์์ธก
์คํ ๋ฆฌ์ง๊ฐ etcd์ ์ ํฉํ์ง ํ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ธ๊ธฐ ์๋ I/O ๋ก๋ ํ ์คํธ ๋๊ตฌ์ธ fio๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋์คํฌ ์์ ์ ๋๊ธฐ์๊ณผ ๋น๋๊ธฐ์, ๋ง์ ์์คํ ํธ์ถ ํด๋์ค ๋ฑ ๋งค์ฐ ๋ค๋ฅผ ์ ์์์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก fio๋ ์ฌ์ฉํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ง์ ๋งค๊ฐ๋ณ์๊ฐ ์์ผ๋ฉฐ ๊ฐ์ ์กฐํฉ์ด ๋ค๋ฅด๋ฉด ๋งค์ฐ ๋ค๋ฅธ I/O ์ํฌ๋ก๋๊ฐ ์์ฑ๋ฉ๋๋ค. etcd์ ๋ํ ์ ์ ํ ์์น๋ฅผ ์ป์ผ๋ ค๋ฉด WAL ํ์ผ์ ์์ฑํ ๋ fio์ ํ ์คํธ ์ฐ๊ธฐ ๋ก๋๊ฐ etcd์ ์ค์ ๋ก๋์ ์ต๋ํ ๊ทผ์ ํ๋๋ก ํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ fio๋ ์ต์ํ ํ์ผ์ ์ผ๋ จ์ ์์ฐจ์ ์ฐ๊ธฐ ๋ก๋๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ ๊ฐ ์ฐ๊ธฐ๋ ์์คํ
ํธ์ถ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
fio๊ฐ ํ์ํ ์ด์ ์ ์ค์ ๋ฐฉ๋ฒ
์ด ๊ฒ์๋ฌผ์์๋ ์ค์ ์ฌ๋ก๋ฅผ ์ค๋ช
ํฉ๋๋ค. ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฅผ ์ํด์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค. ์ฒซ์งธ, WAL์ ์ธ ๋ etcd๊ฐ ์์ฑํ๋ I/O ๋ก๋๋ ์ด๋ค ๋ชจ์ต์
๋๊น? ์ด๋ค ์์คํ
ํธ์ถ์ด ์ฌ์ฉ๋ฉ๋๊น? ๋ ์ฝ๋์ ํฌ๊ธฐ๋ ์ผ๋ง์
๋๊น? ๋์งธ, ์ด๋ฌํ ์ง๋ฌธ์ ๋ตํ๋ฉด fio๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์ํฌ๋ก๋๋ฅผ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? fio๋ ๋ง์ ์ต์
์ด ์๋ ๋งค์ฐ ์ ์ฐํ ๋๊ตฌ๋ผ๋ ์ ์ ์์ง ๋ง์ญ์์ค. ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํ๋์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ชจ๋ ํด๊ฒฐํ์ต๋๋ค.
ํด๋ฌ์คํฐ์ ๋ถํ๊ฐ ์์ ๋ ๋จผ์ strace๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes์ฉ etcd ์๋ฒ๋ฅผ ํ์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฑฐ์ ๋ชจ๋ WAL ๋ ์ฝ๋์ ํฌ๊ธฐ๊ฐ 2200~2400๋ฐ์ดํธ๋ก ๊ฑฐ์ ๋์ผํ๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฒ์๋ฌผ ์์ ๋ถ๋ถ์ ๋ช ๋ น์์ -bs=2300 ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ต๋๋ค(bs๋ ๊ฐ fio ํญ๋ชฉ์ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค). etcd ํญ๋ชฉ์ ํฌ๊ธฐ๋ etcd ๋ฒ์ , ๋ถํฌ, ๋งค๊ฐ๋ณ์ ๊ฐ ๋ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ fdatasync ๊ธฐ๊ฐ์ ์ํฅ์ ์ค๋๋ค. ์ ์ฌํ ์๋๋ฆฌ์ค๊ฐ ์๋ ๊ฒฝ์ฐ strace๋ก etcd ํ๋ก์ธ์ค๋ฅผ ๊ฒ์ฌํ์ฌ ์ ํํ ์ซ์๋ฅผ ์ฐพ์ผ์ญ์์ค.
๊ทธ๋ฐ ๋ค์ etcd ํ์ผ ์์คํ ์ด ์ํํ๋ ์์ ์ ๋ํ ์ข์ ์์ด๋์ด๋ฅผ ์ป๊ธฐ ์ํด strace ๋ฐ -ffttT ์ต์ ์ผ๋ก ์์ํ์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํ์ ํ๋ก์ธ์ค๋ฅผ ๊ฒ์ฌํ๊ณ ๊ฐ ํ๋ก์ธ์ค์ ์ถ๋ ฅ์ ๋ณ๋์ ํ์ผ์ ๊ธฐ๋กํ๊ณ ๊ฐ ์์คํ ํธ์ถ์ ์์ ๋ฐ ๊ธฐ๊ฐ์ ๋ํ ์์ธํ ๋ณด๊ณ ์๋ฅผ ์ป์ผ๋ ค๊ณ ํ์ต๋๋ค. lsof๋ฅผ ์ฌ์ฉํ์ฌ strace ์ถ๋ ฅ ๋ถ์์ ํ์ธํ๊ณ ์ด๋ค ํ์ผ ์ค๋ช ์๊ฐ ์ด๋ค ์ฉ๋๋ก ์ฌ์ฉ๋์๋์ง ํ์ธํ์ต๋๋ค. ๊ทธ๋์ strace์ ๋์์ผ๋ก ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋ค. ๋๊ธฐํ ์๊ฐ ํต๊ณ๋ etcd์ wal_fsync_duration_seconds๊ฐ WAL ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ฌ์ฉํ fdatasync ํธ์ถ๊ณผ ์ผ์นํจ์ ํ์ธํ์ต๋๋ค.
์ฐ๋ฆฌ๋ fio์ ๋ํ ๋ฌธ์๋ฅผ ์ดํด๋ณด๊ณ fio๊ฐ etcd์ ์ ์ฌํ ๋ก๋๋ฅผ ์์ฑํ๋๋ก ์คํฌ๋ฆฝํธ ์ต์ ์ ์ ํํ์ต๋๋ค. ๋ํ etcd์ ์ ์ฌํ๊ฒ strace์์ fio๋ฅผ ์คํํ์ฌ ์์คํ ํธ์ถ๊ณผ ์ง์ ์๊ฐ์ ํ์ธํ์ต๋๋ค.
์ฐ๋ฆฌ๋ fio์ ์ ์ฒด I/O ๋ก๋๋ฅผ ๋ํ๋ด๊ธฐ ์ํด --size ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ์คํ๊ฒ ์ ํํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋ก๋ ์ด ๋ฐ์ดํธ ์์ ๋๋ค. ์ด๋ ์ฐ๊ธฐ(๋ฐ fdatasync) ์์คํ ํธ์ถ ์์ ์ ๋น๋กํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. bs์ ํน์ ๊ฐ์ ๋ํด fdatasync ํธ์ถ ์ = size/bs์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐฑ๋ถ์์์ ๊ด์ฌ์ด ์์๊ธฐ ๋๋ฌธ์ ํ์คํ ํ๊ธฐ ์ํด ์ถฉ๋ถํ ์ํ์ด ์์ด์ผ ํ๊ณ 10^4๊ฐ ์ฐ๋ฆฌ์๊ฒ ์ถฉ๋ถํ ๊ฒ์ด๋ผ๊ณ ๊ณ์ฐํ์ต๋๋ค(์ฆ, 22๋ฉ๋น๋ฐ์ดํธ). --size๊ฐ ๋ ์์ ๊ฒฝ์ฐ ์ด์๊ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค(์: ์ฌ๋ฌ fdatasync ํธ์ถ์ด ํ์๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฌ๊ณ 99๋ฒ์งธ ๋ฐฑ๋ถ์์์ ์ํฅ์ ๋ฏธ์นจ).
์ง์ ํด๋ณด๊ธฐ
์ฐ๋ฆฌ๋ fio๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์คํ ๋ฆฌ์ง๊ฐ etcd๊ฐ ์ ์๋ํ ๋งํผ ์ถฉ๋ถํ ๋น ๋ฅธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ฃผ์์ต๋๋ค. ์ด์ ์๋ฅผ ๋ค์ด SSD ์คํ ๋ฆฌ์ง๊ฐ ์๋ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ์ฌ ์ง์ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com