Relevance Framing ๐งฉ
๋ชฉ์ : ์ฟผ๋ฆฌํ๋์ ๋ชฉํ๋ฅผ ์ดํดํ๊ธฐ ์ํด์
์ฟผ๋ฆฌ์ Disk I/O์์ ๊ด๊ณ
์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฐ์ ์ผ๋ก ๋์คํฌ I/O ์์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
ํด๋น Disk I/O ์์ ์ ๋ค์ ๋๋ค I/O์ ์์ฐจ I/O๋ก ๋๋๋๋ฐ, ์ด๋ ๋์คํฌ์ ์ ๊ทผ์ ๋ช ๋ฒ ํ๋๋์ ๋ฐ๋ผ ์ข ๋ฅ๊ฐ ๋๋๋ค.
์ฟผ๋ฆฌํ๋์,
๊ธฐ์กด ์ฟผ๋ฆฌ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋น ๋ฅธ ์๊ฐ์์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ์ ์๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ์์ ์ ๋งํ๋ค.
๋์คํฌ์ ์ ๊ทผํ๋ ํ์๊ฐ ์ ์์๋ก ์๋๊ฐ ๊ฐ์ ๋จ์ ๋น์ฐํ ์ด์ผ๊ธฐ ์ด๋ฏ๋ก,
**์ฟผ๋ฆฌ ํ๋์ ๋ชฉํ๋ ์ต๋ํ Disk I/O๋ฅผ ์ ๊ฒ ํ๋ ๊ฒ์ ์๋ค.
0. ์ ์ ์ํฉ
๋์คํฌ I/O์ ๋ํ ๊ฐ๋ ์ ๋ช ํํ ์ดํดํ๊ธฐ ์ํด, OS ํ์ด์ง ์บ์์ InnoDB ๋ฒํผ ํ์ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ๊ฐ 100% ์๋ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ฐ์ ์ค๋ช ์ ์ด์ด๊ฐ๋ค.
1. ๊ฐ๋ ์ค๋ช
(0) ๋์คํฌ I/O๋?
์ํ๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฑฐ๋ ํน์ ํน์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ธฐ ์ํด ๋์คํฌ์ ์ ๊ทผํ๋ ํ์๋ฅผ ๋งํ๋ค.
(1). ์์ฐจ I/O
: ๋์คํฌ ๋ด์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฐ์๋ ๋ฐ์ดํฐ๋ค์ ํ ๋ฒ์ ๋์คํฌ I/O๋ก ๋ชจ์กฐ๋ฆฌ ์ฝ์ด์ค๋ ์ ๊ทผ ๋ฐฉ์
(2). ๋๋ค I/O
: ๋์คํฌ ๋ด์ ์ฐ์ฌ๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ์ฝ๊ธฐ ์ํด ์ฌ๋ฌ๋ฒ์ ๋์คํฌ I/O๋ฅผ ํํ๋ ์ ๊ทผ ๋ฐฉ์
2. ์๋ฒ๋ ์ด ๋์ ์ด๋ป๊ฒ ๊ตฌ๋ถํ์ฌ ๋ช ๋ น์ ๋ด๋ฆด๊น?
๊ฒฐ๋ก : InnoDB๊ฐ OS ์์คํ
์ฝ ํธ์ถ์ ๋ช ๋ฒ ํ๋๋์ ๋ฐ๋ผ์ ๋์ ๊ตฌ๋ถ๋๋ค.

