zram을 사용할 때 vm.swappiness에 적합한 값은 무엇입니까?

zram을 사용할 때 vm.swappiness에 적합한 값은 무엇입니까?

내 컴퓨터에서 압축된 RAM 지원 스왑 영역으로 zram을 사용하고 있습니다. 시스템이 무언가를 교체해야 할 때 이를 zram 지원 스왑 파일로 교체하는 것은 공간을 확보하기 위해 메모리의 데이터를 압축하는 것과 거의 동일합니다. 이로 인해 대부분의 경우 디스크 지원 스왑에 비해 스왑이 매우 빨라집니다. 그렇다면 시스템이 실제로 디스크에 액세스하지 않고도 사용하지 않는 콘텐츠를 보다 적극적으로 교환하도록 장려함으로써 어느 정도 성능을 얻을 수 있는지 궁금합니다.

vm.swappiness그렇다면 zram을 100으로 설정하는 등 장난을 치는 사람이 있나요? 이것이 바람직한가?

sysctl -w vm.swappiness=100

답변1

짧은 대답: vm.swappiness=100적절한 값zram의 경우(적어도 Debian Stretch 및 Linux 4.9에서는 이것이 가장 가치 있다고 생각합니다)

나는 vm.swappiness=100그것을 테스트했습니다.

내 생각엔 네가 할 수 있을 것 같아몇 가지 간단한 테스트귀하에게 가장 적합한 가치를 결정합니다.

나도 그랬어또 다른 간단한 프로그램이 문제를 테스트하려면. 내 컴퓨터에서는 매우 낮은 vm.swappiness값(예: vm.swappiness=1)으로 인해 눈에 띄는 응답 문제가 발생합니다.

에 대한 SwapCached:/proc/meminfo

먼저 vm.page-cluster=0이것을 시도해 보세요.쓸데없는 교환을 줄일 수도 있습니다 SwapCached.

SwapCached는 zram이 아닌 스왑 장치처럼 zram을 가속화할 수 있습니다.

SwapCached필요한 경우 재사용 가능(무료):

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

답변2

나는 실제로 swappiness를 더 높게 설정하는 것을 권장하지 않습니다. 커널의 일반적인 메커니즘은 다른 실행 작업에서 사용할 수 있도록 일부 메모리를 확보하기 위해 페이지(메모리 블록)를 스왑에 넣는 것입니다.

첫 번째 "문제"는 커널이 n 페이지를 해제하려고 할 때 m(m < n, m은 n을 수용하는 데 필요한 압축 페이지 수)이 RAM에 새로 생성된다는 것입니다. 커널.

그럼에도 불구하고 교환에 페이지가 있는 동안 나중에 교환에서 애플리케이션과 해당 페이지 중 일부를 사용할 수 있습니다. 커널이 하는 일은 이러한 페이지를 물리적 메모리로 다시 가져오는 것이지만 스왑에서 제거하지는 않습니다(표준 스왑을 사용하면 다음과 같이 생각할 수 있습니다).은닉처, 따라서 애플리케이션이 백그라운드로 돌아갈 때 커널은 이러한 페이지를 느린 스왑 영역에 다시 쓸 필요가 없습니다. 그러나 zram의 경우 메모리에 zram의 m 페이지 + 메모리의 n 페이지가 포함되어 있으므로 이는 현명한 방법이 아닐 수 있습니다!

커널에는 일반적으로 업무를 완료하는 데 사용할 수 있는 "총 메모리"가 있습니다. zram을 추가하면 디스크 기반 스왑과 마찬가지로 "스왑" 메모리로만 계산되지만 실제 "총 메모리"는 줄어듭니다. 이는 커널이 기대하거나 기대하는 것과 다릅니다. 결과적으로 때로는 이상하고 환영받지 못하는 행동을 경험할 수도 있습니다!

zram을 사용할 때 커널이 메모리 부족 상태에 있을 때 이 영역으로 너무 많은 스와핑을 수행하지 않는 것이 가장 좋습니다. 그리고 시스템이 OOM되지 않고 많은 여유 공간이 보고되도록 하려면 항상 zram 최대 크기보다 큰 실제 하드 드라이브 스왑 파티션이 있어야 합니다 free!

답변3

https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram

이 값은Pop!_OS는 무엇을 사용하나요?. Pop!_OS GitHub 풀 요청도 다음에 연결되어 있습니다.r/Fedora에서 사용자가 수행한 일부 테스트, vm.page-cluster = 0을 결정하는 것이 이상적입니다. 그들은 또한 제안된 것과 일치하는 높은 교환 가치가 바람직하다는 것을 발견했습니다.커널 문서:

기본값은 60입니다. 인메모리 스왑(예: zram 또는 zswap)과 파일 시스템보다 빠른 장치에서의 스왑을 혼합하여 설정하는 경우 100보다 큰 값이 고려될 수 있습니다. 예를 들어 스왑 장치에 대한 임의 IO가 파일 시스템의 IO보다 평균 2배 빠른 경우 스왑 가능성은 133(x + 2x = 200, 2x = 133.33)이어야 합니다.

답변4

메모리가 가득 차면 페이지를 디스크로 교체해야 합니다. 메모리가 가득 찼을 때 페이지가 교환되는 위치를 생성하기 위해 메모리를 사용하는 경우, 압축으로 인해 차이가 발생하지 않는 한 목적에 맞지 않는다고 생각할 수 있습니다(그러면 스왑을 통하지 않고 메모리를 직접 압축하는 것이 자연스럽습니다). 컴퓨터가 메모리 속도에 비해 압축과 압축 해제 속도가 점점 빨라지고 있기 때문에 이를 벤치마킹해야 할 것 같습니다.

관련 정보