zswap의 max_pool_percent 매개변수를 늘리는 것은 zram과 zswap의 개념을 결합하여 메모리를 늘리고 디스크 사용량을 줄이는 현명한 아이디어입니까?

zswap의 max_pool_percent 매개변수를 늘리는 것은 zram과 zswap의 개념을 결합하여 메모리를 늘리고 디스크 사용량을 줄이는 현명한 아이디어입니까?

제가 뭔가 놓치고 있는 게 있는지는 모르겠지만, 이 부분은 가볍게 봐주세요.

따라서 zram은 메모리 스와핑을 통해 디스크의 I/O 작업을 줄이는 데 사용됩니다. 따라서 HDD를 사용하는 사용자의 시스템 정지를 제거하고 메모리에 배치할 수 있는 데이터 양을 "증가"시킵니다. 하지만 단점은 이 스왑이 부족해지면 속도 이점을 잃고 일반적으로 HDD로 스왑해야 하며 LRU(최근에 사용되지 않은) 데이터를 보내는 대신 활성 페이지를 스왑할 수도 있다는 것입니다. 그래서 그것은 던져진 모든 것을 압축하려고 맹목적으로 작동합니다.

그러나 zswap은 더 똑똑해지려고 노력하며 zram이 수행하는 작업을 수행할 수 있지만 더 많은 I/O 활동이 필요합니다. 스왑할 페이지를 캐시하고, 메모리 풀이 가득 차면 가장 최근에 사용된 페이지를 스왑합니다. 그러나 압축할 수 없는 데이터를 디스크 스왑으로 직접 보냅니다.

이제 질문이 나옵니다. 내 말을 들어보세요. zswap의 메모리 풀 크기를 늘리는 것은 zram과 동등하지 않습니다. 디스크 캐시 및 스왑 LRU와 같은 zswap의 스마트 기능을 유지하면서 RAM 풀이 더 많은 데이터를 압축하고 소진되기 전에 더 많은 페이지를 수용할 수 있도록 하여 RAM에 더 많은 여유 공간을 추가합니다. 페이지? 이것이 두 세계의 최고가 아닌가?

유일한 단점은 여전히 ​​압축할 수 없는 데이터를 디스크로 전송하여 디스크 활동을 유발한다는 것입니다. 이것에 대해 잘 모르겠지만 교환 가능성을 1로 낮추면 문제가 해결되지 않습니까? 아니면 스왑은 비활성 페이지에만 영향을 미치고 zswap이 압축할 수 없는 페이지에는 영향을 미치지 않습니까? 그렇다면 누구든지 이 문제에 대한 해결책을 제안할 수 있습니까?

답변1

Swappiness는 전체 스와핑 메커니즘에 영향을 미치므로 1로 설정하면 시스템 전체가 스와핑을 위해 페이지를 보내는 방식에 영향을 줍니다. Zswap은 일반 RAM과 스왑 장치 사이의 계층이므로 zswap이 활성화된 경우 스왑은 시스템이 페이지를 zswap으로 보내는 빈도에만 영향을 미칩니다. zswap 쓰기 저장에는 전혀 영향을 미치지 않습니다. 그것은 심지어 그것을 깨닫지도 못합니다.

더 높게 설정하면 max_pool_percent더 많은 데이터를 RAM에 저장할 공간이 생기지만 disksizezram에서 더 큰 값을 설정하는 것과 다르지 않습니다. 동일한 효과가 있으며 너무 높게 설정하면 똑같이 심각한 결과를 초래할 수 있습니다. 이를 100으로 설정하고 시스템을 강제로 교체하여 무슨 뜻인지 확인하십시오.

정말로 두 세계의 최고를 원한다면 두 세계의 최고만 있으면 됩니다. 만일을 대비하여 쓰기 저장이 활성화된 zram 스왑 장치 앞에 zswap을 배치하고 우선 순위가 낮은 일반 디스크 스왑 장치를 배치했습니다. Zswap은 모든 장점을 갖고 있지만 최대 압축률은 3:1입니다. zswap이 LRU이든 압축할 수 없는 데이터이든 자체 쓰기 저장을 트리거하면 데이터가 zram으로 전송됩니다. 압축할 수 없는 경우 - 간단한 스크립트는 hugepages가 zram에 다시 기록되도록 트리거합니다 backing_dev. 페이지가 LRU가 제거되면 zswap은 제거하기 전에 압축을 풀고 zram은 저장하기 전에 다시 압축하여 zswap 비율보다 더 높은 압축을 달성합니다(lzo 또는 zstd 사용) , 나는 약 5:1 압축 비율을 제공하는 zstd를 선호합니다. 동일한 스크립트는 zram이 얼마나 많은 RAM을 소비하는지 모니터링 하고 backing_dev소비가 원하는 것보다 높으면 max_pool_percent전체 내용을 zram에 덤프합니다 (저는 zswap의 30%로 설정했습니다). 이런 방식으로 시스템이 스와핑을 시작하면 zswap은 초기 성능에 미치는 영향을 완화하고, 일단 가득 차면 디스크 기반 스와핑은 성능을 저하시키지 않지만 zram은 저하됩니다. zram에 대한 데이터 입력을 압축할 수 없는 경우에도 zram은 데이터를 보내기 전에 제로 패딩 및 동일 패딩 페이지를 제거하므로 backing_dev디스크 i\o가 줄어듭니다. 놀랍게도 zswap 자체는 이 작업을 수행하지 않습니다. 일단 풀 제한에 도달하면 새 페이지 수락을 중지하므로 0으로 채워지고 동일하게 채워진 모든 페이지가 디스크에 기록되어 i\o 속도가 느려지고 CPU를 차지합니다. 따라서 zram 레이어가 있습니다.

관련 정보