리눅스 HugeTLB와 투명 대형 페이지: TLB 이점과 운영상 절충
페이지 크기가 주소 변환과 TLB에 미치는 영향, 사전 예약하는 HugeTLB와 자동 관리되는 THP의 차이, 워크로드별 검증이 필요한 이유를 설명합니다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
주소 변환에서 TLB가 맡는 일
가상 주소를 실제 메모리 위치로 바꾸려면 커널의 페이지 테이블을 따라가야 합니다. CPU는 최근 변환을 TLB(변환 색인 버퍼)에 저장해 반복 조회를 줄입니다. 기본 페이지 단위가 작은 환경에서 넓은 작업 집합을 다루면 하나의 TLB 항목이 담당하는 주소 범위가 제한되고, 변환 정보를 다시 찾는 비용이 커질 수 있습니다. Huge page는 여러 기본 페이지를 더 큰 단위로 매핑해 이 부담을 낮출 가능성이 있습니다. 다만 TLB 항목 수와 이점은 CPU 구조, 페이지 크기, 메모리 접근 패턴에 따라 다르므로 일정한 성능 향상률을 가정해서는 안 됩니다.
HugeTLB는 큰 페이지를 미리 확보한다
Linux 커널 문서는 HugeTLB 페이지 풀의 총량·여유·예약·초과 페이지를 /proc/meminfo와 sysfs 경로에서 확인할 수 있다고 설명합니다. 관리자는 부팅 옵션이나 런타임 설정으로 페이지 수와 크기를 구성할 수 있지만, 가능한 크기는 아키텍처에 따라 다릅니다. 예를 들어 x86 계열에서 2 MiB나 지원되는 경우 1 GiB가 문서 예시로 등장해도 다른 CPU에 그대로 적용되는 값은 아닙니다. 풀에 예약된 메모리는 일반 용도로 자유롭게 쓰이지 않으며, huge page는 메모리 압박 때 스왑 아웃되지 않습니다. 따라서 필요한 양을 크게 잡으면 일반 메모리 사용 가능량을 줄일 수 있습니다.
예약 성공은 연속된 물리 메모리의 가용성에 달려 있습니다. 부팅 초기에 확보하는 방식이 단편화가 덜한 조건을 만들 수 있지만, NUMA 노드마다 배분이 달라질 수 있고 런타임 할당은 현재 메모리 상태에 좌우됩니다. /proc/meminfo 숫자만 보는 것으로 특정 애플리케이션이 실제 풀을 사용한다고 단정할 수는 없습니다. 애플리케이션이 mmap, 공유 메모리 또는 다른 경로 중 무엇을 지원하는지도 별도로 확인해야 합니다.
THP는 커널이 조건에 따라 큰 매핑을 관리한다
투명 대형 페이지(THP)는 HugeTLB처럼 사용자가 고정 풀 전체를 먼저 예약하지 않아도 커널이 큰 페이지 매핑을 만들고 조정하도록 하는 방식입니다. 최신 커널 문서는 기본 페이지보다 크고 전통적인 PMD 크기보다 작은 다중 크기 THP도 설명합니다. 지원하는 메모리 유형과 페이지 크기는 커널 및 아키텍처에 따라 달라집니다. khugepaged는 조건에 맞는 기본 페이지 영역을 찾아 병합할 수 있고, 설정은 시스템 전체나 일부 프로세스·주소 영역으로 제한할 수 있습니다.
자동 관리가 곧 무비용이라는 뜻은 아닙니다. 큰 페이지를 만들거나 분할하는 시점에는 메모리 이동·회수와 할당 비용이 발생할 수 있고, 드물게 접근하는 넓은 영역은 사용량 대비 큰 페이지가 더 많은 메모리를 점유할 수 있습니다. 반대로 큰 작업 집합에서는 주소 변환 수와 페이지 폴트가 줄어드는 이점이 있을 수 있습니다. 따라서 모든 THP 설정을 한 번에 켜거나 끄는 것이 보편적 해답이라고 말할 수 없습니다.
전문가 관점: RHEL 문서는 설정 사례이지 성능 보증이 아니다
Red Hat Enterprise Linux 10 문서는 정적 HugeTLB 예약과 THP의 시스템 전체·프로세스별 동작을 분리해 설명하고, 부팅 시 예약이 단편화 전에 큰 연속 영역을 확보하는 데 유리할 수 있다고 안내합니다. 같은 장은 구체 설정이 환경에 맞아야 하며 예시 명령이 모든 시스템에 그대로 적용되지 않는다고 명시합니다. 이는 “데이터베이스는 무조건 THP를 꺼야 한다”거나 “HugeTLB가 항상 더 빠르다”는 결론을 뒷받침하지 않습니다.
운영자는 먼저 실제 CPU와 커널이 지원하는 페이지 크기, 애플리케이션 메모리 매핑 방식, NUMA 배치, 여유 메모리를 파악해야 합니다. 변경 전후에는 같은 부하와 측정 구간에서 지연 시간 분포, 메모리 사용량, 페이지 폴트와 TLB 관련 지표를 함께 비교할 수 있습니다. 결과가 달라지면 그 차이를 workload와 설정으로 설명하고, 한 서버의 수치를 다른 환경의 보장으로 일반화하지 않는 것이 중요합니다.
출처
- Linux Kernel Documentation, “HugeTLB Pages” — 풀 상태, 페이지 크기, NUMA·연속 메모리 제약과 사용 경로에 관한 커널 문서.
- Red Hat, “Chapter 12. Configuring huge pages” — RHEL 10에서 HugeTLB 예약과 THP 구성 방식을 구분하는 제품별 운영 문서.