최근 리눅스 패치는 프로세스 간 페이지 테이블 항목(Page Table Entries, PTE)을 공유할 수 있는 메커니즘을 도입하여 상당한 RAM 절약 효과를 가져올 수 있습니다. 전통적으로 메모리 페이지를 공유하는 각 프로세스는 자체 PTE를 필요로 하여 메모리 자원을 소모합니다. 예를 들어, x86_64 아키텍처에서 각 PTE는 8바이트입니다. 수천 개의 프로세스가 동일한 메모리 페이지를 공유하는 경우, PTE로 소모되는 메모리는 상당해질 수 있습니다. 한 사례 연구에서는 300GB의 시스템 글로벌 영역(System Global Area, SGA)을 가진 데이터베이스 서버가 1500명 이상의 클라이언트가 이 SGA를 공유하려 할 때 메모리 부족 상태에 직면했으며, 총 메모리가 512GB임에도 불구하고 발생했습니다. 모든 프로세스가 SGA의 모든 페이지를 매핑한다면, PTE만으로도 878GB 이상의 메모리가 필요합니다.
새로운 패치 시리즈는 사용자 공간 프로세스가 msharefs라는 새로운 인메모리 파일 시스템을 통해 PTE 공유를 선택할 수 있도록 합니다. 이 파일 시스템은 공유 영역을 나타내는 파일을 생성할 수 있게 하여, 이 영역을 매핑하는 모든 프로세스가 공유 PTE를 활용할 수 있도록 합니다. msharefs에서 파일이 생성되면, 공유 페이지 테이블과 가상 메모리 영역(Virtual Memory Areas, VMAs)을 관리하기 위한 새로운 호스트 메모리 관리 구조(mm 구조체)가 설정됩니다. 구현에는 공유 메모리 매핑을 나타내는 VM 플래그(VM_MSHARE)가 포함되어 있으며, 필요할 때 공유 페이지 테이블을 프로세스 페이지 테이블에 연결하여 결함 처리를 최적화합니다. 이 혁신은 메모리 페이지를 공유하는 프로세스 수가 많은 환경에서 메모리 효율성을 크게 향상시킬 수 있습니다.
* 이 글은
phoronix.com의 기사를 요약한 것입니다. 전체 기사의 내용은
이곳에서 확인하실 수 있습니다.