개요

Super Page, Huge Page, Extended Page Table이라고도 불리는 이 기술은 Page Table의 엔트리의 크기를 2MB로 늘릴 수 있는 기술이다. 이를 통해서 Page Table에 대한 Access를 줄이고 TLB 캐시 히트 정도를 늘리는 방법이다. 그러나 만약 데이터베이스처럼 메모리의 여러 공간을 광역적으로 사용하는 경우 이 기술을 사용하면, 오히려 Swap out되는 용량이 증가하여 속도가 저하 될 수도 있는 단점이 있다. 또한 이 기술을 사용하게 되면 internal fragmentation이 증가하게 되어서, 메모리를 효율적으로 사용하지 못한다는 단점과, swap-out을 하게 되면 매우 큰 용량이 swap-out되기 때문에 swapping기술을 효율적으로 사용하지 못한다는 단점이 있다. (이 이유로 리눅스의 huge page는 swap-out되지 않고 메모리에 상주하고 있다.)

단점

  • Latency: Huge page는 Memory zeroing에 요구되는 시간이 길어지기 떄문에 Tail latency가 커지는 문제가 있다.
  • Bloat: Huge page는 할당된 메모리의 많은 부분이 실제로 사용되지 않도록 하여 Internal fragmentation이 증가하는 문제가 있다. 이러한 경우에는 Memory bloating이 생기게 된다.
  • Unfainess: Huge page를 사용하게 되면, 서로 다른 process사이에 영구적이고 큰 메모리 할당의 차이를 가져와, 속도차이가 발생하게 된다.

리눅스 에서의 사용법

  • 명시적으로 hugetlbfs을 사용하는 방법이 있다.
  • Transparent Huge Page를 사용하여 암묵적으로 사용하는 방법이 있다.

Huge Page가 split되는 조건

  • Permission의 부분적인 수정
  • Unmmap의 부분적인 수정
  • Memory의 부분적인 공유