우분투에서 RAM이 부족합니까? ZRAM 사용
Linux 시스템에서 RAM이 부족할 때마다 여분의 메모리를 제공하기 위해 저장 장치를 사용하여 스왑 메모리 를 활성화했습니다 . 주된 이점은 여분의 하드웨어가 필요하지 않지만 일시적으로 만 사용하지 않는 한 훨씬 더 느린 액세스와 잠재적 인 문제 또는 마모로 인해 발생한다는 것입니다.
이번 주말, 나는 ODROID-XU4Q 보드에서 Arm Compute Library 를 컴파일 했고, 시스템이 메모리 부족으로 인해 처음으로 추락했기 때문에 eMMC 플래시 모듈에서 스왑을 다시 시작하여 빌드를 성공적으로 완료 할 수있었습니다. 그러나 ZRAM을 대신 사용하는 것이 좋을 것이라고 들었습니다.
그래서 ZRAM은 무엇입니까? Wikipedia는 다음과 같이 설명합니다 .
zram은 이전에 compcache라고 불 렸지만 램 디스크에 압축 된 블록 장치를 생성하기위한 Linux 커널 모듈이지만 즉석에서 "디스크"압축을 사용합니다.
따라서 스왑과 유사합니다. RAM에서 작동하고 메모리를 압축합니다. 스왑과 결합 할 수도 있지만, 그 경로를 따라야 할 경우 메모리를 업그레이드하거나보다 강력한 하드웨어 플랫폼으로 변경하는 것이 좋습니다. ZRAM 지원은 2014 년 초에 Linux 3.14가 출시 된 이래 안정적 으로 간주 되었습니다 .
ZRAM 사용 방법을 보여주기 전에 보드의 메모리를 확인해 봅시다.
| free -m total used free shared buff/cache available Mem: 1994 275 1216 30 503 1632 Swap: 0 0 0 |
약 2GB RAM이고 스왑은 사용할 수 없습니다. 이론 상으로는 우분투 또는 데비안에서 ZRAM을 활성화하는 것은 간단한 단계입니다.
| sudo apt install zram-config |
설치가 잘되었지만 ZRAM을 사용할 수 없었습니다. 우선, / proc / config 나 / proc / config.gz 를 체크하여 Linux 커널에서 ZRAM이 활성화되어 있는지 확인하십시오 :
| zcat /proc/config.gz | grep ZRAM CONFIG_ZRAM=m CONFIG_ZRAM_WRITEBACK=y |
ZRAM은 모듈로 구축됩니다. 나는 그것을 가능하게하고 점검하기 위해 여러 가지 일을 시도했지만,이 단계에서 어디로 가야 할지를 알지 못했다. 거의 잠자리에들 때가되었다. 이 경우 가장 좋은 행동 경로는 무엇입니까? 잠에서 깨어서 문제를 해결하기 위해 밤새도록 일하십니까? 아니! 신기한 실수. 몇 년 동안의 경험으로 저에게 장비를 끄고 즐거운 밤을 보내실 수 있다고 가르쳐 주셨습니다.
아침 시간, 아침 식사, 사무실까지 걸어 컴퓨터 및 보드 켜기, et voilà :
| odroid@odroid:~$ free -m total used free shared buff/cache available Mem: 1994 281 1222 22 490 1634 Swap: 997 0 997 odroid@odroid:~$ cat /proc/swaps Filename Type Size Used Priority /dev/zram0 partition 127648 0 5 /dev/zram1 partition 127648 0 5 /dev/zram2 partition 127648 0 5 /dev/zram3 partition 127648 0 5 /dev/zram4 partition 127648 0 5 /dev/zram5 partition 127648 0 5 /dev/zram6 partition 127648 0 5 /dev/zram7 partition 127648 0 5 |
성공! 그래서 전날 작동하도록 보드를 재부팅해야했습니다 ... 그래서 우리는 1GB ZRAM 스왑을 8 개의 블록 장치에 사용할 수 있습니다. 나는 그들이 필요로하는 RAM을 먹는 것을 피하기 위해 필요하다고 생각합니다.
그래서 Arm Compute Library를 구축하고, Chromium과 Thunderbird와 같은 몇 가지 프로그램을 실행하고, htop을 사용하여 동시에 RAM 사용을 모니터링함으로써 조금 더 힘들게 만들어서 스왑을 사용해 보도록하겠습니다.
마지막 단계에서 RAM의 나머지가 ZRAM에 사용되기 때문에 1.11GB 메모리가있는 506MB의 "스왑"이 사용되는 것을 볼 수 있습니다. 그러나 ZRAM 블록 장치가 필요에 따라 하나씩 사용된다는 전제하에 모든 8 개의 장치가 거의 동일한 양의 데이터를 보유하고 있음이 틀 렸습니다.
| cat /proc/swaps Filename Type Size Used Priority /dev/zram0 partition 127648 48156 5 /dev/zram1 partition 127648 48452 5 /dev/zram2 partition 127648 47688 5 /dev/zram3 partition 127648 46884 5 /dev/zram4 partition 127648 47780 5 /dev/zram5 partition 127648 47320 5 /dev/zram6 partition 127648 48212 5 /dev/zram7 partition 127648 46948 5 |
그것은 참조 용으로 무료 출력입니다.
| free -m total used free shared buff/cache available Mem: 1994 877 813 47 303 1104 Swap: 997 368 628 |
좋은 소식은 Chromium과 Firefox가 백그라운드에서 실행되는 경우에도 빌드가 ZRAM으로 정상적으로 완료 될 수 있다는 것입니다.
ZRAM은 데이터를 지속적으로 압축 및 압축 해제해야하며 시스템에서 액세스 할 수있는 압축되지 않은 RAM의 양을 줄이므로 실제로 시스템 성능이 저하 될 수 있습니다. 그러나 RAM을 자주 사용하지 않거나 특정 응용 프로그램을 사용하면 사용할 수 있습니다. 방금 ZRAM을 단일 빌드에 필요로 했으므로 이제는 ZRAM을 제거하여 비활성화 할 수 있습니다.
| sudo apt remove zram-config |
그러나 zramctl 유틸리티를 사용하여 조정할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | zramctl --help Usage: zramctl [options] <device> zramctl -r <device> [...] zramctl [options] -f | <device> -s <size> Set up and control zram devices. Options: -a, --algorithm lzo|lz4 compression algorithm to use -b, --bytes print sizes in bytes rather than in human readable format -f, --find find a free device -n, --noheadings don't print headings -o, --output <list> columns to use for status output --raw use raw status output format -r, --reset reset all specified devices -s, --size <size> device size -t, --streams <number> number of compression streams -h, --help display this help -V, --version display version Available output columns: NAME zram device name DISKSIZE limit on the uncompressed amount of data DATA uncompressed size of stored data COMPR compressed size of stored data ALGORITHM the selected compression algorithm STREAMS number of concurrent compress operations ZERO-PAGES empty pages with no allocated memory TOTAL all memory including allocator fragmentation and metadata overhead MEM-LIMIT memory limit used to store compressed data MEM-USED memory zram have been consumed to store compressed data MIGRATED number of objects migrated by compaction MOUNTPOINT where the device is mounted |
매개 변수없이 zramctl을 실행하면 실제 압축 / 압축되지 않은 데이터가 블록 당 얼마나 많이 사용되는지 확인할 수 있습니다.
| zramctl NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram7 lzo 124.7M 29.8M 9.7M 13M 8 [SWAP] /dev/zram6 lzo 124.7M 30.6M 10.1M 13.5M 8 [SWAP] /dev/zram5 lzo 124.7M 30.5M 9.6M 12.8M 8 [SWAP] /dev/zram4 lzo 124.7M 29.7M 9.9M 10.6M 8 [SWAP] /dev/zram3 lzo 124.7M 29.6M 10.2M 10.9M 8 [SWAP] /dev/zram2 lzo 124.7M 30M 9.6M 10.3M 8 [SWAP] /dev/zram1 lzo 124.7M 30.7M 10.2M 13.4M 8 [SWAP] /dev/zram0 lzo 124.7M 30.4M 9.5M 12.7M 8 [SWAP] |
zramswap 서비스는 우분투 18.04에 systemd에 의해 처리됩니다 그리고 당신은 / etc / systemd / 시스템 / 체크 아웃 수있는 멀티 user.target.wants / zram-config.service 이 설정이 얼마나 이해하고도 부팅시를 제어 할 수 있습니다. 예를 들어 프로세서 당 하나의 블록 장치가 설정되어있는 것을 볼 수 있습니다. Exynos 5422는 8 코어 프로세서이므로 여기에 8 개의 블록 장치가 있습니다. 그 밖의 팁은 의견에 반영됩니다.
https://www.cnx-software.com/2018/05/14/running-out-of-ram-in-ubuntu-enable-zram/