Huge Pages·THP·Memory Ballooning으로 메모리 효율 다루기

Huge Pages, Transparent Huge Pages, Memory Ballooning의 동작 방식과 워크로드별 메모리 최적화 판단 기준

2026-08-14 · 최초 발행 2026-01-19

페이지 수가 많아질수록 커지는 메모리 관리 부담

표준 4KB 페이지는 대용량 메모리에서 페이지 테이블과 TLB에 부담을 준다. Huge Pages는 더 큰 단위로 메모리를 매핑해 이 부담을 낮추고, Transparent Huge Pages(THP)는 그 처리를 커널이 자동으로 수행하게 한다. 가상화 환경에서는 Memory Ballooning이 호스트와 게스트 사이의 메모리 배분을 조절한다.

64GB 메모리를 4KB 페이지로 관리하면 페이지 테이블에 약 128MB가 필요하다. 페이지 수가 늘수록 TLB 미스와 페이지 테이블 탐색 오버헤드도 커진다.

최적화Huge Pages (2MB)1GB 메모리512개 페이지작은 페이지 테이블낮은 TLB 미스율표준 페이지 (4KB)1GB 메모리262,144개 페이지대용량 페이지 테이블높은 TLB 미스율
메트릭 4KB 페이지 2MB Huge Pages 개선율
TLB 엔트리당 커버 4KB 2MB 512배
페이지 테이블 크기 100% 0.2% 500배 감소
TLB 미스율 높음 낮음 80% 감소
메모리 접근 지연 기준 -15~30% 성능 향상

명시적으로 Huge Pages를 할당할 때

Huge Pages는 스왑되지 않으므로 물리 메모리에 계속 상주한다. 데이터베이스나 가상 머신처럼 대량의 메모리를 안정적으로 사용하는 워크로드에 맞지만, 과도하게 예약하면 일반 프로세스의 메모리가 부족해질 수 있다. 메모리 단편화가 심한 경우에는 할당 자체가 실패할 수 있다.

# Huge Pages 크기 확인
cat /proc/meminfo | grep Huge

# 2MB Huge Pages 1024개 할당 (2GB)
echo 1024 > /proc/sys/vm/nr_hugepages

# 영구 설정
echo "vm.nr_hugepages = 1024" >> /etc/sysctl.conf

# Huge Pages 마운트
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

애플리케이션은 Huge Pages 사용 가능 여부에 따라 hugetlbfsmmap()을 이용해 2MB 단위 메모리를 매핑하거나, 일반 할당 경로를 사용한다.

YesNo애플리케이션Huge Pages사용 가능?hugetlbfs에서메모리 할당일반 페이지 사용mmap()으로Huge Pages 매핑2MB 단위로메모리 사용malloc()표준 할당

자동 병합을 맡기는 THP의 조건

THP는 khugepaged가 백그라운드에서 페이지를 살피며 연속된 4KB 페이지를 2MB Huge Page로 병합하는 방식이다. 메모리 압박이 발생하면 다시 분할할 수 있으며, 애플리케이션 코드를 바꾸지 않아도 적용된다.

코드 수정 없이 시스템 전체에 적용하고, 메모리 사용 패턴에 맞춰 활성화와 비활성화를 조정할 수 있다는 점은 장점이다. 반면 khugepaged의 CPU 오버헤드, 단편화에 따른 지연, compaction 중의 일시적 지연은 운영 시 확인할 대상이다. Redis와 MongoDB 같은 특정 워크로드에서는 성능 저하가 발생할 수 있다.

물리 메모리khugepaged메모리 관리자애플리케이션물리 메모리khugepaged메모리 관리자애플리케이션loop[백그라운드 스캔]메모리 압박 시 분할메모리 할당 요청4KB 페이지 할당메모리 반환연속 페이지 검색병합 가능 여부 판단2MB Huge Page로 병합
# THP 상태 확인
cat /sys/kernel/mm/transparent_hugepage/enabled

# THP 활성화
echo always > /sys/kernel/mm/transparent_hugepage/enabled

# THP 비활성화
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# madvise 모드 (애플리케이션이 명시적으로 요청 시에만)
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

오버커밋 환경에서 메모리를 되돌리는 Ballooning

가상화 환경에서는 VM마다 메모리가 독립적으로 할당된다. 호스트의 전체 물리 메모리보다 큰 규모로 할당하는 오버커밋도 가능하지만, VM 간 사용량이 불균형하면 유휴 메모리가 비효율적으로 남는다.

Memory Ballooning은 하이퍼바이저의 신호에 따라 게스트 안의 Balloon 드라이버가 메모리를 잡거나 해제하는 방식이다. 메모리가 부족할 때는 게스트에서 확보한 페이지를 하이퍼바이저에 돌려주고, 하이퍼바이저는 이를 다른 VM에 배정한다. 여유가 생기면 Balloon이 잡고 있던 페이지를 해제해 게스트 OS가 다시 사용할 수 있게 한다.

가상 머신 2가상 머신 1호스트메모리 부족 신호페이지 할당페이지 반환재할당Deflate하이퍼바이저물리 메모리Balloon 드라이버게스트 메모리Balloon 드라이버게스트 메모리

워크로드와 측정 결과로 설정을 고른다

워크로드 Huge Pages THP Ballooning
데이터베이스 권장 (명시적) 비권장 N/A
가상 머신 게스트 내부 선택적 필수
컨테이너 선택적 권장 N/A
Redis/MongoDB 비권장 비활성화 N/A
HPC 권장 권장 N/A

설정 전후에는 Huge Pages 사용량, THP 병합 통계, Ballooning 상태를 함께 확인한다.

# Huge Pages 사용량
grep Huge /proc/meminfo

# THP 통계
cat /sys/kernel/mm/transparent_hugepage/khugepaged/pages_collapsed

# Ballooning 상태 (KVM 기준)
virsh dommemstat vm-name

기준 성능을 먼저 기록하고 최적화 기법을 적용한 뒤 메트릭을 관찰한다. 개선이 확인되면 설정을 유지하고, 그렇지 않으면 되돌린 뒤 다른 기법을 검토한다.

YesNo기준 성능 측정최적화 기법 적용메트릭 모니터링성능 개선?설정 유지설정 롤백다른 기법 시도

데이터베이스 서버에서는 명시적 Huge Pages 설정으로 15-30% 성능 향상과 THP 비활성화에 따른 지연 시간 편차 감소를 기대할 수 있다. 고정된 메모리 크기는 성능 예측에도 도움이 된다.

가상화 플랫폼에서는 Memory Ballooning으로 호스트 메모리 활용률을 30% 높이고, VM 밀도 증가에 따라 하드웨어 비용을 줄일 수 있다. 워크로드 변화에는 동적 메모리 조정으로 대응한다.

컨테이너 환경에서는 THP를 통한 투명한 최적화와 컨테이너별 메모리 제한의 조화가 필요하며, 빠른 시작 시간을 유지하는 방향으로 적용한다.

메모리 최적화Huge PagesTHP가상화하이퍼바이저