가상 메모리 압축
Virtual memory compression가상 메모리 압축(RAM 압축, 메모리 압축이라고도 함)은 데이터 압축을 활용하여 보조 스토리지로 들어오고 나가는 페이징 요청의 크기나 수를 줄이는 메모리 관리 기법이다.[1]가상 메모리 압축 시스템에서 가상 메모리에서 호출할 페이지는 압축되어 물리적 메모리에 저장되며, 일반적으로 RAM(Random-Access Memory) 또는 하드 디스크 드라이브(HDD)나 솔리드 스테이트 드라이브(SSD)와 같은 보조 저장소로 압축되어 전송된다.두 경우 모두 내용이 압축된 가상 메모리 범위는 액세스 불가능으로 표시되므로 압축된 페이지에 액세스하려는 시도가 페이지 장애와 프로세스 역전을 유발할 수 있다(보조 스토리지 및 압축 해제에서 회수).페이징되는 데이터의 공간은 압축 프로세스에 의해 감소된다. 첫째로, 압축된 부분은 RAM에 보관되는 동안, 해제된 RAM은 사용 가능한 물리적 메모리 풀로 반환된다.두 번째 경우에는 압축된 데이터가 보조 저장소로 전송되지만 결과적으로 I/O 작동은 더 작기 때문에 시간이 덜 걸린다.[2][3]
zswap, zram, Helix Software Company의 허리케인을 포함한 일부 구현에서는 전체 프로세스가 소프트웨어로 구현된다.IBM의 MXT와 같은 다른 시스템에서는 로컬 캐시와 RAM 간의 전송을 처리하는 전용 프로세서에서 압축 프로세스가 발생한다.
가상 메모리 압축은 사용되지 않는 메모리 블록을 제거하고 어떤 경우에는 사용된 메모리 영역을 통합하여 단편화를 줄이고 효율성을 향상시키는 가비지 수집(GC) 시스템과 구별된다.가상 메모리 압축은 비활성 프로세스가 일시 중단됐다가 전체적으로 압축되는 커넥틱스의 RAM 더블러(온라인 압축도 했지만)나 애플 OS 7.1과 같은 컨텍스트 스위칭 시스템과도 구별된다.[4]
혜택들
페이징 요청으로 인한 I/O 활동을 줄임으로써 가상 메모리 압축은 전반적인 성능 향상을 가져올 수 있다.성능 향상 정도는 압축 코프로세서의 가용성, CPU의 여유 대역폭, I/O 채널의 속도, 물리적 메모리의 속도, 물리적 메모리 내용의 압축성 등 다양한 요인에 따라 달라진다.
멀티코어 멀티스레드 CPU에서 일부 벤치마크는 50% 이상의 성능 향상을 보여 준다.[5][6]
임베디드 기기와 같은 일부 상황에서는 보조 저장이 제한되거나 존재하지 않는다.이러한 경우 가상 메모리 압축은 가상 메모리 시스템이 작동할 수 있도록 허용할 수 있으며, 그렇지 않으면 가상 메모리를 사용하지 않도록 설정해야 한다.이를 통해 시스템은 가상 메모리가 없는 환경에서 작동할 수 없는 특정 소프트웨어를 실행할 수 있다.[7]
플래시 메모리는 최대 100회까지 소거할 수 있는 최대 소거 주기 횟수에 특정한 내구성 제한이 있다.플래시 메모리가 유일한 보조 스토리지 시스템으로 사용되는 시스템에서 가상 메모리 압축을 구현하면 보조 스토리지에 쓰여지는 총 데이터 양을 줄일 수 있어 시스템 신뢰성이 향상된다.
단점
낮은 압축 비율
주요 이슈 중 하나는 실제 부하에서 물리적 메모리의 내용을 압축할 수 있는 정도 입니다.효율적인 프로그래밍 기법과 데이터 아키텍처는 데이터 세트의 중복성을 자동으로 제거하도록 설계되기 때문에 프로그램 코드와 물리적 메모리에 보관된 많은 데이터는 압축성이 높지 않은 경우가 많다.다양한 연구에 따르면 프로그램 데이터의 경우 2:1에서 2.5:1 사이의 일반적인 데이터 압축 비율을 보여주는데,[8][9] 이는 디스크 압축을 통해 일반적으로 달성할 수 있는 압축 비율과 유사하다.[7]
배경 I/O
가상 메모리 압축이 측정 가능한 성능 향상을 제공하기 위해서는 가상 메모리 시스템의 처리량이 압축되지 않은 등가물과 비교했을 때 향상되어야 한다.따라서 압축에 의해 도입된 추가 처리량은 전체 지연 시간을 증가시켜서는 안 된다.그러나 압축성이 높은 데이터 세트를 가진 I/O 바인딩 시스템이나 애플리케이션에서는 상당한 이득이 될 수 있다.[7]
스레싱 증가
압축 시스템에서 사용하는 물리적 메모리는 시스템이 실행하는 프로세스에 사용할 수 있는 물리적 메모리의 양을 줄여 페이징 활동이 증가하고 가상 메모리 압축의 전반적인 효율성이 저하될 수 있다.페이징 활동과 사용 가능한 물리적 메모리 사이의 이러한 관계는 대략 지수적이며, 이는 시스템 프로세스에 사용할 수 있는 물리적 메모리의 양을 줄이면 페이징 활동이 지수적으로 증가한다는 것을 의미한다.[10][11]
물리적 메모리의 여유 양이 적고 페이징이 상당히 보편적인 상황에서 압축 시스템에 의해 제공되는 성능 이득(보조 저장소로 직접 또는 보조 저장소에서 직접 페이징과 비교)은 시스템 성능 저하를 초래하는 페이지 오류율 증가로 상쇄될 수 있다.물리적 메모리를 충분히 사용할 수 있고 페이징 활동이 적은 반대 상태에서는 압축이 눈에 띄도록 성능에 영향을 주지 않을 수 있다.페이징 활동이 많은 낮은 RAM과 페이징 활동이 적은 많은 RAM 사이의 중간 지점은 가상 메모리 압축이 가장 유용할 수 있는 지점이다.그러나 프로그램 데이터가 압축될수록 압축 데이터를 저장하는 데 물리적 메모리가 덜 필요하기 때문에 성능 향상이 뚜렷하다.
예를 들어, 압축 페이지 캐시 사용을 극대화하기 위해, Helix Software Company의 Hurricane 2.0은 사용자가 구성할 수 있는 압축 거부 임계값을 제공한다.이 가상 메모리 압축 시스템은 4KiB 페이지의 처음 256 ~ 512바이트를 압축하여 특정 페이지에 대해 구성된 압축 수준 임계값을 달성할 수 있는지 여부를 결정하며, 가능한 경우 페이지의 나머지 부분을 압축 캐시에 저장하고, 그렇지 않으면 페이지가 보조 저장소로 보내진다.일반 호출 시스템을 통해이 임계값의 기본 설정은 8:1 압축 비율이다.[12][4]
가격/성능 문제
하드웨어 구현에서 기술은 또한 시스템의 다양한 구성 요소들 간의 가격 차이에 의존한다. 예를 들어, RAM 비용과 압축 전용 프로세서의 비용 차이에 의존한다.다양한 구성 요소의 상대적인 가격/성능 차이는 시간이 지남에 따라 달라지는 경향이 있다.예를 들어 압축 코프로세서의 추가는 CPU 비용에 최소한의 영향을 미칠 수 있다.
우선 순위 지정
일반적인 가상 메모리 구현에서 페이징은 가장 최근에 사용된 기준에 따라 발생하며, 잠재적으로 압축 알고리즘이 가장 낮은 우선 순위 데이터를 처리하는 CPU 사이클을 소모하게 할 수 있다.게다가, 프로그램 코드는 보통 읽기 전용이기 때문에 절대 호출되지 않는다.대신에 코드는 간단히 폐기되고, 필요한 경우 프로그램의 보조 저장 파일에서 다시 로드된다.이 경우, 특히 플래시 메모리 장치에서 제거하려는 I/O 사이클이 훨씬 짧기 때문에 압축에 대한 막대가 더 높다.
정량화를 사용한 압축
가속기 설계자는 값의 비트 너비를 줄이고 데이터 이동 비용을 줄이기 위해 정량화를 활용한다.그러나 감소된 비트 너비에 맞지 않는 값은 오버플로를 초래한다(우리는 이 값을 특이치라고 부른다).따라서 가속기는 오버플로에 대해 내성이 있는 응용 프로그램에 대해 정량화를 사용한다.대부분의 애플리케이션에서 특이치 비율은 낮으며 범용 프로세서에서 정량화를 이용할 수 있는 기회를 제공하는 값들은 종종 좁은 범위 안에 있다.그러나 범용 프로세서에서 정량화의 소프트웨어 구현에는 세 가지 문제가 있다.첫째, 프로그래머는 수동으로 변환과 값을 정량화하고 정량화하는 추가 지침을 구현하여 프로그래머의 노력과 성능 오버헤드를 부과해야 한다.둘째, 특이치를 적용하기 위해 정량화된 값의 비트 너비가 원래 값보다 크거나 같은 경우가 많다.셋째, 프로그래머는 표준 비트 너비를 사용해야 한다. 그렇지 않으면 좁은 정수를 나타내기 위해 비표준 비트 너비(즉, 1–7, 9–15, 17–31)를 추출하면 소프트웨어 기반 정량화의 오버헤드가 악화된다.정량화를 위한 범용 프로세서의 메모리 계층 구조에서의 하드웨어 지원은 이러한 문제를 해결할 수 있다.하드웨어 지원으로 값을 몇 개 유연한 비트 수로 표시하고 특이치를 별도의 공간에 원래 형식으로 저장할 수 있어 오버플로를 방지할 수 있다.정량화 매개변수와 데이터 레이아웃을 하드웨어로 전송하는 소프트웨어-하드웨어 상호작용을 통해 정량화된 값을 찾는 메타데이터와 오버헤드를 최소화한다.그 결과 투명한 하드웨어 기반 정량화는 캐시 압축 기술에 비해 (i) 메타데이터가 적음, (ii) 부동소수점 값과 다중 데이터 유형의 캐시 블록에 대한 압축비율이 높음, (iii) 압축 블록을 찾기 위한 오버헤드가 낮음 등의 3가지 장점을 가지고 있다.[13]
역사
가상 메모리 압축은 기술로서 오락가락했다.무어의 법칙과 DDR3 등 향상된 RAM 인터페이스로 인해 RAM과 외장 스토리지의 가격과 속도가 급락해 가상 메모리 압축의 필요성이 줄어든 반면 플래시 기반 시스템의 등장과 함께 멀티코어 프로세서, 서버 팜, 모바일 기술과 함께 가상 메모리 압축이 더욱 매력적이다.
오리진스
Paul R. Wilson은 1990년에 ACM OOPSLA/ECOOP '90 가비지 수집에 관한 워크숍("Hump Management and Memory Writeries의 일부 문제와 전략")에서 회람된 논문에서 가상 메모리 페이지의 압축 캐싱을 제안했고, 1991년 1월에 ACM SIGPlan 고시에 출연했다.[14]
Helix Software Company는 1992년에 가상 메모리 압축을 개척하여 그 해 10월에 그 과정에 대한 특허 출원을 했다.[2]1994년과 1995년에, Helix는 비디오 카드와 다른 장치에 시험압축과 2차 메모리 캐시를 사용하여 공정을 개선했다.[3]그러나 헬릭스는 1996년 7월까지 가상 메모리 압축이 통합된 제품을 출시하지 않았고, 허리케인 2.0의 출시로 Stac Electronics 렘펠-Ziv-Stac 압축 알고리즘을 사용했으며, 또한 성능상의 이점을 얻기 위해 화면 밖 비디오 RAM을 압축 버퍼로 사용하였다.[12]
1995년에 RAM은 메가바이트당 거의 50달러였고 마이크로소프트의 윈도 95는 최소 4MB의 RAM을 열거했다.[15]높은 RAM 요구로 인해 압축 기술을 사용하여 "메모리"를 얻었다고 주장하는 여러 프로그램이 출시되었다.가장 악명 높은 것은 Syncronys Softcorp의 SoftRAM 프로그램이었다.소프트램은 압축 기술을 전혀 포함하지 않은 '플라시보 소프트웨어'로 밝혀졌다.[16][7]허리케인, 마그나람 등 다른 제품도 가상 메모리 압축을 포함했지만 런 길이 인코딩만 구현해 결과가 좋지 않아 부정적인 평가를 받았다.[17]
1997년 4월 8일자 PC 매거진에서, PC 매거진은 여러 소프트웨어 가상 메모리 압축 도구의 성능 향상 주장에 대한 포괄적인 테스트를 발표했다.PC 매거진은 테스트에서 허리케인 사용으로 인한 성능 개선은 최소(전체적으로 5%)로 나타났으며 다른 패키지에서는 전혀 개선되지 않았다.[17]그러나 테스트는 단일 코어가 있고 단일 스레드가 있는 Intel Pentium 시스템에서 실행되었으며, 따라서 압축은 모든 시스템 활동에 직접적인 영향을 미쳤다.
1996년 IBM은 압축 실험을 시작했고, 2000년 IBM은 MXT(Memory eXpansion Technology)를 발표했다.[18][19]MXT는 CPU와 메모리 컨트롤러 사이에서 CPU 캐시 역할을 하는 독립형 칩이었다.MXT는 물리적 메모리에서 수신되는 모든 데이터 헤더를 압축하는 통합 압축 엔진을 가지고 있었다.이후 인텔이 이 기술을 시험한 결과, PC 매거진이 허리케인과 함께 획득한 결과와 유사한 전체 시스템 성능 향상이 5~20%로 나타났다.[20]
최근 개발
- 2008년 초, zram(원래 compcache)이라는 이름의 Linux 프로젝트가 출시되었고, 2013년 업데이트에서는 Chrome OS와[21] Android 4.4에 통합되었다.
- 2010년 IBM은 가상 메모리 압축을 구현하는 AIX 6.1용 액티브 메모리 확장(AME)을 출시했다.[22]
- 2012년 POWER7+ 칩의 일부 버전에는 AIX에서 가상 메모리 압축에 사용되는 데이터 압축 지원용 842 압축 알고리즘을 사용하는 AME 하드웨어 가속기가 포함되었다.[23]보다 최신 POWER 프로세서가 이 기능을 계속 지원한다.
- 2012년 12월 zswap 프로젝트가 발표되었고, 2013년 9월 Linux 커널 메인라인으로 통합되었다.
- 2013년 6월 애플은 윌슨-카플란 WKdm 알고리즘을 이용해 OS X 매버릭스에 가상 메모리 압축을 포함하겠다고 발표했다.[24][25]
- Windows 10(빌드 10525)용 2015년 8월 10일 "Windows Insider Preview" 업데이트는 RAM 압축 지원을 추가했다.[26]
참고 항목
참조
- ^ Wilson, Paul R.; Kaplan, Scott F.; Smaragdakis, Yannis (1999-06-06). The Case for Compressed Caching in Virtual Memory Systems (PDF). USENIX Annual Technical Conference. Monterey, California, USA. pp. 101–116.
- ^ a b 미국 특허 5559978
- ^ a b 미국 특허 5875474
- ^ a b Mac Memory Booster Gets an Upgrade. ComputerWorld Magazine. 1996-09-09. Retrieved 2015-01-12.
- ^ Jennings, Seth. "Transparent Memory Compression in Linux" (PDF). linuxfoundation.org. Retrieved 2015-01-01.
- ^ "Performance numbers for compcache". Retrieved 2015-01-01.
- ^ a b c d Paul, Matthias R. (1997-07-30) [1996-04-14]. "Kapitel II.18. Mit STACKER Hauptspeicher 'virtuell' verdoppeln…" [Utilizing STACKER to 'virtually' double main memory…]. NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds [Tips & tricks for Novell DOS 7, with a focus on undocumented details, bugs and workarounds]. MPDOSTIP. Release 157 (in German) (3 ed.). Archived from the original on 2016-11-05. Retrieved 2012-01-11.
- ^ Simpson, Matthew (2014). "Analysis of Compression Algorithms for Program Data" (PDF). p. 6. Retrieved 2015-01-09.
- ^ Rizzo, Luigi (1996). "A very fast algorithm for RAM compression". ACM SIGOPS Operating Systems Review. 31 (2): 8. doi:10.1145/250007.250012. S2CID 18563587. Retrieved 2015-01-09.
- ^ Denning, Peter J. (1968). "Thrashing: Its causes and prevention" (PDF). Proceedings AFIPS, Fall Joint Computer Conference. 33: 918. Retrieved 2015-01-05.
- ^ Freedman, Michael J. (2000-03-16). "The Compression Cache: Virtual Memory Compression for Handheld Computers" (PDF). Retrieved 2015-01-09.
- ^ a b "Hurricane 2.0 Squeezes the Most Memory from Your System". PC Magazine. 1996-10-08. Retrieved 2015-01-01.
- ^ a b Lenjani, Marzieh (2019-11-03). "An Overflow-free Quantized Memory Hierarchy in General-purpose Processors" (PDF). In Proceedings of the IEEE International Symposium on Workload Characterization. Retrieved 2020-03-16.
- ^ Wilson, Paul R. (1991). "Some Issues and Strategies in Heap Management and Memory Hierarchies". ACM SIGPLAN Notices. 26 (3): 45–52. doi:10.1145/122167.122173. S2CID 15404854.
- ^ "Windows 95 Installation Requirements". Microsoft. Retrieved 2015-01-01.
- ^ "SoftRAM Under Scruitny". PC Magazine. 1996-01-23. Retrieved 2015-01-01.
- ^ a b "Performance Enhancers". PC Magazine. 1997-04-08. Retrieved 2015-01-01.
- ^ "IBM Research Breakthrough Doubles Computer Memory Capacity". IBM. 2000-06-26. Retrieved 2015-01-01.
- ^ "Memory eXpansion Technologies". IBM. Retrieved 2015-01-01.
- ^ Kant, Krishna (2003-02-01). "An Evaluation of Memory Compression Alternatives". Intel Corporation. Retrieved 2015-01-01.
- ^ "CompCache". Google code. Retrieved 2015-01-01.
- ^ "AIX 6.1 Active Memory Expansion". IBM. Retrieved 2015-01-01.
- ^ "IBM Power Systems Hardware Deep Dive" (PDF). IBM. Retrieved 2015-01-01.
- ^ "OS X 10.9 Mavericks: The Ars Technica Review". 2013-10-22.
- ^ "The Case for Compressed Caching in Virtual Memory Systems".
- ^ Aul, Gabe (2015-08-18). "Announcing Windows 10 Insider Preview Build 10525". Blogging Windows. Microsoft. Retrieved 2015-08-19.