[Oracle] hugepages

prana·2025년 3월 31일
1

ORACLE

목록 보기
94/96

MOS

  • Configuring HugePages (Doc ID 1479908.1)
  • Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)

Docs Hugepages

Hugepages 개요

  • HugePages size는 2MB~256MB
  • Oracle Database의 경우, HugePages를 사용하면 Pages 상태의 OS Maintenance가 경감되어 Translation Lookaside Buffer(TLB) 히트율이 향상된다.

HugePages 메모리 할당 확인

[root@kidjin5 20250331-23:13:03]::[/root]
$ grep Huge /proc/meminfo
AnonHugePages:    223232 kB
ShmemHugePages:        0 kB
FileHugePages:    167936 kB
HugePages_Total:       0 👈 설정된 Hugepages 총개수
HugePages_Free:        0 👈 아직 사용되지 않은 수
HugePages_Rsvd:        0 
HugePages_Surp:        0
Hugepagesize:       2048 kB 👈 한 페이지 크기 (2MB)
Hugetlb:               0 kB

Linux에서의 Hugepages구성

  • $ grep Huge /proc/meminfo
  • /etc/security/limits.conf 파일의 memlock 설정을 변경한다.
    • 이 파일은 리눅스에서 사용자(ex: oracle)가 잠글 수 있는 메모리 양의 상한선을 지정하는 설정이다.
      • soft: 경고 없이 사용 가능한 최대 메모리
      • hard: 절대 초과할 수 없는 최대 메모리
  • memlock 설정은 KB 단위로 지정하고,
  • Lock되는 memory 상한선을 HugePages 메모리가 유효한 경우엔 현행의 RAM 90% 이상으로 설정하고, 무효한 경우엔 145728KB (3GB)이상으로 설정해야 한다.
64GB × 90% = 57.6GB
57.6GB = 57600MB = 57600 × 1024 = **58982400 KB**

→ memlock 설정:
oracle soft memlock 58982400 
oracle hard memlock 58982400
*   soft   memlock    60397977
*   hard   memlock    60397977
-- ex) 6291456KB = 6GB → HugePages로 할당할 수 있는 메모리 한도

memlock을 설정해야 하는 이유

  • HugePages로 메모리를 할당하려면, 해당 메모리를 잠글(lock)수 있어야 하기 때문이다.
  • 리눅스는 기본적으로 프로세스가 사용하는 메모리를 swap하거나 이동할 수 있게 설계되어 있는데, HugePages는 이동 불가능, 고정된 메모리이기 때문에, 잠글 수 있는 크기를 먼저 지정해줘야한다.
    • memlock 값이 낮으면 HugePages가 충분히 설정돼 있어도 사용하지 못할 수 있다.
  • memlock 값을 SGA 요건보다도 크게 설정하는 것도 가능하다.
  • oracle User로서 재로그인 한 후, ulimit -l 명령어로 새로운 memlock 설정을 확인한다.
  • $ grep Hugepagesize /proc/meminfo 값을 확인한다.
  • 현행의 Shared Memory Segment의 hugepages구성의 권장값을 계산하는 script 실행 방법

HugePages 개념

  • Linux에서 메모리 페이지를 효율적으로 관리하기 위한 기능
  • 기본적으로 Linux는 메모리를 작은 단위의 페이지 (보통4kb)로 나눠서 관리
  • 시스템 메모리가 클수록, 작은 페이지를 엄청 많이 관리해야 하므로, 페이지 테이블이 커지고, 오버헤드가 커진다.
  • 그래서 고성능 시스템에서는 **큰 페이지(HugePages, 보통 2MB 또는 1GB)를 사용해 성능을 개선한다.

USE_LARGE_PAGES 파라미터

  • Oracle 11.2.0.2부터 추가된 파라미터로, HugePages 사용 여부를 설정하는 데 사용된다.

TRUE

  • HugePages가 있으면 사용, 없으면 Small Pages(4kb) 사용

FALSE

  • HugePages를 전혀 사용하지 않음

ONLY

  • HugePages가 충분하지 않으면 DB를 시작하지 않음 (엄격한 모드)
  • 전체 메모리에 대해 hugepages를 사용할 수 없는 경우 인스턴스를 시작하지 않음을 의미한다. (메모리 부족 방지 위해)

메모리 관리 방식

  • ASMM: SGA_TARGET: O
  • AMM: MEMORY_TARGET: X (Hugepages 사용 못함)
    • 이 둘도 조금 정리가 필요하다**

0개의 댓글