리눅스 메모리 압축 Zswap과 Zram 이해하기

컴퓨터의 메모리(RAM)는 프로그램 실행에 필수적인 공간입니다. 하지만 RAM 용량이 부족하면 시스템 성능이 저하되는 스와핑(Swapping) 현상이 발생합니다. 스와핑은 RAM의 내용을 느린 저장 장치(HDD/SSD)로 옮겨 RAM 공간을 확보하는 방식인데, 이 과정에서 속도 저하가 발생합니다. Zswap과 Zram은 이러한 스와핑의 단점을 보완하기 위해 등장한 리눅스 커널 기능입니다. RAM의 내용을 압축하여 RAM 내부에 저장함으로써, 스와핑 횟수를 줄이고 시스템 성능을 향상시키는 것을 목표로 합니다.

Zswap과 Zram의 기본 개념

Zswap과 Zram은 모두 메모리 압축 기술이지만, 작동 방식에 약간의 차이가 있습니다.

    • Zswap: 스와핑 영역으로 이동하기 전에 메모리 페이지를 압축합니다. 압축된 페이지는 RAM에 저장되며, 필요한 경우 압축 해제되어 사용됩니다. 스와핑이 필요한 경우, 압축된 페이지가 먼저 스왑 영역으로 이동하게 됩니다.
    • Zram: RAM의 일부를 할당하여 압축된 블록 장치로 사용합니다. 스와핑이 필요한 경우, 메모리 페이지는 Zram에 압축되어 저장됩니다. Zram은 RAM을 사용하여 스왑 공간을 에뮬레이션하는 방식입니다.

Zswap과 Zram의 중요성

Zswap과 Zram은 특히 다음과 같은 상황에서 유용합니다.

    • RAM 용량이 제한적인 시스템: 랩탑, 태블릿, 임베디드 시스템 등 RAM 용량이 부족한 환경에서 성능 향상을 기대할 수 있습니다.
    • 잦은 스와핑 발생 시스템: RAM 사용량이 많아 스와핑이 빈번하게 발생하는 시스템에서 스와핑으로 인한 성능 저하를 완화할 수 있습니다.
    • SSD 수명 연장: 스와핑 횟수를 줄여 SSD의 수명을 연장하는 데 기여할 수 있습니다.

Zswap 활용 방법

Zswap 활성화 및 설정

Zswap은 커널 모듈로 제공되며, 시스템에 따라 기본적으로 활성화되어 있을 수도 있습니다. 활성화 여부를 확인하고, 필요한 경우 활성화하는 방법은 다음과 같습니다.

    • Zswap 활성화 확인:

      터미널에서 다음 명령어를 실행하여 Zswap이 활성화되었는지 확인합니다.

      cat /sys/module/zswap/parameters/enabled

      결과 값이 ‘Y’이면 활성화, ‘N’이면 비활성화된 상태입니다.

    • Zswap 활성화 (필요한 경우):

      다음 명령어를 사용하여 Zswap을 활성화합니다 (root 권한 필요).

      sudo modprobe zswap

      영구적으로 활성화하려면, `/etc/modules-load.d/zswap.conf` 파일을 생성하고 `zswap`을 추가합니다.

    • Zswap 설정 변경:

      Zswap의 동작 방식은 여러 설정을 통해 변경할 수 있습니다. 대표적인 설정은 다음과 같습니다.

      • compressor: 압축 알고리즘을 지정합니다 (lzo, lz4, zstd 등).
      • max_pool_percent: Zswap이 사용할 수 있는 최대 RAM 비율을 지정합니다.
      • zpool: 압축된 데이터를 저장할 메모리 풀을 지정합니다 (zbud, zbud_mutexed 등).

    설정 변경은 `/sys/module/zswap/parameters/` 디렉토리 내의 해당 파일을 수정하여 적용할 수 있습니다 (root 권한 필요). 예를 들어, 압축 알고리즘을 lz4로 변경하려면 다음 명령어를 실행합니다.

    sudo echo lz4 > /sys/module/zswap/parameters/compressor

    영구적으로 변경하려면, `/etc/sysctl.conf` 또는 `/etc/sysctl.d/` 디렉토리에 설정 파일을 생성하고 해당 설정을 추가합니다. 예를 들어, `/etc/sysctl.d/99-zswap.conf` 파일에 다음과 같이 설정할 수 있습니다.

    vm.zswap.compressor=lz4

    설정 후에는 `sudo sysctl -p` 명령어를 실행하여 변경 사항을 적용합니다.

