디스크 스왑 영역을 압축하는 방법

디스크 스왑 영역을 압축하는 방법

디스크에서 스왑을 압축하는 방법을 찾고 있습니다.나는 대체 솔루션에 대한 더 광범위한 논의를 원하는 것이 아닙니다. 마지막에 토론을 참조하세요.

열심히 노력했는데...

압축된 zfs zvol로 교체하면 작동하지 않습니다. 설정이 작동하고, 스왑이 작동하고, 스왑이 일부 발생하므로 다음과 같이 말할 수도 있습니다.기술적으로작동하는 솔루션이지만 플로피 액세스보다 느리고 시스템이 10번 중 10번 완전히 정지되는 경우 작동하는 솔루션이 정확히 어떻게 "작동"합니까? 몇 번의 시도가 필요했습니다. 시스템이 메모리 부족 상태에 들어가면 모든 것이 정지됩니다. Lostup을 사용해 간접적으로 사용해 보기도 했고 zram용 백업 장치로 zfs zvol을 사용해 보기도 했습니다. 차이는 없고 항상 동일한 결과입니다. 쓰기/읽기 속도가 극도로 느리고 시스템이 압박을 받으면 필연적으로 붕괴됩니다.

BTRFS. 만 지원압축되지 않은파일을 교환합니다. 빈 파일을 dd-ing하고, 일반 ext2로 포맷하고, 압축하고, 루프 장치로 마운트하고, 그 안에 스왑 파일을 생성해 봤기 때문에 압축되지 않은 루프 이미지만 지원되는 것 같습니다. 강제 압축이 활성화된 btrfs를 설치했는데도 작동하지 않습니다. compsize는 ext2 이미지 압축 비율이 정확히 1.00임을 보여줍니다.

Zswap - 메모리와 일반 디스크 스왑 사이의 버퍼일 뿐입니다. 일반 디스크 스왑은 여전히 ​​일반 디스크 스왑이므로 zswap은 페이지에 쓰기 전에 페이지의 압축을 풉니다.

Zram - compcache가 시작된 이래로 지원되는 장치 옵션이 있었기 때문에 수년 동안 압축 디스크 스왑을 사용해 온 사람들에게 완벽한 후보가 될 것이라고 생각할 것입니다. 그런 행운은 없습니다. 압축된 메모리 페이지를 마음대로 다시 디스크에 쓸 수 있지만 쓰기 전에 페이지의 압축이 풀립니다. zswap과 달리 동일하고 0으로 채워진 페이지를 쓰지 않습니다. 이는 i\o를 절약하고 처리량을 약간 향상시키며 라운드 로빈 마운트 스파스 파일을 backing_dev로 사용하도록 보장합니다. 이는 여전히 디스크 압축이 부족하기는 하지만 저가형 장치에서 찾은 스왑 최적화를 위한 최고의 옵션입니다.


내가 시도할 수 있는 다른 아이디어가 있나요? 어쩌면 내가 알지 못하는 어떤 압축된 블록 장치 계층이 거기에 기록된 모든 것을 압축할 수 있고 파일 시스템이 필요하지 않습니까? 압축된 오버레이를 사용할 수 있을까요? 그러나 FUSE에서는 이 작업을 수행하지 않습니다. 왜냐하면 FUSE 자체가 교체되는 객체이기 때문입니다. 단, FUSE가 교체되는 것을 방지하는 방법을 아는 경우는 예외입니다.

나는 이것이 많이 탐구되는 것을 보지 못했기 때문에 당신이 좋아하는 미친 제안을 환영합니다. 자, 벽에 물건을 던지고 무엇이 붙는지 살펴봅시다.

전문가를 위해 - 이 문제와 관련된 Linux 소스 코드의 일부를 읽거나 작성했다면 이것이 구현되지 않았다고 생각하는 이유와 이것이 어떻게 될 것이라고 생각하는지 가능한 한 자세히 설명하십시오. 구현될 것인가?할 수 있다아이디어가 있으시면 구현해 보세요. 분명히, 가능하다면 이를 구현하도록 하세요. 그러면 정말 좋을 것입니다.


논의하다

이것을 중복으로 표시하기 전에 stackexchange와 관련된 몇 가지 유사한 질문이 있다는 것을 알고 있지만 유효한 답변이 없으며 추가 피드백이 거의 없습니다. 그래서 나는 여기서 세부 사항을 설명하고 나보다 똑똑한 사람이 이것을 알아낼 수 있기를 바라면서 모든 것을 요약하려고 노력할 것입니다. 저는 프로그래머가 아니고 단지 사용자이자 스크립트 초보이기 때문에 이 부분은 상당히 낮은 장벽이 될 것입니다.

그냥 메모리를 더 사세요, 가격이 저렴해요

솔리드 스테이트 드라이브 구입

나쁜 교환

어쨌든 압축이 느린데 왜 귀찮게 합니까?

당신이 말해야 할 것이 위의 내용 중 하나라면 - 떠나십시오. 왜냐하면 주장은최적화. 오늘날 메모리가 아무리 저렴하더라도 무료는 아닙니다. 교환은 항상 필요하며 이를 갖는 것이 시스템에 좋다는 사실은 수년 동안 입증되었습니다. 압축은 아무 것도 아닙니다. 심지어 "무거운" 알고리즘이라도 지난 10년 동안 만들어진 모든 프로세서에서 엄청나게 빠른 성능을 발휘합니다. 마지막으로, 물론 SSD를 사용하는 경우 압축은 실제로 병목 현상이 될 수 있지만 모든 사람이 디스크 공간 사용량보다 속도를 우선시하는 것은 아니며 HDD 드라이브는 디스크 압축으로 큰 이점을 얻지만 여전히 인기가 높으며 무시할 수 없을 정도로 많습니다. .

답변1

나는 당신에게 구체적인 대답을 가지고 있지 않습니다. 당신이 탐구할 수 있는 것은좌심실 용적.

LVM은 주로 파티셔닝의 대체 형태입니다. 그러나 기술적으로 말하면 LVM의 물리적 볼륨은 모든 블록 장치가 될 수 있습니다. 이는 궁극적으로 물리적 블록 장치의 지원을 받는 논리적 블록 장치를 제공합니다.

LVM 논리 볼륨은 블록 장치이므로 일반적으로 스왑에 사용할 수 있습니다.

LVM에는 다음과 같은 기능이 있습니다.전원압축을 제공합니다.

VDO(Virtual Data Optimizer) 기능은 인라인 블록 수준 중복 제거, 압축 및 스토리지 씬 프로비저닝을 제공합니다. LVM 씬 프로비저닝 볼륨과 유사하게 VDO를 LVM(논리 볼륨 관리자) LV(논리 볼륨)로 관리할 수 있습니다.

발생할 수 있는 문제

모든 형태의 압축에는 약간의 메모리가 필요합니다. 스왑용으로 설계되지 않은 솔루션에 대한 주요 관심사는 페이지를 압축하기 위해 커널에서 메모리를 동적으로 요청할 수 있다는 것입니다. 압축이 되기 때문에왜냐하면커널은 RAM을 확보해야 하며 RAM을 요청하면 쉽게 오류가 발생할 수 있습니다.

물론, 드라이버는 작성 시 이를 인식하고 기본적으로 필요한 모든 RAM을 요청할 수 있습니다. 요점은 드라이버가 교체를 염두에 두고 작성되지 않은 경우 문제가 될 수 있다는 것입니다.

관련 정보