NUMA 페이지 이동의 혁신적 도약
초록
본 논문은 사용자 공간에서 페이지를 비동기적으로 이동시키는 새로운 메커니즘 page_leap()을 제안한다. 자동 NUMA 밸런싱과 기존 시스템 콜 move_pages()가 갖는 제어성·신뢰성·성능 한계를 극복하고, 풀링 메모리와 대·소 페이지 모두를 지원하며, 동시 쓰기 상황에서도 정확히 마이그레이션을 보장한다. 실험 결과, page_leap()은 다양한 워크로드에서 기존 방법보다 2배 이상 빠른 마이그레이션 시간을 기록한다.
상세 분석
page_leap()은 가상‑물리 메모리 분리를 이용해 사용자 공간에서 직접 페이지 재배치를 수행한다는 점에서 기존 커널 중심 접근과 근본적으로 차별화된다. 먼저 물리 레벨에서 소스 NUMA 영역의 페이지 내용을 목적 영역의 풀 메모리로 memcpy로 복사하고, 이후 mmap을 이용해 가상 주소를 새로운 물리 페이지에 원자적으로 재매핑한다. 이 과정에서 mprotect로 대상 영역을 읽기 전용으로 설정하고, 쓰기 시 발생하는 세그멘테이션 폴트를 핸들러가 가로채어 해당 페이지를 ‘dirty’ 상태로 표시한다. 이후 복사 완료 직전에 dirty 여부를 검사해, dirty이면 재시도 큐에 넣고 영역을 더 작은 조각으로 분할한다. 이렇게 하면 동시 쓰기에도 데이터 손실 없이 마이그레이션을 보장한다.
또한 page_leap()은 초기 영역 크기만 사용자가 지정하면, 실행 중에 dirty가 발생할 때마다 자동으로 영역을 축소해 워크로드의 수정 압력에 적응한다. 이는 페이지 단위 고정 마이그레이션을 강요하는 move_pages()와 달리, 작은 영역은 시스템 콜 오버헤드를 최소화하고, 큰 영역은 불필요한 재시도를 방지한다는 장점을 제공한다.
성능 측면에서는, 동일 조건에서 memcpy(새 메모리) 대비 move_pages()가 18%82% 정도의 오버헤드를 보이는 반면, page_leap()은 풀링 메모리를 활용해 복사와 매핑을 동시에 진행함으로써 거의 memcpy 수준에 근접한다. 특히 64 KB16 MB 정도의 초기 영역을 선택하면, 시스템 콜 비용과 재시도 비용 사이의 균형이 최적화되어 전체 마이그레이션 시간이 절반 이하로 단축된다.
마지막으로, 자동 NUMA 밸런싱은 원격 접근이 적은 순간에만 마이그레이션을 수행해 실시간 워크로드에서는 효과가 제한적이다. 반면 page_leap()은 사용자 주도형 트리거와 비동기 실행을 통해 언제든지 필요한 시점에 마이그레이션을 수행할 수 있다. 이러한 설계는 데이터베이스 시스템처럼 높은 동시성·대용량 메모리를 요구하는 애플리케이션에 특히 유리하다.
댓글 및 학술 토론
Loading comments...
의견 남기기