Zswap 성능 모니터링

Zswap의 성능을 모니터링하여 적절한 설정을 찾는 것이 중요합니다. 다음 명령어를 사용하여 Zswap 관련 통계를 확인할 수 있습니다.

cat /sys/kernel/debug/zswap/

주요 통계 항목은 다음과 같습니다.

    • stored_pages: Zswap에 저장된 페이지 수
    • pool_limit: Zswap이 사용할 수 있는 최대 페이지 수
    • written_back_pages: 스왑 영역으로 쓰여진 페이지 수
    • same_filled_pages: 동일한 내용으로 채워진 페이지 수 (중복 제거 효과 확인)

Zram 활용 방법

Zram 활성화 및 설정

Zram은 RAM의 일부를 사용하여 압축된 스왑 공간을 생성합니다. 활성화 및 설정 방법은 시스템에 따라 약간 다를 수 있지만, 일반적으로 다음과 같은 단계를 따릅니다.

    • Zram 활성화 확인:

      Zram 장치가 존재하는지 확인합니다. 일반적으로 `/dev/zram0`과 같은 장치 파일이 생성됩니다.

      ls /dev/zram*

    • Zram 활성화 (필요한 경우):

      Zram을 활성화하는 방법은 여러 가지가 있습니다. systemd 기반 시스템에서는 `systemd-zram-setup` 패키지를 사용하는 것이 일반적입니다.

      • systemd-zram-setup 사용:해당 패키지가 설치되어 있지 않다면, 먼저 설치합니다.

        sudo apt install systemd-zram-setup (Debian/Ubuntu)

        sudo dnf install systemd-zram (Fedora)

        설치 후에는 systemd 서비스를 활성화합니다.

        sudo systemctl enable --now systemd-zram-setup@zram0.service

      • 수동 설정:

        systemd-zram-setup을 사용하지 않고 수동으로 Zram을 설정할 수도 있습니다. 다음은 예시 스크립트입니다 (root 권한 필요).

        #!/bin/bash

        # Zram 장치 설정 스크립트

        DEVICE=/dev/zram0

        SIZE=$((RAM_SIZE_MB / 2)) # RAM 크기의 절반을 Zram 크기로 설정 (조절 가능)

        ALGORITHM=lz4

        modprobe zram num_devices=1

        echo $SIZE > /sys/block/$DEVICE/disksize

        mkswap $DEVICE

        swapon $DEVICE -p 5 # 우선순위 설정 (조절 가능)

        echo $ALGORITHM > /sys/block/$DEVICE/comp_algorithm

        swapon -a # 스왑 활성화

        위 스크립트를 적절히 수정하여 실행하고, 부팅 시 자동으로 실행되도록 설정합니다 (예: `/etc/rc.local` 또는 systemd 서비스).

    • Zram 설정 변경:

      Zram의 크기, 압축 알고리즘 등을 변경할 수 있습니다. systemd-zram-setup을 사용하는 경우, `/usr/lib/systemd/zram-generator.conf` 파일을 수정하여 설정을 변경할 수 있습니다.

      수동으로 설정한 경우, 위 스크립트의 변수를 수정하여 설정을 변경합니다.

Zram 성능 모니터링

Zram의 성능은 `zramctl` 명령어를 통해 모니터링할 수 있습니다 (systemd-zram-setup 패키지에 포함).

zramctl

주요 정보는 다음과 같습니다.

    • disksize: Zram 장치의 크기
    • comp_algorithm: 압축 알고리즘
    • used: 사용 중인 압축된 데이터 크기
    • total: 압축 전 데이터 크기
    • orig_data_size: 압축되지 않은 원래 데이터 크기

Zswap과 Zram 선택 가이드

