zswap

zswap
zswap
개발자세스 제닝스 외
기입처C
운영 체제리눅스
유형Linux 커널 기능
면허증.GNU GPL
웹 사이트kernel.org

zswap은 가상 메모리 압축의 한 형태로 스왑된 페이지에 대한 압축쓰기 캐시를 제공하는 Linux 커널 기능입니다.스왑 아웃 시 메모리 페이지를 스왑 장치로 이동하는 대신 zswap은 압축을 수행한 후 시스템 RAM에 동적으로 할당된 메모리 풀에 저장합니다.나중에 실제 스왑 디바이스에 대한 쓰기가 연기되거나 완전히 방지되므로 스왑이 필요한 Linux 시스템의 I/O가 대폭 감소합니다.단,[1][2][3] 압축을 수행하기 위해 CPU 사이클이 추가로 필요합니다.

I/O가 감소했기 때문에 zswap은 임베디드 장치, 넷북 및 유사한 로우엔드 하드웨어 장치비롯하여 플래시 기반 스토리지를 사용하는 다양한 장치와 스토리지에 솔리드 스테이트 드라이브(SSD)를 사용하는 다른 장치에 이점을 제공합니다.플래시 메모리는 특성상 수명이 제한되기 때문에 스왑 공간 제공에 사용하지 않도록 하면 빠르게 [4]마모되는 것을 막을 수 있습니다.

내부

zswap은 frontswap에서 제공하는 API를 사용하여 Linux 커널의 나머지 가상 메모리 서브시스템에 통합됩니다.이것은 스왑 [5]공간으로 사용할 수 있는 다양한 유형의 스토리지를 추상화하는 Linux 커널의 메커니즘입니다.그 결과 zswap은 내부에서 의사 RAM 디바이스로서 볼 수 있는 것을 제공함으로써 frontswap의 백엔드 드라이버로서 동작한다.즉, frontswap API를 통해 zswap은 스왑 아웃 중에 메모리 페이지를 대행 수신할 수 있고 이미 스왑된 페이지의 페이지 장애를 대행 수신할 수 있습니다.이 두 경로에 대한 액세스를 통해 zswap은 스왑된 [1][6]페이지의 압축된 라이트백캐시 역할을 할 수 있습니다.

내부적으로 zswap은 Linux 커널의 암호화 API에서 제공되는 압축 모듈을 사용합니다. 예를 들어 Linux 커널에서 지원되는 하드웨어 압축 액셀러레이터를 사용하여 압축 태스크를 메인 CPU에서 오프로드할 수 있습니다.부팅 시 커널 부팅 매개 변수 을 통해 원하는 압축 모듈을 동적으로 선택할 수 있습니다. zswap.compressor. 지정하지 않으면 Lempel-Ziv-Overhumer(LZO) 압축이 선택됩니다.Linux 커널 버전 3.13부터는 커널 부트 파라미터 zswap.[1][2][4]enabled 1을 지정하여 zswap을 명시적으로 사용하도록 설정해야 합니다.

zswap에서 사용되는 메모리풀의 최대 사이즈는 sysfs 파라미터 max_pool_percent를 사용하여 설정할 수 있습니다.이 파라미터는 풀로 점유할 수 있는 총 시스템RAM의 최대 퍼센티지를 지정합니다.메모리 풀은 구성된 최대 크기로 사전 할당되지 않고 대신 필요에 따라 확장 및 축소됩니다.스왑을 실행한 결과 설정된 최대 풀사이즈에 도달한 경우 또는 메모리 부족으로 인해 풀을 확장할 수 없는 경우 스왑된 페이지는 LRU(Last Recently Used) 기준으로 메모리 풀에서 스왑 디바이스로 제거됩니다.캐시가 가득 차면 가장 오래된 캐시 페이지가 스왑 장치로 제거되므로 zswap은 진정한 스왑 캐시가 됩니다. 따라서 새로 스왑된 페이지를 압축하고 [1][4][7]캐시할 공간이 생깁니다.

