1.1. 개요


제한적인 물리적 메모리를 응답성 및 가용성을 최대한 해치지 않고 최대의 활용 방법으로 swap을 압축 메모리로 활용하는 방법을 설명합니다. 부족한 메모리는 곧 서비스 중지라는 사태(oom kill)를 야기하므로 적어도 이 방법은 그에 대한 방어책을 구사할 수 있습니다.

ZRAM 이란?
  • 일종의 swap 이지만 Disk I/O 를 일으키지 않고 일정 조건에 의해서 swap 할 메모리를 우선 압축하도록 하는 기능.
  • 메모리상에 존재하는 데이터들은 상당히 압축률이 높은 특성을 갖는다는 전재를 깔고 도입되는 사항이며
  • 압축 알고리즘은 빠르다고 알려면 LZO (zip 에서 사용하는) 등을 많이 사용.
  • 이게 생각보다 메모리를 많이 아낄 수 있고 성능손실이 크지 않다고 알려져 있어서 대부분의 임베디드 시스템에는 (특히 NAS, 안드로이드) 많이 도입되는 기능입니다.
  • 같은 안드로이드 H/W spec 을 갖는 스마트폰이라도 유명 벤더사(S 및 L사) 의 안드로이드폰이 더 빠릿한 느낌을 주는 것은 이 기능이 큰 영향을 갖기 때문입니다.

1.2. ZRAM 활성화 방법


  1. Kernel 의 "make menuconfig" 에서 다음의 항목을 활성화(y) 해주고 빌드하여 커널 이미지를 반영
    • "Device Drivers" -> "Staging drivers" -> "Compressed RAM block device support"
    • "Device Drivers" -> "Staging drivers" -> "Dynamic compression of swap pages and clean pagecache pages"
    • "Device Drivers" -> "Staging drivers" -> "Memory allocator for compressed pages"
  2. 부팅 스크립트 초기에 다음과 같은 맥락의 swap 활성화 명령이 실행되도록 합니다.
        # ZRAM SWAP ON - 2GBytes
        mknod -m 600 /dev/zram0 b 251 0
        echo 2048M > /sys/block/zram0/disksize
        mkswap /dev/zram0
        swapon -p 100 /dev/zram0
    
        ## DISK SWAP ON - 1GBytes
        #dd if=/dev/zero of=/swap.bin bs=1024M count=1
        #mkswap /swap.bin
        #swapon -p 0 /swap.bin
    
    • => 주1) mknod 에서 major 번호는 커널에 따라 다를 수 있음. 때문에 "cat /proc/devices" 에서 zram 으로 표기되는 block device 의 major 번호를 확인하는게 필수입니다.
      • 위 예제 명령에서 major 번호를 251로 하였으나 이는 시스템에 따라서 다를 수 있음에 유의하시고 그에 맞도록 major 번호를 사용하세요.
    • => 주2) zram0 의 크기 결정은 통상 전체 물리 메모리의 20%~80% 정도 잡는것을 기준으로 자신의 시스템에 따른 특성을 고려하여 잡으세요.
    • => 주3) swapon 의 -p 옵션으로 지정하는 우선순위는 큰 값이 우선 사용됩니다.
    • => 주4) /dev/zram0 는 ramdisk가 사용하는 /dev/ram0 와 흡사한 block device 의 일종으로 압축유지상태라는 것뿐이며 ramdisk영역과 매우 흡사한 동작특성을 갖습니다.
  3. 재부팅하면 다음 명령으로 ZRAM 이 swap 으로 잡혀있는지 확인 가능합니다.
        # cat /proc/swaps
        Filename                                Type            Size    Used    Priority
        /dev/zram0                              partition       2097148 0       100
        /swap.bin                               file            1048572 0       0
    
        # cat /proc/meminfo
        ...
        SwapTotal:       3145720 kB
        SwapFree:        3145720 kB
        ...
    
  4. 그 밖에...

1.3. 참고자료




/*
[ FrontPage | PrintView | RawView | RSS ]

Copyright ⓒ MINZKN.COM
All Rights Reserved.

MINZKN
*/