Huge page

Ahn9807 (토론 | 기여)님의 2023년 2월 3일 (금) 11:50 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

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의 부분적인 공유