Zswap과 Zram 중 어떤 것을 선택할지는 시스템의 특성과 사용 목적에 따라 달라집니다.

    • Zswap: 스와핑이 이미 발생하고 있는 시스템에서 스와핑 성능을 개선하는 데 효과적입니다. SSD 수명 연장에도 도움이 될 수 있습니다.
    • Zram: RAM이 매우 부족한 시스템에서 스와핑을 완전히 대체하거나 스와핑 발생 빈도를 줄이는 데 효과적입니다. RAM의 일부를 스왑 공간으로 사용하므로, RAM 용량이 충분하지 않으면 오히려 성능 저하를 유발할 수 있습니다.

일반적으로 RAM 용량이 충분하다면 Zswap을, RAM 용량이 매우 부족하다면 Zram을 고려해볼 수 있습니다. 두 기술을 함께 사용하는 것도 가능하지만, 시스템 리소스를 더 많이 사용하므로 신중하게 고려해야 합니다.

유용한 팁과 조언

    • 압축 알고리즘 선택: 압축률과 CPU 사용량은 트레이드오프 관계에 있습니다. 압축률이 높은 알고리즘은 CPU 사용량이 많아질 수 있습니다. 시스템 성능에 맞는 적절한 알고리즘을 선택해야 합니다. 일반적으로 lz4는 빠른 속도와 적절한 압축률을 제공하여 균형 잡힌 선택이 될 수 있습니다.
    • RAM 크기 설정: Zram의 경우, RAM 크기를 너무 크게 설정하면 실제 사용 가능한 RAM이 줄어들어 시스템 성능이 저하될 수 있습니다. 적절한 크기를 설정하는 것이 중요합니다. 일반적으로 RAM 크기의 25% ~ 50% 정도가 적당합니다.
    • 성능 모니터링: Zswap과 Zram을 활성화한 후에는 성능을 지속적으로 모니터링하여 설정이 시스템에 적합한지 확인해야 합니다.
    • 시스템 업데이트: Zswap과 Zram은 커널 기능이므로, 최신 커널 버전을 사용하는 것이 성능 향상 및 버그 수정에 도움이 됩니다.

흔한 오해와 사실 관계

    • 오해: Zswap/Zram은 RAM 용량을 늘려준다.

      사실: Zswap/Zram은 RAM의 효율적인 사용을 돕는 기술이지, RAM 용량을 물리적으로 늘려주는 것은 아닙니다.

    • 오해: Zswap/Zram은 모든 시스템에서 성능 향상을 가져온다.

      사실: Zswap/Zram은 특정 환경에서만 성능 향상을 가져올 수 있습니다. RAM 용량이 충분한 시스템에서는 오히려 성능 저하를 유발할 수 있습니다.

    • 오해: Zswap/Zram은 SSD 수명을 무조건 연장해준다.

      사실: Zswap/Zram은 스와핑 횟수를 줄여 SSD 수명 연장에 기여할 수 있지만, 사용 패턴에 따라 효과는 달라질 수 있습니다.

자주 묻는 질문과 답변

    • Q: Zswap과 Zram을 함께 사용해도 되나요?A: 네, 함께 사용할 수 있습니다. 하지만 시스템 리소스를 더 많이 사용하므로, 신중하게 고려해야 합니다. 일반적으로 Zswap을 먼저 활성화하고, RAM이 매우 부족한 경우 Zram을 추가하는 것을 고려해볼 수 있습니다.
    • Q: Zswap/Zram을 사용하면 배터리 사용 시간이 늘어나나요?

      A: 스와핑 횟수를 줄여 디스크 I/O를 줄임으로써 배터리 사용 시간을 약간 늘릴 수 있습니다. 하지만 CPU 사용량이 증가할 수도 있으므로, 전체적인 배터리 사용 시간은 시스템 구성 및 사용 패턴에 따라 달라질 수 있습니다.

    • Q: Zswap/Zram 설정 후 성능이 오히려 저하되었어요. 어떻게 해야 하나요? A: 설정이 시스템에 적합하지 않을 수 있습니다. 압축 알고리즘, RAM 크기 등 설정을 변경하거나, Zswap/Zram을 비활성화하는 것을 고려해볼 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다