Linux HugePages란? 대용량 메모리 페이지의 원리와 성능 향상 방법

Linux 시스템에서 메모리는 일정한 크기의 페이지(Page) 단위로 관리됩니다. 일반적으로 x86-64 환경에서는 하나의 페이지 크기가 4KB입니다.

하지만 대용량 데이터베이스나 가상화 환경에서는 수십 GB에서 수백 GB의 메모리를 사용하는 경우가 많습니다. 이때 4KB 페이지만 사용하면 너무 많은 페이지를 관리해야 하므로 CPU 오버헤드와 메모리 관리 비용이 증가합니다.

이를 해결하기 위해 사용하는 기술이 HugePages입니다.

HugePages는 일반 페이지보다 훨씬 큰 메모리 페이지를 사용하여 TLB(Translation Lookaside Buffer) 효율을 높이고 메모리 관리 비용을 줄여 시스템 성능을 향상시키는 기능입니다.

이번 글에서는 HugePages의 개념과 동작 원리, 장단점, 설정 방법, 그리고 실무 활용 사례를 자세히 알아보겠습니다.

HugePages란?

HugePages는 기본 페이지(4KB)보다 큰 메모리 페이지를 사용하는 Linux Kernel 기능입니다.

대표적인 페이지 크기는 다음과 같습니다.

페이지 종류크기
일반 페이지4KB
HugePage2MB
HugePage1GB (환경에 따라 지원)

페이지 크기가 커질수록 관리해야 하는 페이지 수가 줄어듭니다.

일반 페이지와 HugePages 비교

예를 들어 1GB 메모리를 사용하는 경우를 살펴보겠습니다.

일반 페이지 사용

1GB

↓

4KB 페이지

↓

약 262,144개 페이지

HugePages(2MB) 사용

1GB

↓

2MB 페이지

↓

512개 페이지

관리해야 하는 페이지 수가 크게 감소합니다.

HugePages가 필요한 이유

메모리 페이지가 많아질수록 다음과 같은 비용이 발생합니다.

  • 페이지 테이블 증가
  • TLB Miss 증가
  • 주소 변환 비용 증가
  • CPU 오버헤드 증가

HugePages를 사용하면 이러한 비용을 줄일 수 있습니다.

특히 메모리를 많이 사용하는 애플리케이션에서 효과가 큽니다.

TLB와 HugePages

CPU는 메모리 주소 변환을 빠르게 수행하기 위해 TLB(Translation Lookaside Buffer) 를 사용합니다.

일반 페이지를 사용할 경우

TLB

↓

4KB 페이지

↓

자주 교체됨

HugePages를 사용할 경우

TLB

↓

2MB 페이지

↓

더 많은 메모리 범위 저장

즉, 같은 개수의 TLB 엔트리로 더 넓은 메모리 공간을 관리할 수 있습니다.

HugePages의 장점

HugePages의 주요 장점은 다음과 같습니다.

  • TLB Miss 감소
  • CPU 성능 향상
  • 페이지 테이블 크기 감소
  • 메모리 관리 효율 증가
  • 데이터베이스 성능 향상
  • 가상화 성능 향상

Oracle Database, PostgreSQL, VMware, KVM 등에서 많이 사용됩니다.

HugePages의 단점

모든 환경에서 HugePages가 유리한 것은 아닙니다.

단점은 다음과 같습니다.

  • 메모리 낭비 가능성
  • 동적 할당이 어려움
  • 설정이 필요함
  • 작은 애플리케이션에서는 효과가 적음

따라서 서버 특성에 맞게 적용해야 합니다.

현재 HugePages 확인

현재 HugePages 상태는 다음 명령으로 확인할 수 있습니다.

cat /proc/meminfo | grep Huge

예시

HugePages_Total: 128

HugePages_Free: 64

HugePages_Rsvd: 8

Hugepagesize: 2048 kB

주요 항목

  • HugePages_Total : 전체 HugePages 개수
  • HugePages_Free : 사용 가능한 HugePages
  • HugePages_Rsvd : 예약된 HugePages
  • Hugepagesize : 페이지 크기

HugePages 설정

일시적으로 HugePages를 128개 설정하려면 다음 명령을 사용합니다.

echo 128 | sudo tee /proc/sys/vm/nr_hugepages

영구적으로 적용하려면 /etc/sysctl.conf에 다음 내용을 추가합니다.

vm.nr_hugepages = 128

설정 적용

sudo sysctl -p

Transparent HugePages(THP)

Linux는 Transparent HugePages(THP) 기능도 제공합니다.

THP는 커널이 자동으로 HugePages를 사용하도록 관리하는 기능입니다.

현재 상태 확인

cat /sys/kernel/mm/transparent_hugepage/enabled

예시

[always] madvise never

옵션 설명

  • always : 항상 사용
  • madvise : 애플리케이션 요청 시 사용
  • never : 사용 안 함

일부 데이터베이스는 THP 비활성화를 권장합니다.

실무에서 자주 사용하는 명령어

HugePages 확인

cat /proc/meminfo | grep Huge

Transparent HugePages 확인

cat /sys/kernel/mm/transparent_hugepage/enabled

현재 메모리 사용량

free -h

커널 파라미터 확인

sysctl vm.nr_hugepages

설정 변경

sudo sysctl -w vm.nr_hugepages=128

실무 사례

예를 들어 Oracle Database 서버에서 CPU 사용률이 높고 메모리 접근 성능이 낮다면 HugePages 설정을 확인하는 것이 좋습니다.

다음 순서로 점검합니다.

  1. cat /proc/meminfo | grep Huge로 HugePages 사용 여부 확인
  2. cat /sys/kernel/mm/transparent_hugepage/enabled로 THP 상태 확인
  3. 데이터베이스 권장 설정과 비교
  4. 필요한 HugePages 수 계산
  5. sysctl을 이용해 설정 적용
  6. 재부팅 후 정상 적용 여부 확인

대규모 데이터베이스 서버에서는 HugePages 적용만으로도 메모리 관리 효율과 성능이 향상되는 경우가 있습니다.

자주 묻는 질문

HugePages와 Transparent HugePages는 같은 것인가요?

아닙니다. HugePages는 관리자가 미리 메모리를 예약하여 사용하는 방식이며, Transparent HugePages는 커널이 자동으로 HugePages를 적용하는 기능입니다.

HugePages는 모든 서버에서 설정해야 하나요?

아닙니다. 일반적인 웹 서버나 소규모 애플리케이션에서는 큰 효과가 없을 수 있습니다. 메모리를 대량으로 사용하는 데이터베이스나 가상화 서버에서 주로 활용됩니다.

HugePages를 너무 많이 설정하면 어떻게 되나요?

필요 이상으로 많은 HugePages를 예약하면 일반 메모리로 사용할 수 있는 공간이 줄어들어 오히려 메모리 활용도가 떨어질 수 있습니다. 따라서 애플리케이션 요구 사항에 맞게 적절한 크기를 설정해야 합니다.

마무리

HugePages는 Linux Kernel의 메모리 관리 성능을 향상시키기 위한 중요한 기능입니다. 일반 페이지보다 큰 메모리 블록을 사용하여 TLB Miss를 줄이고 CPU 오버헤드를 감소시키며, 특히 데이터베이스와 가상화 환경에서 뛰어난 성능 향상을 제공합니다. HugePagesTransparent HugePages의 차이를 이해하고 적절하게 설정하면 메모리 집약적인 서버의 성능을 더욱 효과적으로 최적화할 수 있습니다.

댓글 남기기