zbud는 zswap에 의해 압축된 페이지를 저장하기 위해 내부적으로 사용되는 특수 목적 메모리 할당기로, Linux 커널을 위한 또 다른 가상 메모리 압축 구현인 Oracle[8]zbud 할당기가 다시 쓰는 것으로 구현됩니다.내부적으로 zbud는 물리적 메모리 페이지당 최대 2개의 압축 페이지("버디")를 저장하는 방식으로 작동하며, 이는 여유 공간을 쉽게 병합 및 재사용할 수 있다는 장점 및 메모리 사용률이 낮아질 수 있다는 단점을 모두 제공합니다.그러나 설계상 zbud는 원래 비압축 [3][9]페이지가 차지하는 메모리 용량보다 더 많은 메모리 공간을 할당할 수 없습니다.

역사

zswap과 zbud 둘 다 Seth Jennings에 의해 만들어졌다.첫 번째 공개 발표는 2012년 12월이었고, 개발은 2013년 5월까지 계속되었으며, 그 시점까지 코드베이스는 여전히 실험적인 커널 [10][11]기능의 상태를 유지하고 있습니다.

zswap(zbud와 함께)은 2013년 [4][12]9월 2일에 출시된 커널 버전 3.11에서 리눅스 커널 메인라인에 통합되었습니다.

2014년 6월 8일에 출시된 Linux 커널 버전 3.15 이후 zswap은 여러 스왑 [13][14]디바이스를 적절하게 지원합니다.

대체 수단

zswap의 대안 중 하나는 zram으로, Linux 커널과 유사하지만 여전히 다른 "압축된 페이지를 RAM으로 스왑" 메커니즘을 제공합니다.

가장 큰 차이점은 zram이 데이터를 저장하기 위해 RAM을 사용하는 압축 블록 장치를 제공한다는 것입니다. 이 장치는 일반적이고 별도의 스왑 장치 역할을 합니다.

이에 비해 zswap은 스왑 디바이스의 RAM 기반 캐시 역할을 합니다.이를 통해 zswap에는 zram에는 없는 덜 사용되는 스왑된 페이지에 대한 제거 메커니즘이 제공됩니다.그러나 설계상 zswap을 사용하려면 [15]적어도 하나의 기존 스왑 디바이스가 필요합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c d Seth Jennings (February 12, 2013). "The zswap compressed swap cache". LWN.net. Retrieved January 22, 2014.
  2. ^ a b Jenifer Hopper (December 11, 2012). "New Linux zswap compression functionality". IBM. Retrieved January 31, 2014.
  3. ^ a b Michael Larabel (July 11, 2013). "Zswap Merged Into The Linux 3.11 Kernel". Phoronix. Retrieved February 5, 2014.
  4. ^ a b c d "Linux kernel documentation: Documentation/vm/zswap.txt". kernel.org. November 22, 2013. Retrieved January 22, 2014.
  5. ^ Dan Magenheimer (April 22, 2010). "Frontswap [PATCH 0/4] (was Transcendent Memory): Overview". gmane.org. Retrieved December 23, 2014.
  6. ^ Jonathan Corbet (May 4, 2010). "Cleancache and Frontswap". LWN.net. Retrieved March 26, 2014.
  7. ^ "Linux kernel source tree: kernel/git/torvalds/linux.git: zswap: add to mm/". kernel.org. July 11, 2013. Retrieved February 5, 2014.
  8. ^ Dan Magenheimer (March 29, 2012). "Zcache and RAMster (oh, and frontswap too): Overview and some benchmarking" (PDF). oss.oracle.com. p. 12. Retrieved August 19, 2015.
  9. ^ "Linux kernel source tree: kernel/git/torvalds/linux.git: zbud: add to mm/". kernel.org. July 11, 2013. Retrieved February 5, 2014.
  10. ^ "[PATCH 0/8] zswap: compressed swap caching". gmane.org. December 11, 2012. Retrieved January 5, 2014.
  11. ^ "[PATCHv10 0/4] zswap: compressed swap caching". gmane.org. May 8, 2013. Retrieved January 5, 2014.
  12. ^ "Linux kernel 3.11, Section 9. Zswap: A compressed swap cache". kernelnewbies.org. September 2, 2013. Retrieved January 22, 2014.
  13. ^ "Linux kernel 3.15, Section 4. Memory management". kernelnewbies.org. June 8, 2014. Retrieved June 15, 2014.
  14. ^ "Linux kernel source tree: kernel/git/torvalds/linux.git: mm/zswap: support multiple swap devices". kernel.org. April 7, 2014. Retrieved June 15, 2014.
  15. ^ Dan Magenheimer (April 3, 2013). "In-kernel memory compression". LWN.net. Retrieved March 8, 2014.