ZRAM과 ZSWAP의 근본적 차이
ZRAM과 ZSWAP은 모두 CPU 사이클과 I/O 성능 간의 트레이드오프를 기반으로 설계되었지만, 메모리 계층 구조에서 차지하는 위치가 정반대입니다. ZRAM은 /dev/zram<id>라는 독립된 블록 디바이스를 생성하며, 이곳에 기록되는 페이지는 메모리 내에서 압축되어 저장됩니다. 반면 ZSWAP은 기존의 물리 스왑 디바이스 앞단에 위치하는 경량 압축 캐시로, 스왑 아웃되는 페이지를 중간에 가로채어 RAM 기반 메모리 풀에 압축 저장합니다.
ZRAM의 아키텍처와 메모리 관리
ZRAM은 zsmalloc 메모리 할당기를 사용하지 않고, 자체적인 메모리 관리 메커니즘으로 압축 데이터를 직접 관리합니다. 여러 압축 알고리즘(LZ4, LZO, ZSTD 등)을 지원하며, 각 알고리즘의 매개변수를 개별 설정할 수 있습니다. ZRAM 디바이스가 가득 차면 더 이상 새로운 페이지를 수용할 수 없으므로, 관리자는 disksize와 mem_limit을 사전에 설정해야 합니다. 또한 backing device 기능으로 압축할 수 없거나 유휴 페이지를 물리 스토리지로 빼낼 수 있습니다.
ZSWAP의 설계: Frontswap과 LRU 정책
ZSWAP은 zsmalloc을 활용하여 압축 메모리 풀을 관리하며, frontswap API를 통해 스왑 아웃 경로에 투명하게 개입합니다. 풀의 크기 제한에 도달하면 LRU 기준에 따라 압축되지 않은 페이지를 백킹 스왑 디바이스로 쓰기 백(writeback)합니다. 이로 인해 ZSWAP의 메모리 풀은 동적으로 성장하고 축소되며, 페이지 폴트 시 압축된 캐시에서 먼저 복원을 시도합니다. accept_threshold_percent 파라미터를 통해 히스테리시스를 구현하여, 풀이 가득 찬 후 재투입 지점을 제어할 수 있습니다.