TLB로 가상 주소 변환 지연을 줄이는 구조와 운영 과제
TLB의 주소 변환 캐시 구조, 히트와 미스 처리, 성능 지표, 멀티코어·가상화 환경의 운영 과제를 다룬다.
2026-08-14 · 최초 발행 2026-01-06
페이지 테이블 조회를 줄이는 주소 변환 캐시
TLB(Translation Look-aside Buffer)는 가상 메모리에서 가상 주소를 물리 주소로 변환하는 과정을 빠르게 처리하기 위한 특수 목적 캐시다. 최근 사용한 페이지 테이블 엔트리를 보관해 페이지 테이블 접근 횟수를 줄이고, 메모리 접근 지연을 최소화한다.
가상 페이지 번호가 TLB에 있으면 페이지 테이블을 거치지 않고 물리 주소를 얻는다. 이 경로는 메모리 접근 시간을 수 사이클에서 1 사이클로 단축한다. TLB는 CAM(Content Addressable Memory) 구조를 이용해 엔트리를 병렬로 비교한다. 일치하는 항목이 있으면 TLB Hit, 없으면 TLB Miss로 처리한다.
변환 결과와 접근 상태를 담는 엔트리
TLB 엔트리의 검색 키는 가상 페이지 번호(VPN)이며, 조회 결과로 물리 프레임 번호(PFN)를 제공한다. 보호 비트에는 읽기·쓰기·실행 권한이 들어가고, 유효 비트는 엔트리의 사용 가능 여부를 나타낸다. 더티 비트는 페이지 수정 여부를, 참조 비트는 페이지 접근 이력을 기록한다.
| Valid | Tag(VPN) | PFN | R | W | X | D | U |
| 1 | 0x1234 | 0x5678 | 1 | 1 | 0 | 1 | 0 |
- R: Read permission
- W: Write permission
- X: Execute permission
- D: Dirty bit
- U: User/Supervisor mode
구현은 연관성에 따라 나뉜다. 완전 연관 TLB는 모든 엔트리를 동시에 찾아 높은 Hit Rate를 얻는다. 집합 연관 TLB는 지정된 집합 안에서 검색해 비용과 성능을 절충한다. 직접 매핑 TLB는 단일 위치에 매핑하므로 단순하지만 충돌이 잦다.
히트와 미스에서 갈리는 처리 경로
TLB Hit에서는 가상 주소에서 VPN(Virtual Page Number)과 Offset을 분리하고, VPN으로 TLB를 병렬 검색한다. 유효 비트와 태그가 일치하면 PFN과 Offset을 조합해 물리 주소를 만들고, 보호 비트로 권한을 확인한 뒤 데이터를 읽거나 쓴다.
미스가 발생하면 아키텍처에 따라 페이지 테이블 탐색 방식이 달라진다. x86에서는 MMU가 하드웨어 Walk를 수행하고, MIPS와 RISC-V에서는 OS 예외 핸들러가 소프트웨어 Walk를 수행한다. 탐색 결과는 TLB에 리필되며, LRU나 Random 같은 교체 정책으로 희생 엔트리를 정한다.
명령과 데이터 접근을 분리한 L1 TLB와 이를 받는 통합 L2 TLB를 두는 계층형 구조도 사용된다.
Hit Rate가 유효 메모리 접근 시간을 바꾸는 방식
TLB 성능은 Hit Rate와 유효 메모리 접근 시간(EAT)으로 볼 수 있다.
TLB Hit Rate = (TLB Hits) / (Total Memory Accesses) × 100%
유효 메모리 접근 시간 (EAT) =
Hit Rate × TLB Access Time +
(1 - Hit Rate) × (TLB Access Time + Page Table Access Time)
일반 애플리케이션의 전형적 Hit Rate는 95-99%다. TLB Access Time은 1-2 CPU cycles이고, 다중 레벨 페이지 테이블의 Page Table Walk Time은 10-100 CPU cycles가 될 수 있다. TLB 사용과 미사용의 성능 향상 비율은 10-50배다.
TLB Hit Rate 98%:
EAT = 0.98 × 1 + 0.02 × 50 = 1.98 cycles
TLB Hit Rate 90%:
EAT = 0.90 × 1 + 0.10 × 50 = 5.90 cycles
(약 3배 성능 저하)
커버리지와 전환 비용을 다루는 방법
엔트리 수를 16-512개로 늘리면 더 많은 페이지 매핑을 저장할 수 있고, TLB가 포괄하는 메모리 범위도 커진다. 대신 면적과 전력 소비가 증가하므로 비용과 성능을 함께 봐야 한다.
Huge Pages는 2MB/1GB 크기 페이지를 사용해 단일 엔트리가 더 큰 메모리 범위를 맡도록 한다. 데이터베이스, 가상화, HPC 워크로드에서 활용할 수 있다.
컨텍스트 스위칭에서는 ASID(Address Space Identifier)를 프로세스별 태그로 사용해 Flush를 줄인다. 여러 프로세스가 공유하는 커널 페이지는 전역 페이지로 표시할 수 있으며, 필요한 엔트리만 없애는 선택적 무효화도 성능 유지에 쓰인다.
멀티코어에서 발생하는 무효화 비용
코어별 프라이빗 TLB는 각 코어가 독립적인 L1/L2 TLB를 갖는 방식이다. 페이지 테이블이 바뀌면 다른 코어의 TLB를 무효화해야 하며, TLB Shootdown은 IPI(Inter-Processor Interrupt)로 원격 TLB Flush를 수행한다.
여러 코어가 공유하는 L3 TLB는 개별 코어의 TLB Miss를 L3에서 흡수하고, 단일 TLB를 통해 shootdown 오버헤드를 줄일 수 있다. 페이지 매핑 변경과 ACK를 조율하는 흐름은 다음과 같다.
가상화의 이중 주소 변환
가상화 환경에서는 Guest Virtual Address(GVA)가 Guest Physical Address(GPA)로, 다시 Host Physical Address(HPA)로 변환된다. 중첩 페이지 테이블 때문에 주소 변환이 2단계로 늘어나며 오버헤드도 증가한다.
Intel VT-x와 AMD-V는 Extended Page Tables(EPT)를 통해 2차원 주소 변환을 하드웨어로 가속한다. EPT TLB는 GPA에서 HPA로의 변환을 위한 전용 TLB이며, 소프트웨어 에뮬레이션 대비 성능을 10배 이상 개선한다.
| Valid | VPID | Guest Tag | Host Tag | PFN | Flags |
- VPID: Virtual Processor ID (게스트 VM 구분)
- Guest Tag: GVA의 페이지 번호
- Host Tag: GPA의 페이지 번호
워킹셋, 별칭, 보안 완화가 주는 부담
TLB Thrashing은 워킹셋이 TLB 크기보다 클 때 발생한다. TLB Miss Rate가 급격히 늘며 성능도 크게 저하한다. Huge Pages 사용, 워킹셋 크기 조정, TLB 크기 증가가 대응 방법이다.
Aliasing은 서로 다른 가상 주소가 같은 물리 주소에 매핑되는 문제다. 동일 물리 페이지에 중복 엔트리가 생길 수 있으며, PIPT(Physically Indexed, Physically Tagged) 캐시로 해결할 수 있다.
Spectre/Meltdown은 TLB와 추측 실행의 상호작용을 이용하는 공격이다. KPTI(Kernel Page Table Isolation)와 ASID 활용이 완화 기법으로 쓰이지만, 완화 기법은 5-30% 성능 저하를 유발할 수 있다.
프로세서별 TLB 구현 차이
Intel Skylake의 L1 DTLB는 4KB pages 기준 64 entries, 4-way다. L1 ITLB는 4KB pages 기준 128 entries, 8-way이며, L2 STLB는 모든 페이지 크기에 대해 1536 entries, 12-way를 제공한다. 2MB와 1GB Huge Page 전용 엔트리도 지원한다.
ARM Cortex-A76은 I/D 분리 방식으로 type당 48 entries의 L1 TLB를 둔다. 통합 L2 TLB는 1280 entries이며, ASID는 16비트 Address Space ID를 사용한다. 가상화를 위한 VMID는 8비트 VM ID를 지원한다.
RISC-V는 페이지 폴트 핸들러가 TLB를 갱신하는 소프트웨어 관리 방식을 사용한다. OS는 페이지 테이블 구조를 자유롭게 정의할 수 있고, Sv39/Sv48은 39비트/48비트 가상 주소를 지원한다.
TLB는 작은 하드웨어 투자로 메모리 접근 성능을 수십 배 향상시키고, 운영체제의 메모리 보호와 가상화 기능을 실용적인 성능으로 구현하게 한다. 멀티코어의 TLB 일관성과 가상화의 다층 주소 변환은 추가 설계 과제지만, 하드웨어 가속 기술은 이 오버헤드를 점차 줄이고 있다.