TL;DR
- CRAM은 압축 데이터를 스왑 대신 메모리 안에 두는 리눅스 메모리 압축 모델로, 읽기 전용 조건에서 ZRAM보다 최대 452배 빠른 성능을 제시함.
- CRAM은 블록 장치처럼 동작하는 대신 전용 NUMA 노드를 사용하고, 리눅스의 메모리 관리 기능인 마이그레이션과 벌루닝을 활용함.
- ‘치킨 비트(Chicken Bit)’는 할당을 관리하는 동안 리눅스가 CRAM 사용을 중단하도록 해 쓰기 요청이 할당 능력을 앞지르는 상황에서 연쇄 실패를 막는 장치임.
- 쓰기 비중이 20%인 최악의 테스트 조건에서도 CRAM은 ZRAM보다 5.4배 빠르지만, 쓰기에는 페이지 폴트와 폴리오 마이그레이션이 필요함.
- 압축 데이터가 차지하는 양을 예측하고 논리 메모리 용량을 관리하는 문제는 아직 해결되지 않은 연구 과제이며, 구현 관련 질문이 남아 있음.
CRAM의 접근 방식
- CRAM은 압축 데이터를 스왑에 두지 않고 메모리 안에 유지하는 새로운 메모리 압축 모델이며, ZRAM보다 최대 452배 빠른 성능을 제시함.
- 리눅스의 대표적인 메모리 압축 방식인
zswap과 ZRAM은 모두 스왑 계층 기능임. CRAM은 압축 메모리를 스왑으로 처리하지 않는 접근을 취함. - Meta의 Gregory Price와 팀이 CRAM을 구상함. 개발을 촉발한 핵심 관점은 압축 자체의 성능 비용은 작고, 성능 저하는 주로 페이지 폴트와 스왑 동작에서 발생한다는 것임.
- CRAM은 블록 장치인 것처럼 동작하는 대신 전용 NUMA 노드, 즉 가상의 CPU에 해당하는 구성을 사용함. 이를 통해 리눅스가 마이그레이션과 벌루닝을 비롯한 기존 메모리 의미 체계를 이용해 CRAM을 관리함.
할당 관리와 치킨 비트
- 압축률은 데이터 종류에 따라 크게 달라짐. 0이 많이 들어 있는 데이터는 잘 압축되지만, 이미 압축된 데이터는 압축되지 않을 수 있음.
- 압축된 메모리에서 논리적 램 용량을 어떻게 산정하고 메모리가 언제 고갈될지 어떻게 판단할지는 아직 해결되지 않은 문제이며, 발표 자료에서도 진행 중인 연구 분야로 제시됨.
- ‘치킨 비트’는 리눅스가 메모리 할당을 관리하는 동안 CRAM 사용을 멈추도록 하는 장치임. 쓰기 요청이 CRAM의 할당 능력을 앞지를 때 발생할 수 있는 연쇄 실패, 발표에서 ‘포이즌 스톰’이라고 부른 상황을 막는 한 가지 방법임.
성능 결과와 쓰기 비용
- CRAM은 램에 저장되고 램으로 취급되며, 캐시 라인과 바이트 단위로 접근할 수 있음. 따라서 읽기 전용으로 사용할 때는 하드웨어 오프로드 압축 비용만 추가되며, 제작자는 이를 ‘DRAM 속도’라고 표현함.
- 읽기 성능 그래프는 로그 척도임. 최악의 조건에서 CRAM은 초당 4억 8,900만 회의 작업을 수행하고, ZRAM은 초당 110만 회를 수행함.
- 쓰기를 활성화한 경우에도, 쓰기 비중이 20%인 최악의 테스트 조건에서 CRAM은 ZRAM보다 5.4배 빠름. 이는 읽기 전용 조건의 452배보다 크게 낮지만 여전히 큰 성능 향상임.
- 압축된 데이터에 직접 쓰면 데이터가 손상될 수 있으므로, 쓰기에는 페이지 폴트가 발생하고 폴리오를 원래 NUMA 도메인으로 되돌리는 마이그레이션이 필요함. 이 과정이 쓰기 조건에서 성능이 크게 떨어지는 이유임.
리눅스 생태계에서의 활용 가능성
- CRAM의 설명은 완전히 정확하지 않을 수 있음. 발표 현장에 참석하지 않고 세션 정보 사이트에 공개된 슬라이드를 바탕으로 내용을 파악한 것임.
- CRAM은 Meta Platforms에서 시작된 작업인 만큼 대형 리눅스 서버가 주요 대상일 수 있음. 다만 ZRAM과
zswap은 Steam Deck처럼 자원이 제한된 기기까지 리눅스 생태계 전반에서 사용되며, 여러 배포판에서 둘 중 하나를 기본으로 활성화함. - 남은 구현 관련 질문이 해결되면 CRAM이 일부 기기에 상당한 성능 향상을 제공하고 리눅스 커널에 포함될 가능성이 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요