๋ฐ์ pread()๋ผ๋ ์์คํ
์ฝ ํธ์ถ ํจ์์ด๋ค.
pread(fd, buf, total_size, offset);
๊ฐ ์ธ์์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
| ๋งค๊ฐ๋ณ์ | ์ค๋ช |
|---|---|
fd |
๋์คํฌ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ (ํ์ผ ๋์คํฌ๋ฆฝํฐ: ์ด์์ฒด์ ๊ฐ ํ์ผ์ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฒํธ) |
buffer |
์ฝ์ด๋ค์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ |
160 * 1024 |
์ฝ๊ณ ์ ํ๋ ๋ฐ์ดํธ ์ = ์ฌ๊ธฐ์ 160KB |
offset_for_page_100 |
ํ์ผ ๋ด ์ฝ๊ธฐ๋ฅผ ์์ํ ๋ฐ์ดํธ ์์น (์คํ์ ) = ํ์ด์ง 100์ ์์ ์์น |
ํจ์์์ ์ ์ ์๋ฏ์ด, ์์ฐจ I/O ๋ pread()๋ฅผ ํ ๋ฒ๋ง ๋ถ๋ฅด๋ฉด ๋๋ค. ๋จ์ง ์ฝ๊ณ ์ถ์ ์์ ๋ฐ๋ผ 3๋ฒ์งธ ์ธ์์ธ ๋ฐ์ดํธ ์๋ฅผ ์กฐ์ ํ๋ฉด ๋ ๋ฟ์ด๋ค.
๋ฐ๋ฉด, ๋๋ค I/O ๋ ๊ตฌ์กฐ์ ํด๋น ํจ์๋ฅผ ํ ๋ฒ๋ง ์ด์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ํด๋น ํจ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ถ๋ฌ์ผ ํ๋ค.
(1) ์์
A. ์์ฐจ I/O
๋จผ์ ์์ฐจ I/O์ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด๋ณด์. ์ํฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ ํ์ด์ง์ ํฌ๊ธฐ: 16KB
- ์กฐํ ํ์ด์ง ๋ฒํธ: 100๋ฒ๋ถํฐ 109๋ฒ๊น์ง (์ด 10 Page = 160KB)์์ ๋ช ๋ น์ด ํ ๋ฒ์ด๋ฉด ๋ชจ๋ ์ฝ์ ์ ์๋ค. 3๋ฒ์งธ ์ธ์์ 16์ 10๋ฐฐ๋ฅผ ์ ๋ ฅํด ํ ๋ฒ์ 10ํ์ด์ง๋ฅผ ์ฝ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
pread(fd, buffer, 160 * 1024, offset_for_page_100);
B. ๋๋ค I/O
๋๋ค I/O๋ฅผ ๋ณผ๊น?
- ํ ํ์ด์ง์ ํฌ๊ธฐ: 16KB
- ์กฐํ ํ์ด์ง ๋ฒํธ: 100, 117, 203, 350ํ ํ์ด์ง์ฉ 4๋ฒ ์ฝ์ด์ผ ํ๋ค.
pread(fd, buffer1, 16 * 1024, offset_for_page_100); pread(fd, buffer2, 16 * 1024, offset_for_page_117); pread(fd, buffer3, 16 * 1024, offset_for_page_203); pread(fd, buffer4, 16 * 1024, offset_for_page_350);
3. ๋๋ค I/O์ ์์ฐจ I/O์ ์๋ ์ฐจ์ด
์์์ ์ดํด๋ณด์๋ฏ์ด ๋น์ฐํ ์์ฐจ I/O ์ชฝ์ด ๋ ๋น ๋ฅด๋ค.
์ด๋ฅผ HDD์ ๊ด์ ๊ณผ SSD์ ๊ด์ ์์ ์์๋ณด๋ ค๊ณ ํ๋ค.
(1) HDD ๊ด์ ์์
๊ฒฐ๋ก : SEEK TIME๊ณผ Rotational Latency์ ํ์ ์ฐจ์ด
์์ฐจ I/O์ ๊ฒฝ์ฐ, ํ๋ํฐ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ํธ๋ ์ฐพ๊ธฐ (Seek Time) ๊ณผ ํธ๋ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์์์ ์ธ Sector ์ฐพ๋ ๊ฒ์ ์ต์ด ํ ๋ฒ๋ง ํ๋ฉด ๋๋ค.
๋ฐ๋ฉด, ๋๋ค I/O์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด Pread() ํ ๋ฒ ๋น SeekTime๊ณผ Rotational Latency๊ฐ ๋งค ๋ฒ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์์ฐจ I/O์ ๋น๊ตํ๋ฉด ์๋ฑํ ๋๋ฆด ์ ๋ฐ์ ์๋ค.
(2) SSD์ ๊ด์ ์์
๊ฒฐ๋ก : ์์ฐจ I/O๋ ๊ณจ๊ณ ๋ฃจ ๋ณ๋ ฌ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๋๋ค I/O๋ ๊ท ์ผํ ๋ณ๋ ฌ ์ฝ๊ธฐ๋ฅผ ์ฅ๋ดํ์ง ๋ชปํ๋ค.
A. SSD์ ๋ณ๋ ฌ์ฝ๊ธฐ๋?
SSD์์์ ๋ณ๋ ฌ ์ฝ๊ธฐ๋, SSD ์ปจํธ๋กค๋ฌ๊ฐ ๋ค์์ ์ฑ๋์์ ๋ณ๋ ฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ์ ๋งํ๋ค.
์ด๊ฒ์ ์ฑ๋ฆฝ์ ์ํด์๋ NAND ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค๋ ๊ฒ์ด ์ ์ ๋์ด์ผ ํ๋ค.
B. ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ด๋?
๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฑ
ํฌ์ ๋ถ์ฐ ์ ์ฅ ์์ผ์ ๋ณ๋ ฌ์ ์ธ ๋ฐ์ดํฐ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐ์ดํฐ ์ ์ฅ ์ ๋ต์ด๋ค. ์ฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ
ํฌ๋ _๋
ผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์_๋ฅผ ๋ปํ๋ค.
NAND์์ ๋ฑ
ํฌ๋ ๊ฐ๋
์ ๋์ฒดํ ์ ์๋ ์ธ์ด๋ก๋ Package๊ฐ ์๋ค. ๋๋๋ก Die๋ผ๋ ๋จ์ ๋ํ ๋ฑ
ํฌ๋ฅผ ์ง์นญํ ์ ์๊ธฐ๋ ํ๋ค.
์ ์, ๋ค์ SSD์ NAND ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์์๋ณด์.
- ๋
ผ๋ฆฌ์ ๊ตฌ์ฑ์์
- Channel: ์ปจํธ๋กค๋ฌ์ Package ์ฌ์ด๋ฅผ ์๋ ํต์ ์
- Package: ๋ฐ์ดํฐ๋ฅผ ๋๋๋ ๊ฐ์ฅ ํฐ ๋จ์
- Die: ํจํค์ง ๋ด์ ๋ฐ์ดํฐ ์์ญ์ ๋๋๋ ๋จ์
- Plaine: Die ๋ด๋ถ๋ฅผ ๋๋๋ ๋จ์
- Block: ์ฌ๋ฌ ํ์ด์ง๋ค์ ์งํฉ (๋ณดํต 128 ~ 512 Page๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. HDD์ Track์ ํด๋น)
- Page: ๊ฐ์ฅ ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋จ์ (๋ณดํต 4KB, HDD์ ์นํฐ์ ํด๋น)
โโโ Channel (์ฑ๋) ← ๋ณ๋ ฌ ๋ฐ์ดํฐ ํต์ ๋ผ์ธ
โ โโโ Package (NAND ํจํค์ง)
โ โ โโโ Die (๋ค์ด) ← ์ค์ ์ค๋ฆฌ์ฝ ์นฉ. ๋
๋ฆฝ ๋์ ๊ฐ๋ฅ
โ โ โ โโโ Plane (ํ๋ฉด) ← ๋ณ๋ ฌ ์ก์ธ์ค ๊ฐ๋ฅํ ํ์ ๋จ์
โ โ โ โ โโโ Block ← ์ง์ฐ๊ธฐ ๋จ์ (128~512 Page)
โ โ โ โ โ โโโ Page ← ์ฝ๊ธฐ/์ฐ๊ธฐ ๋จ์ (๋ณดํต 4KB)

๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ ๊ตฌํํ๋ ๋ฐฉ์์ ๋ง์ง๋ง, ํ์๋ ์์ฃผ ์ฐ์ด๋ ์ ์ฐจ์ ์ธํฐ๋ฆฌ๋น(Low-Order Interleaving) ์ ์์๋ก ์ค๋ช
ํ๊ฒ ๋ค.
์ ์ฐจ์ ์ธํฐ๋ฆฌ๋น์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ํ์ ๋นํธ๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ์ ์ ์ฅ ์์น๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ด๋ค.
๋ค์์ 4-way ์ธํฐ๋ฆฌ๋น ์ ๋ต์ด๋ผ๋ ์ ์ฐจ์ ์ธํฐ๋ฆฌ๋น์ ์ธ๋ถ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ ์์์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0: 0b00 -> ๋ฑ
ํฌ 0
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 1: 0b01 -> ๋ฑ
ํฌ 1
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 2: 0b10 -> ๋ฑ
ํฌ 2
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 3: 0b11 -> ๋ฑ
ํฌ 3
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 4: 0b00 -> ๋ฑ
ํฌ 0
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 5: 0b01 -> ๋ฑ
ํฌ 1
(๊ณ์ ๋ฐ๋ณต)
์ด๋ฐ ์์ผ๋ก ์ ์ฅํ๋ฉด, ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ค์ด ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฑ
ํฌ์ ์ ์ฅ๋์ด ๋ฐ์ดํฐ๊ฐ ๊ท ์ผํ๊ฒ ๋ถ์ฐ๋๋ค.
(๊ณ ์ฐจ์ ์ธํฐ๋ฆฌ๋น์ด๋ผ๋ ๊ฒ ๋ํ ์์ผ๋, ์ด๋ ํน์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด์ ์ํ ๊ฒ์ด๋ผ ๋ณต์กํ ํ๋์จ์ด ์ค๊ณ๋ฅผ ์ํ๋ค. ๋๋ ์ํํธ์จ์ด ์์ง๋์ด์์ผ๋ก ์ด๊น์ง๋ง ๋ค๋ฃจ๊ฒ ๋ค ใ
)
C. ๋ค์ ๋ณ๋ ฌ ์ฝ๊ธฐ๋ก ๋์์์…

