hugepage setting 방법

HugePage 란?

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

상이한 두 메모리를 매핑하기 위해 Page Table이 존재하고 Page 단위로 관리됨

리눅스 시스템의 경우 보통 4k로 되어있음

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

 

 

HugePage 사용 시 장

1. Normal Page와는 다르게 HugePage는 Swap되지 않음. 따라서 Page-in/.Page-Out의 Overhead가 없음

2. HugePage는 상대적으로 적은 수의 Meta 정보로 좀 많은 물리적 메모리를 Cover하므로 CPU내의 Buffer(=Translation Lookaside Buffer, TLB)좀 더 많은 Page Entry를 보관할 수 있어 Page Hit율이 높아짐

3. Page Table에서 관리하는 물리적 메모리의 Entry 개수가 줄어들고 더 적은 메모리 공간을 차지함

따라서 오라클 관점에서 보면 오라클 프로세스의 계산이나 PGA에 좀 더 많은 메모리가 제공됨

4. Normal Page의경우, 50GB의 메모리를 관리하기 위해서는 

1,300 만개의 page(13,107,200 = 50 * 1024* 1024 KB / 4 KB)가 유지되어야함

HugePages를 사용할 경우 25,600 개의 Page가 관리되므로 

메모리 관리을 위한 Overhead가 줄어들고 자원사용율도 절약됨

5. 평균적으로 20~30% 성능향상이 있을수 있음

 

 

[oracle@pncssdbsuy01 ~]$ cat /proc/meminfo | grep Huge
AnonHugePages:         0 kB
HugePages_Total:   30021
HugePages_Free:       39
HugePages_Rsvd:       36
HugePages_Surp:        0
Hugepagesize:       2048 kB

 

Recommended setting: vm.nr_hugepages = 30090

 

hugepages셋팅 확인 

hugepages_settings.sh
0.00MB

USE_LARGE_PAGES

PropertyDescription
Parameter type String
Syntax USE_LARGE_PAGES = { TRUE | FALSE | ONLY }
Default value TRUE
Modifiable No
Basic No
Oracle RAC Multiple instances can use different values

사이트에서 보통 only로 설정함 

 

. Check Hugepagesize

In our example we use a x86_64 Red Hat Enterprise Linux Server. So by default hugepagesize should be set to 2 MB:

grep Hugepagesize /proc/meminfo

Hugepagesize:       2048 kB

4. Calculate Hugepages

For the calculation of the number of hugepages there is a easy way:

SGA / Hugepagesize = Number Hugepages

Following our example:

41943040 / 2048 = 20480