본문 바로가기

쿠분투

ZRAM을 사용하여 램을 효율적으로 관리하자

*본 글은 Gemini를 활용하여 작성하였습니다.

쿠분투(Kubuntu)에서 zram을 설정하는 것은 저사양 PC뿐만 아니라 고사양 시스템에서도 체감 성능을 높이는 아주 좋은 방법이다. zram은 램의 일부를 압축된 스왑(Swap) 영역으로 사용하여, 데이터가 느린 하드디스크나 SSD로 넘어가기 전에 메모리 안에서 더 효율적으로 처리되게 한다. zram 설치 시 얻을 수 있는 성능 향상은 다음과 같다.


1. 가용 메모리 용량의 실질적 확대 (S/W적 증설)

  • 원리: 메모리에 들어오는 데이터를 실시간으로 압축(보통 2:1 ~ 4:1 비율)하여 저장한다.
  • 효과: 실제 장착된 물리 램 용량보다 약 1.5배 ~ 2배 더 많은 데이터를 수용할 수 있다. 8GB 램이라면 약 12~14GB 수준의 멀티태스킹이 가능해진다.

2. 시스템 '프리징(멈춤)' 현상 방지

  • 원리: 기존 방식(Disk Swap)은 램이 꽉 차면 느린 SSD/HDD에 데이터를 쓰느라 시스템이 일시적으로 얼어붙는다.
  • 효과: zram은 모든 처리를 램 내부에서 해결하므로, 메모리 임계치에 도달해도 버벅임 없이 부드러운 전환이 유지된다.

3. 입출력(I/O) 속도의 압도적 차이

  • 속도 비교: NVMe SSD 스왑보다 최소 5배에서 10배 이상 빠르다.
  • 지연 시간: 밀리초(ms) 단위의 디스크 지연 시간을 마이크로초(μs) 단위로 단축시켜, 무거운 프로그램을 실행하거나 창을 전환할 때 체감 성능이 극대화된다.

4. 하드웨어 수명 연장 (SSD 보호)

  • 효과: 디스크에 수시로 데이터를 쓰고 지우는 스왑 작업을 최소화하여 SSD의 쓰기 수명(TBW)을 획기적으로 아껴줍니다. 특히 수명 제한이 있는 저가형 SSD나 노트북 사용자에게 필수적이다.

*zram의 설치 방법은 다음과 같다.

(1) 터미널을 열고 다음 명령어를 입력한다. (설치 방법이 복잡하면 zram-tools만 설치해도 된다.)

sudo apt install zram-tools

(2) 다음과 같이 입력해 zram이 작동하고 있는지 확인한다. 명령어를 입력했을 때 /dev/zram0 같은 항목이 나타나면 성공이다.

zramctl

(3) zram이 최적의 성능을 내게 하기 위해 설정을 변경한다.

kate /etc/default/zramswap
  • ALGO=zstd: 가장 압축률과 속도 밸런스가 좋은 알고리즘이다.
  • PERCENT=60: 전체 RAM의 60% 정도를 zram으로 할당하는 것이 권장된다. (실제 램을 점유하는 것이 아니라, 필요할 때 압축해서 쓸 수 있는 '최대치'를 의미한다.)
  • PRIORITY=100: 기존 디스크 스왑보다 먼저 사용되도록 우선순위를 높인다.
ALGO=zstd
PERCENT=60
PRIORITY=100

(4) 시스템이 데이터를 더 적극적으로 zram에 넣도록 설정한다.

kate /etc/sysctl.d/99-zram-optimization.conf
  • swappiness=100: 데이터를 최대한 빨리 압축 스왑(zram)으로 보낸다.
  • page-cluster=0: zram은 디스크와 달리 물리적인 탐색 시간이 없으므로 한 번에 한 페이지만 읽도록 설정해 지연 시간을 줄인다.
vm.swappiness = 100
vm.vfs_cache_pressure = 500
vm.page-cluster = 0

(5) 다음과 같이 입력해 설정이 잘 적용이 되었는지 확인한다.

sudo sysctl --system

(6) 모든 설정이 끝났으므로 zram이 얼마나 잘 작동하고 있는지 확인하기 위해 다음의 명령어를 입력한다.

zramctl

출력 내용 중 DISKSIZE는 설정한 최대 용량, DATA는 현재 들어있는 데이터 양, COMPR은 압축된 후의 실제 점유 용량을 나타낸다. 보통 3~4배 정도의 압축 효율을 보여준다.


*쿠분투 사용자에게는 zram-generator가 좀 더 나을 수 있다.

 
zram-tools
zram-generator
작동 방식
Shell 스크립트 기반
Rust 언어로 작성된 바이너리
실행 시점
부팅 후 서비스 로드 시 실행
systemd가 필요한 시점에 즉시 생성
리소스 점유
스크립트 실행 오버헤드 미세하게 존재
거의 없음 (네이티브 바이너리)
유연성
설정이 쉽고 직관적임
매우 정밀한 설정 가능

(1) 기존에 설치한 zram-tools를 삭제한다.

sudo apt remove --purge zram-tools

(2) zram-generator를 사용하기 위해 아래의 같이 입력해 설치한다.

sudo apt install systemd-zram-generator

(3) 설정 파일을 생성하고 다음의 내용을 입력한다.

kate /etc/systemd/zram-generator.conf

*물리적 램의 50%를 zram으로 할당하고, 압축 효율이 매우 좋고 속도가 준수한 알고리듬인 zstd를 사용한다. swap-priority는 기존 디스크 스왑보다 zram 스왑을 먼저 사용되도록 우선순위를 높인다.​

[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100

(4) 설정을 변경하였으므로, 아래의 명령어를 실행하여 데몬과 zram 스왑을 다시 시작한다.

sudo systemctl daemon-reload && sudo systemctl restart "dev-zram*.swap"

(5) zram이 얼마나 잘 작동하고 있는지 확인하기 위해 다음의 같이 입력한다.

zramctl