zram 및 swap을 올바르게 설정하는 방법


9

새로운 3.0 커널을 구성하고 컴파일하고 있습니다. 3.0으로 병합 된 (패칭) 한동안 사용하려고했던 장점 중 하나는 zram입니다.

zram을 먼저 사용하고 유출 된 페이지 만 실제 스왑에 넣도록 hdd 스왑과 zram 스왑을 모두 설정할 수 있습니까?

답변:


8

참고 : CPU 별 잠금 으로 인해 큰 단일 CPU 대신 CPU (modprobe zram_num_devices = n zram) 만큼 많은 zram-swap을 가져야합니다. RTFM!


1
[인용 필요]? Linux 설명서 나 Google에서 추천을 찾을 수 없습니다.
Maciej Piechotka

기본적 으로 문서를 따르는 max_comp_streams것 같습니다 . 2011 년에 해당 매개 변수가 있는지 확인하지 않았지만 여러 스왑 파일보다 더 나은 옵션 인 것 같습니다. 1
Maciej Piechotka

1
zram-config우분투 (그리고 아마도 데비안에서) 패키지로 테스트 한 구성은 기본적으로 코어 또는 스레드 당 1 (이전 E2140 듀얼 코어에서 2 개, i3-3220에서 4 개)입니다
Geek

흥미,이 또한 읽기 /etc/init/zram-config.conf으로 이해하는 것이 매우 분명한 것 같다
물병 전원

1
이 부가 정보는 커널 버전 3.15부터 폐기되었습니다. 하나의 큰 zram에 대해 여러 개의 압축 스레드를 사용할 수 있습니다.
Perkins

6

swapon-p우선 순위를 설정하는 스위치. 나는 설정할 수 있습니다 :

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap

또는 / etc / fstab에서

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0

편집 : 전체 솔루션을 위해-그러한 라인은 udev 규칙으로 도움이 될 수 있습니다.

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"

1

전달하여 원하는 zram 장치 수를 선택하십시오

zram.num_devices=4

커널 매개 변수 또는 모듈에 직접 (zram없이). 기본값은 1입니다. zram은 생성 한 장치 수만큼 많은 CPU를 활용할 수 있습니다.

zram0 장치를 준비하고 크기를 1GB로 설정하십시오.

echo 1000000000 > /sys/block/zram0/disksize

또는 udev 규칙으로 할 수 있습니다. zram0에서 스왑 생성

mkswap /dev/zram0

다른 스왑 장치보다 우선 순위가 높은

swapon -p 32767 /dev/zram0

여기서 어떤 커널 및 배포판 버전을 작성하고 있습니까?
Cbhihe

기록을 위해 14.04.5 데스크탑 우분투에서 조언을 진행하는 데 실패했습니다. 내가의 우선 순위 설정하려고 할 때 특히, zram0zram12 핵 인텔 T9300 상자에 값 10을, 그것은 저를 발생시킵니다 swapon: /dev/zram0 or 1: swapon failed: Device or resource busy.
Cbhihe

1

어떤 이유로 든 https://www.kernel.org/doc/Documentation/blockdev/zram.txt에 대한 많은 오해가있는 것 같습니다

그것은 분명히 다음과 같이 말합니다 :

2) 최대 압축 스트림 수 설정
이 속성에 전달 된 값에 관계없이 ZRAM은 항상 여러 개의 압축 스트림 (온라인 CPU 당 하나씩)을 할당하므로 여러 개의 동시 압축 작업이 가능합니다. 일부 CPU가 오프라인 상태가되면 할당 된 압축 스트림 수가 줄어 듭니다. UP 시스템을 실행 중이거나 온라인에 CPU가 하나만 있지 않으면 더 이상 단일 압축 스트림 모드가 없습니다.

현재 사용 가능한 스트림 수를 확인하려면 다음을 수행하십시오.

cat /sys/block/zram0/max_comp_streams

