답변:
참고 : CPU 별 잠금 으로 인해 큰 단일 CPU 대신 CPU (modprobe zram_num_devices = n zram) 만큼 많은 zram-swap을 가져야합니다. RTFM!
max_comp_streams
것 같습니다 . 2011 년에 해당 매개 변수가 있는지 확인하지 않았지만 여러 스왑 파일보다 더 나은 옵션 인 것 같습니다. 1
zram-config
우분투 (그리고 아마도 데비안에서) 패키지로 테스트 한 구성은 기본적으로 코어 또는 스레드 당 1 (이전 E2140 듀얼 코어에서 2 개, i3-3220에서 4 개)입니다
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"
전달하여 원하는 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
zram0
및 zram1
2 핵 인텔 T9300 상자에 값 10을, 그것은 저를 발생시킵니다 swapon: /dev/zram0 or 1: swapon failed: Device or resource busy
.
어떤 이유로 든 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 지연이 발생합니다.
따라서 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
}