hugepages 개념과 설정 방법

2024. 2. 22. 10:56Server의 세계/Oracle 관리실무

hugepage 개념

 

-일반적인 컴퓨팅 시스템은 물리적 메모리 크기를 극복하기 위해 가상메모리 기법을 사용

(가상메모리 기법을 통해 물리 메모리보다 메모리가 필요한 에플리케이션을 구동할 있다. 가상 메모리 주소를 물리적 메모리 주소로 변환해주는 것이 MMU(Memory Management Unit) 이고 물리적으로 MMU CPU 내부에 있다.)

 

출처: https://linux.systemv.pe.kr/tag/hugepage-%EB%9E%80

 

-MMU 내부에 Page Table TLB 있다. CPU TLB -> Page table 순서로 찾게 된다.

-리눅스 시스템의 경우 보통 4k로 되어있으며 대용량 메모리를 장착한 시스템의 효율적인 Page Table 관리를 위해 Kernel 2.6부터는 HugePage 기술이 도입되어 더 큰 Page 크기(예 : 2M ~ 256M)로 관리 할 수 있게 되었다.

 

hugepage의 설정의 목적

적절한 hugepage 설정을 통해 TLB hit율을 높일 수 있다. 예를 들어 2MB마다 1 hugepage 4KB보다 페이지 테이블

기도 줄어들고 결국 TLB 캐쉬된 페이지의 HIT 높일 수 있다.

 

 

Hugepage 계산 방법

 

1. MOS Doc. 401749.1 에 있는 권장 HugePage 값을 확인하는 스크립트 확인 

 

hugepage script.txt
0.00MB

 

2. sysdba, sysasm에서 sga 값 확인 후 계산

 

오늘은 2번 방법으로 진행


 

hugepage 설정 순서

 

 

[사전 확인]

 

1. meminfo 확인

# cat /proc/meminfo | grep Huge

Hugepagesize:       2048 kB

 

2. 실행중인 프로세스 확인

ps -ef | grep pmon

# ps -ef | grep pmon

oracle      5178       1  0 14:45 ?        00:00:00 asm_pmon_+ASM1

oracle      5664       1  0 14:46 ?        00:00:00 ora_pmon_test1

root       97012   95828  0 17:18 pts/1    00:00:00 grep --color=auto pmon

 

3. sga 확인

<DB>

$ ss

sql> show parameter sga

sga_target                           big integer 151G

 

<ASM>

$ sa

sql> show parameter sga

sga_target                           big integer 3G

 

4. show parameter memory_target; <-AMM 사용시 huge Page 적용 불가

SQL> show parameter memory_target;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

memory_target                        big integer 0

 

 

[hugepages 설정]

 

SGA / Hugepagesize = Number Hugepages(MB)

(DB + ASM)

 

(151+3)*1024/2 = 78,848 <---충분치 않으면 db 안올라갈 있다. 여분을 위해 100-200정도 더해준다.

그래서 78,948로 설정해줄 예정.

 

#vi /etc/sysctl.conf

vm.nr_hugepages = 78,948

 

#sysctl -p

 

 

#su - oracle

$ ss

 

SQL> show parameter use_large_pages; <-기본값 true 확인

 

SQL> alter system set use_large_pages='ONLY' scope=spfile;  <- value true only 변경

(리눅스 os상에 hugepages값이 세팅되어 있지 않거나 충분히 크지 않으면 oracle DB startup 안된다. 확실히 hugepages 이용)

 

node 2에도 동일하게 적용한다.

 

#srvctl stop database -d test

 

#srvctl start database -d test