그러나 최대 스트림이 1이라는 공통적이고 지속적인 도시 신화가 있습니다.

사실이 아닙니다.

zram이 단일 기기로 Chrome OS 및 Android에서 효과적인 것으로 입증 된 두 가지 OS입니다. 또한 그들은 조정 page-cluster:

page-cluster한 번의 시도로 스왑에서 연속 페이지를 읽는 페이지 수를 제어합니다. 이것은 페이지 캐시 미리 읽기에 대한 스왑 대응입니다.
언급 된 연속성은 가상 / 물리적 주소가 아니라 스왑 공간에서 연속적입니다. 즉, 서로 스왑되었습니다.

로그 값입니다. 0으로 설정하면 "1 페이지", 1로 설정하면 "2 페이지", 2로 설정하면 "4 페이지"등이됩니다. 0은 스왑 판독을 완전히 비활성화합니다.

기본값은 3입니다 (한 번에 8 페이지). 작업 부하가 스왑 집약적 인 경우이를 다른 값으로 조정하면 약간의 이점이있을 수 있습니다.

값이 낮을수록 초기 결함에 대한 대기 시간이 짧아 지지만 동시에 연속적인 페이지의 일부가되었을 경우 후속 결함에 대한 추가 결함 및 I / O 지연이 발생합니다.

                — 커널 문서에서/proc/sys/vm/*

따라서 echo "0" > /proc/sys/vm/page-cluster단일 페이지를 강제로 사용 하십시오.

데비안 / 우분투 패키지는 zram_config에서 유래 한 것으로 보이며 어떤 이유로 zram의 커널 문서와 거의 관련이없는 것으로 보이며 본질적으로 완전히 잘못 될 수있는 일련의 중국 속삭임을 가져 왔습니다.

파일 스왑을 사용하면 각 코어에 대한 스왑 드라이브를 작성합니까? 어쩌면 그것은 당신의 질문에 대답 할 수 있습니다. 또한이를 백업하기 위해 디스크와 일치하지 않기 때문에 위의 페이지 클러스터와 함께 성공적으로 채택 된 Chrome OS 및 Android를 지원하므로 대기 시간을 단일 장치로 향상시킬 수 있습니다.

또한 sys-admin의 경우 중요한 실제 mem 사용법 또는 vm mem 사용법은 무엇입니까? 대부분의 예는 disk_size를 통한 작성을 보여 주며 mem_limit를 완전히 무시합니다. disk_size = 압축되지 않은 vm 크기. mem_limit = 실제 mem 풋 프린트 한계.

comp_alg 비율과 사용하지 않을 때 디스크 크기의 0.1 %의 오버 헤드에 의존하는 가상 최대 크기로 disk_size 선택을 혼란스럽게 만들고 실제로는 frugal vs. 낙천주의.

zram_config는 이전 서비스 사용을 확인하지 않고 덮어 쓰지만 아래와 같이 zram sys 클래스를 간단히 확인합니다.

createZramSwaps () {
        totalmem=$(free|awk '/^Mem:/{print $2}')
        mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))

        # Check Zram Class created
        ZRAM_SYS_DIR='/sys/class/zram-control'
        if [ ! -d "${ZRAM_SYS_DIR}" ]; then
                modprobe zram
                RAM_DEV='0'
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        else
                RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        fi

        if [ "$BIG_CORES" -gt 1 ];then
                for i in $(seq $((BIG_CORES - 1))); do
                        RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                        echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                        echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                        mkswap /dev/zram${RAM_DEV}
                        swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
                done
        fi
}

0

zram을 활성화하면 zram이 자동으로 우선 순위를 갖습니다.

우분투 16.04의 경우 : /usr/bin/init-zram-swapping

사용 된 실제 램을 낮추기 위해 해당 파일을 편집하고 (백업을 먼저 만듭니다) mem 줄을 다음과 같이 변경했습니다.

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.