
๋ค์ด๊ฐ๋ฉฐ
์ค๋์ ๊ณ ์ฑ๋ฅ ์๋ฆฌ์ฆ ๋ ๋ฒ์งธ์ธ Translation Lookaside Buffer(TLB)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์์ํ ์๋ ์๋ ์ฉ์ด์ธ๋ฐ, ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง ํ ์ด๋ธ์ ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ ์บ์๊ฐ๋ ์ ๋๋ค. ๋จผ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ๋ ์ ํ ๋น์ ๊ดํ ํฌ์คํ ์ ๋ณด๊ณ ์ค์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ๋ ์ ํ ๋น
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง ๊ธฐ๋ฒ์ ๋ํด ํ์ตํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๊ฐ์๋ฉ๋ชจ๋ฆฌ(Virtual Memory)์ ํ์ด์ง ๊ธฐ๋ฒ(Paging) ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ธฐ๋ณธ์ ์ธ ์๋ฆฌ์ ์ธ
ground90.tistory.com
TLB(Translation Lookaside Buffer)๋?
TLB๋ CPU๊ฐ ๊ฐ์์ฃผ์(virtual address)๋ฅผ ๋ฌผ๋ฆฌ์ฃผ์(physical address)๋ก ๋ณํํ ๋ ํ์ด์ง ํ ์ด๋ธ์ ์ง์ ์กฐํํ์ง ์๊ณ , ์์ฃผ ์ฐ์ด๋ ๊ฐ์ํ์ด์ง → ๋ฌผ๋ฆฌํ๋ ์ ๋งคํ์ ์บ์ํด ๋ ํน์ํ ์บ์์ ๋๋ค. ์ฃผ์ ๋ณํ์ ๋๋ ์๊ฐ์ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค. ๋ณดํต L1-TLB (์๊ณ ๋น ๋ฆ)์ L2-TLB (ํฌ๊ณ ๋๋ฆผ) ๊ณ์ธต์ ๊ฐ์ต๋๋ค. I-TLB(์ฝ๋์ฉ) / D-TLB(๋ฐ์ดํฐ์ฉ)๋ก ๋ถ๋ฆฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ๋์ ํ๋ฆ
- CPU๊ฐ ๊ฐ์์ฃผ์๋ก ๋ก๋/์คํ ์ด/์คํ ์์ฒญ์ ํฉ๋๋ค.
- TLB๋ฅผ ๋จผ์ ์กฐํ — TLB hit์ด๋ฉด ์ฆ์ ๋ฌผ๋ฆฌ์ฃผ์๋ก ์ ๊ทผ(very fast).
- TLB miss์ด๋ฉด ํ๋์จ์ด(๋๋ ์ํํธ์จ์ด)๊ฐ ํ์ด์ง ํ
์ด๋ธ์ ์ํฌ(page walk) ํ์ฌ ๋งคํ์ ์ฐพ์ต๋๋ค.
- ํ์ด์ง ํ ์ด๋ธ์์ ๋งคํ์ด ์์ผ๋ฉด TLB์ ํญ๋ชฉ์ ๋ฃ๊ณ (access), ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์งํํฉ๋๋ค. (soft TLB miss)
- ๋งคํ์ด ์์ผ๋ฉด ํ์ด์ง ํดํธ(page fault) → ์ปค๋์ด ์ฒ๋ฆฌ(major/minor page fault).
- ํ์ด์ง ํ ์ด๋ธ ์ํฌ ์์ฒด๋ ์ฌ๋ฌ ๋จ๊ณ(๋ค๋จ๊ณ ํ์ด์ง ํ ์ด๋ธ)์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์๋ฐํ๋ฏ๋ก ์๋ฐฑ ์ฌ์ดํด์ ๋น์ฉ์ด ๋ ์ ์์ต๋๋ค.