์ด์ ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ด๋ ์ ์ฅ ์ ๋ต์ ๋ํด์ ์์์ผ๋, ๋ค์ ๋ณ๋ ฌ์ฝ๊ธฐ๋ก ๋์์๋ณด์. SSD ์ปจํธ๋กค๋ฌ ๋ด๋ถ๋ ์ฑ๋ ์ปจํธ๋กค ์ ๋์ด๋ผ๋ ๋ณต์์ ์ค๋ ๋๋ก ์ด๋ฃจ์ด์ง ๋ฉํฐ ์ค๋ ๋ฉ ๊ตฌ์กฐ์ด๋ค.
์ด์ ํด๋น ์ค๋ ๋๋ค์ด ์ฑ๋์ ๋ณ๋ ฌ๋ก ์ฝ๊ธฐ๋ฅผ ์์ฒญํ๋ค.

์ด๋ ์์ ์ ๊ฐ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒฝ์ฐ๋ง ๋ฐ๋ก ๋ผ์ด๋ด์ ๋ณด์ฌ์ฃผ๋ ์ฌ์ง์ด๋ค.
์ธํฐ๋ฆฌ๋น์ ํ ๊ฒฝ์ฐ๋ ์ฑ๋ ์ปจํธ๋กค ์ ๋์ด๋ผ๋ ๊ฐ๊ฐ์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฝ์ผ๋ฉด์ ๋ ๋นจ๋ผ์ง๋ค.
D. SSD ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ์์ ๊ฐ์ ๋, ์์ฐจ I/O์ ๋๋ค I/O๋ฅผ ๋ค์ ๋ณด์.
์ด์ ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ ๋ง์น๊ณ ๋ณ๋ ฌ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ํ์์, ์์ฐจ I/O์ ๋ณ๋ ฌ I/O ์ค ๋ญ๊ฐ ๋ ์ ๋ฆฌํ ์ง ์๊ฐํด๋ณด์.
์์ฐจ I/O์ ๊ฒฝ์ฐ, ๊ท ์ผํ ๋ณ๋ ฌ ์ฝ๊ธฐ๊ฐ ์ผ์ด๋ ๊ฒ์์ด ์์๋๋ค. ์๋ํ๋ฉด ์์ฐจ I/O๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฒ์๊ฐ ์ฐ์์ ์ด๊ธฐ ๋๋ฌธ์, ์ฒ์ ๋ถ์ฐํ๋ ์ฑ๋๋ง๋ค ๊ท ์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ธฐ๋ง ํ๋ฉด ๋ ๋ฟ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ฉด, ๋๋ค I/O์ ๊ฒฝ์ฐ, ๋ณ๋ ฌ์ฝ๊ธฐ๊ฐ ์ผ์ด๋ ๊ฒ์์ ์ฅ๋ดํ์ง ๋ชปํ๋ค. ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฐ์ดํฐ๊ฐ channel 1์๋ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋๋ค I/O๊ฐ ์์ฐจ I/O๋ณด๋ค ๋๋ฆด ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
4. ์๊ฒฐ
๋ฐ๋ผ์ ๋๋ค I/O๋ ์์ฐจ I/O๋ณด๋ค ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋๋ฆด ๊ฐ๋ฅ์ฑ์ด ๋ค๋ถํ๋ค.
- DB ์๋ฒ ๋จ์์ ์์คํ ์ฝ ํธ์ถ์ด ๋ ๋ง์ด ์ผ์ด๋จ.
- HDD์ ๊ฒฝ์ฐ, ๋๋ค I/O๊ฐ ์์ฐจ I/O ๋ณด๋ค ๋ฌผ๋ฆฌ์ ์์ง์์ด ํจ์ฌ ๋ง์
- SSD์ ๊ฒฝ์ฐ, ๋๋ค I/O๋ SSD์ ์ต๋ ์ฅ์ ์ธ ๋ณ๋ ฌ ์ฝ๊ธฐ๋ฅผ ํ์ฉํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ์์.
๋ชจ๋ฅด๋ ๋จ์ด ์ ๋ฆฌ to Layman's term ๐๐
์์
์ฐธ๊ณ ๋ฌธ์
๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ด ๋ฌด์์ผ๊น?
๋งํ ์ฌ๋ ๋ฒ์งธ ํค์๋์ธ '๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น'์ ์์๋ด ์๋ค!
velog.io
๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น(Memory Interleaving)
๋ฌธ์ 11) ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น(Memory Interleaving) ๋ต) ๋ณ๋ ฌ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ, ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น(Memory Inter...
blog.naver.com