zram vs zswap vs zcache Ultimate 안내서 : 사용시기


55
  1. 대체 뭐야? 그것들은 어떻게 다릅니 까 (아래 답변에 내 이해를 썼습니다)
  2. Zswap 시스템에서 페이지가 zswap에서 실제 스왑으로 제거 될 때 압축 된 페이지에 저장됩니까? (또는 저장하기 전에 압축 해제되어 있습니까?, AFAICT는 여전히 압축되어 있지만 확실하지 않습니다)
  3. zcache의 현재 상태는 무엇입니까? 그것은 3.11에서 분명히 제거되었거나 무언가였습니다. 이것은 무엇을 의미 하는가? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )

2
Ans 2. 커밋 메시지는 패치 (zcache에 관한)가 3.11에서 제거되었지만 main -mm 트리에 포함될 것이라고 명확하게 명시하고 있습니다 .
askb

1
@staticd 왜 자신의 대답을 받아들이지 않았습니까? 매우 좋습니다!
Léo Léopold Hertz 준영

페이지가 그것이 _ decompressed_ 인 zswap (압축 스왑 캐시)에서 제거하고 년 참조 중 하나에 따라, 백킹 스왑 장치에 배치된다 lwn.net/Articles/537422/] 이하 ...
Cbhihe

( lwn.net/Articles/537422- "다시 쓰기 쓰기 중에 zswap이 페이지를 압축 해제합니다 ..."). 아래 @mmin은 이것이 비효율적이거나 심지어 서버에 악용 될 수 있음을 시사합니다!
mwfearnley

답변:


2

2에 관해서는, zswap은 다시 쓸 때 페이지를 압축 해제하여 @Cbhihe의 의견을 확인합니다.

mm / zswap.c , 828 행 :

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

따라서 zswap은 디스크에 다시 쓰기 전에 압축 된 RAM 내 캐시를 잊어 버릴 수있는 상황에 유용합니다. 실제 스왑 장치로 백업해야하는 수명이 길고 수명이 긴 애플리케이션에는 적합하지 않습니다.


7
잠재적으로 위험한 zswap 동작을 발견했습니다. 응용 프로그램이 많은 페이지를 할당하고 매우 잘 압축하는 데이터 (예 : 0 시퀀스)를 쓰면 zswap은이를 커널 슬래브 메모리에 저장합니다. 그러나 실제 디스크 스와핑이 발생하면 저장된 데이터가 갑자기 '버스트'됩니다. 메모리에서 "기가 바이트"만 차지한 페이지의 많은 0은 이제 디스크에서 수백 기가 바이트로 압축 해제됩니다.
18:41에

2
공격자는 서버에 낮은 엔트로피 데이터를 저장하려고 시도 할 수 있습니다. 무언가가 교환을 트리거하면 서버가 작동하지 않습니다.
18:45에

1
이 업스트림을보고 했습니까?
Ken Sharp

비 압축 데이터 작성의 또 다른 단점 🤷
Mihail Malostanidis

공간과 시간에 압축 해제 된 형태로 데이터를 덤프하는 것이 더 좋습니다! 우리가 정말로 원하는 것 같습니다. 스왑 영역을 재구성하면 기존 코드를 많이 작성하거나 더 복잡한 할당 시스템이 필요하다고 가정 할 수 있습니다.
mwfearnley

75

이 세 가지 시스템에는 많은 것들이 있지만, 그것들을 잘 설명 할뿐 아니라 이들을 간단하게 비교할 수있는 것은 없습니다. 나는 그것을 이해하려고 노력했지만 내 머리는 폭발했다. 그런 다음 그것을 써서 작성해 보았고 머리가 다시 폭발했습니다. (구현 요약 참조) 나는 페어 단위 비교에 대해 많은 stackexchange 질문이 있기 때문에 이것을 게시하는 것이 유용 할 것이라고 생각했습니다.

다음과 같은 경우에 사용할 사항 요약 :

  1. HDD / SSD에 스왑 장치가없는 경우 ZRAM
  2. HDD / SSD에 교체 장치가있는 경우 ZSWAP .
  3. ZCACHE : ZSWAP의 기능을 수행하고 파일 시스템 페이지 캐시를 압축하고 속도를 높입니다. (이것은 내부적으로 훨씬 더 복잡하며 여전히 개발 중이므로 메인 커널에는 없습니다).

구현 요약 :

  1. ZRAM 은 압축 RAM 기반 스왑 장치입니다
  2. ZSWAP 는 이미 스왑이있는 경우 압축 된 캐시 입니다.
  3. ZCache 는 파일 시스템 페이지를 캐시하거나 데이터를 교환하는 데 사용할 수 있는 특수한 유형의 가상 RAM (초월 메모리)에 대한 백엔드입니다 .