TLB miss์ ๋น์ฉ
- soft miss (TLB miss but page present)
- ํ๋์จ์ด ํ์ด์ง ์์ปค๊ฐ ๋ค๋จ๊ณ ํ์ด์ง ํ ์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด ๋งคํ์ ์ฐพ์ TLB์ ์ฑ์๋๋ค. ์๋ฐฑ ์ฌ์ดํด ์์ค์ ๋๋ค(๊ตฌ์ฒด๊ฐ์ CPU/์บ์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค).
- hard miss / page fault (page not present)
- ์ปค๋์ด ํ์ด์ง๋ฅผ ๋ก๋(๋์คํฌ/ํ์ด์ง ์ค์)ํ๋ฉด ๋ฐ๋ฆฌ์ด ~ ์์ญ ๋ฐ๋ฆฌ์ด ๋จ์์ ํฐ ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค.(๋์คํฌ I/O).
- ์ฆ์ ํ์ด์ง ํดํธ๋ ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ฉ๋๋ค.
- ๊ฐ์ํ ํ๊ฒฝ์ nested page walk๊ฐ ์ถ๊ฐ๋์ด ๋น์ฉ์ด ๋ ํฝ๋๋ค.(๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ).
๊ฒฐ๋ก : TLB miss๋ ๋์ฒด๋ก ์บ์ ๋ฏธ์ค๋ณด๋ค ๋ ๋น์ผ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ์ฌํ๋ฉด ์ ์ฒด ์๋ต ์๊ฐ/์ง์ฐ์ ๋ง๊ฐํธ๋ฆฝ๋๋ค.
TLB Reach ๊ทน๋ํ ์ ๋ต
1. Hugepage ์ฌ์ฉ
TLB์ ๋ ํฐ ํ์ด์ง๋ฅผ ์ ์ฅํ๋ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฆฌ๋ ์ค์์๋ /dev/hugepages ๋ผ๋ ๊ณต๊ฐ์ด ์กด์ฌํฉ๋๋ค. Hugepage๋ฅผ ํ์ฉํ๋ฉด TLB๊ฐ ์ปค๋ฒํ๋ ๋ฐ์ดํฐ ์์ด ์ฆ๊ฐํ์ฌ TLB ๋ฏธ์ค ํ์๋ฅผ ๊ฐ์์ํฌ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ํ์ด์ง ํฌ๊ธฐ: 4KB
- Huge Page ํฌ๊ธฐ: 2MB ๋๋ 1GB
- ํจ๊ณผ: TLB ์ํธ๋ฆฌ ํ๋๊ฐ ์ปค๋ฒํ ์ ์๋ ์ฃผ์ ๊ณต๊ฐ(TLB reach)์ด ์ปค์ง → TLB miss์จ ๊ฐ์
- ์์ ๊ณ์ฐ
- 64-entry TLB × 4KB = 256KB reach
- 64-entry TLB × 2MB = 128MB reach → 512๋ฐฐ ์ฆ๊ฐ
๋ฆฌ๋ ์ค ํ๊ฒฝ์์ hugepages๋ฅผ ํ์ฑํํฉ๋๋ค.
# ํ์ฌ Hugepage ์ค์ ํ์ธ
cat /proc/meminfo | grep Huge
# hugepage ํ์ฑํ
sudo sysctl -w vm.nr_hugepages=512
# C++ ์์
void* ptr = mmap(NULL, 2*1024*1024, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0);
2. ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด ์ต์ ํ(Locality ๊ฐํ)
์บ์ ์ง์ญ์ฑ ๊ฐํ ์ฑํฐ์์๋ ๋ค๋ค๋ ๋ถ๋ถ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ ๊ทผ์ ๊ฐํํฉ๋๋ค.
// BAD: ๋๋ค ์ ๊ทผ → TLB miss ์ฆ๊ฐ
for (int i : random_indices)
sum += arr[i];
// GOOD: ์ฐ์ ์ ๊ทผ → TLB hit ์ ์ง
for (int i = 0; i < N; ++i)
sum += arr[i];
3. ํ์ด์ง ์ ๋ ฌ ๋ฐ SoA(Structure of Arrays) ์ฌ์ฉ
์ด ์ญ์๋ ์บ์ ์ง์ญ์ฑ๊ณผ ๊ฐ์ต๋๋ค. alignas(64)๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ๋ผ์ธ๊ณผ page ๊ฒฝ๊ณ์ ๋ง์ถฅ๋๋ค. ์ด๋ false sharing ๋ฟ๋ง ์๋๋ผ cross-page access๋ก ์ธํ TLB miss๋ฅผ ์ค์
๋๋ค.
๊ทธ๋ฆฌ๊ณ SoA๋ฅผ ํตํด ๋ถํ์ํ ํ์ด์ง ์ ๊ทผ์ ์ค์
๋๋ค.
// BAD
struct Particle {
double x, y, z;
};
std::vector<Particle> p; // AoS
// GOOD
std::vector<double> x, y, z; // SoA
4. NUMA(Locality-aware Allocation) ์์คํ
NUMA๋ Non-Uniformed Memory Access(๋ถ๊ท ์ผ ๊ธฐ์ต์ฅ์น ์ ๊ทผ)์ ์ฝ์์ ๋๋ค. CPU ์์ผ์ด ํ๋๊ฐ ์๋ ๋ฐ์คํฌํ์ด ์๋๊ณ , ์ฌ๋ฌ๊ฐ์ CPU ์์ผ์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. ์ค๋ ๋๋ณ ์ง์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ง ์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค. NUMA์ ๊ดํด์๋ ์ถํ์ ๋ฐ๋ก ์์ธํ ํฌ์คํ ์ ํ๊ฒ ์ต๋๋ค.

์๋ ๋ช ๋ น์ด๋ NUMA์ ์ฑ ์ ์ปจํธ๋กคํ๋ ๋ช ๋ น์ด๋ก์จ, ๊ฐ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ง์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ง ์๊ณ ๋ด ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ง์ํต๋๋ค.
numactl --cpunodebind=0 --membind=0 ./app
๋ง์น๋ฉฐ
์ฐ๋ฆฌ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฐํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ํ์ง๋ง ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฅ์ ์ด ์๋ ๋ฐ๋ฉด ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋น์ฉ์ด๋ผ๋ ๋จ์ ์ด ์์ต๋๋ค. TLB๋ ์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ฅ์น์ด๊ธฐ ๋๋ฌธ์ TLB๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ๊ฒ์ด ๊ณ ์ฑ๋ฅ ํ๋ก์ธ์ค ๊ฐ๋ฐ์ ์์ด์ ์ค์ํ๋ค๊ณ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๋๊ธ