세부:

  • ZRAM : RAM에 스왑 장치를 만듭니다. 여기에 전송 된 페이지는 저장 될 때 압축됩니다. 다른 스왑 장치보다 우선 순위가 높습니다. 스왑 아웃 된 페이지는 zram 장치가 가득 찰 때까지 우선적으로 전송되며 다른 스왑 장치 만 사용됩니다.

    • 장점 : 다른 (물리적) 스왑 장치와 독립적입니다. 사용 가능한 메모리를 확장 할 스왑 파티션이 없을 때 사용할 수 있습니다.
    • 단점 : 다른 스왑 장치 (HDD / SSD)가있는 경우 최적으로 사용되지 않습니다. zram 장치는 독립 스왑 장치이므로 가득 차면 스왑해야하는 새 페이지가 다음 스왑 장치로 직접 전송되므로 다음과 같습니다.
      1. LRU (가장 최근에 사용한) 반전 가능성이 있습니다 : 가장 최근에 스왑 된 데이터는 느린 디스크로 이동하고 오래 전에 스왑 된 비활성 페이지는 빠른 ZRAM에 남아 있습니다
      2. 디스크로 보내고받는 데이터는 압축되지 않기 때문에 많은 대역폭을 소비합니다.
    • 상태 : 메인 라인 커널로 합병 3.14. 시스템에서 활성화되면 스왑 장치를 설정하고 사용하기 위해 일부 사용자 공간 구성이 필요합니다.
  • ZSWAP :frontswap 시스템 후크 페이지를 교체하려고 시도하고 zswap 사용하여 다시 쓰기 캐시 HDD를 / SSD 스왑 장치 : 시도가 페이지를 압축하게되고 그것을 제대로 압축 데이터를 포함하는 경우 직접 디스크에 기록됩니다. 데이터가 압축되면 zswap 메모리 풀에 저장됩니다. RAM의 총 압축 페이지가 특정 크기를 초과 할 때 페이지가 메모리에서 스왑되면 LRU (Least Last Used Used) 압축 페이지가 곧 필요하지 않을 것이므로 디스크에 기록됩니다.

    • 이점 : 매우 효율적인 RAM 및 디스크 기반 스왑 사용. 필요한 쓰기 및 읽기 수를 줄이고 (데이터는 RAM에 압축되어 유지됨) 데이터가 압축 된 형태이므로 이러한 I / O 작업의 대역폭을 줄임으로써 디스크 I / O를 최소화합니다.
    • 제한 사항 : 디스크 기반 스왑 시스템의 향상 기능이므로 하드 디스크의 스왑 파티션에 따라 다릅니다.
    • 상태 : 3.11 메인 라인 리눅스 커널로 합병
  • ZCache : 초월 메모리 시스템의 백엔드입니다. 초월 메모리만을 사용하여 한 번에 페이지를 액세스 할 수있는 RAM과 같은 메모리 제공 putget전화를. 한 번에 한 바이트 씩 액세스 할 수있는 일반 메모리와는 다릅니다. frontswapcleancache시스템 후크 시도는 교환 각각 파일 시스템 페이지 캐시를 확보하고 초월 메모리 백엔드로 보낼 수 있습니다. zcache를 백엔드로 사용하면 데이터가 압축되어 RAM에 저장됩니다. 채워지면 압축 된 페이지가 스왑으로 제거됩니다. 대체 백엔드는 네트워크 컴퓨터에서 RAM 풀을 공유하는 RAMster입니다. 백엔드 frontswap와 함께 프런트 엔드 만 사용하는 zcache방식은 다음과 같습니다 zswap. (실제로 zswap은 zcache의 단순화 된 부분 집합입니다)

    • 이점 스왑 및 파일 시스템 캐시 모두에 대해 압축 캐싱을 제공합니다.
    • 상태 : 여전히 복잡하고 작업 중이므로 메인 라인이 아닙니다.

내가 찾은 최고의 리소스는 다음과 같습니다.



6
zram과 zswap을 모두 사용할 수 있습니까?
Phlya

2
세 가지 중 어느 것도 동시에 실행할 필요는 없습니다. zswap에는 전용 스왑 파티션이 필요없는 ZRAM과 달리 디스크 기반 스왑이 백엔드로 필요합니다. 그러나 스왑이있는 경우 ZRAM + 스왑 파티션은 zswap + swap 파티션보다 훨씬 덜 효과적입니다.
초에 정적으로

활성화 방법을 여기에 요약 해 주시겠습니까 zswap? 자세한 내용은 askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영


1
그 사실 zram을 나타내는 모든 대답 swap은 완전히 잘못되었습니다. zram아닙니다 swap. 에 swap유일한 CAN을 저장할 수 있습니다 zram. 그러나 이것은 많은 가능한 사용 사례 중 하나입니다!. 예를 들면 다음과 같습니다. "일부 사용 사례에는 / tmp 저장소, 스왑 디스크로 사용, / var 아래의 다양한 캐시 등이 포함될 수 있습니다.) kernel.org/doc/Documentation/blockdev/zram.txt 예를 들어 다른 일반 블록 장치처럼 포맷하고 마운트하는 임시 저장소.
빅터 Yarema
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.