답변:
실제로, 당신이 묘사 한 것은 풍선 도움말과 '같은 페이지 병합'을 혼란스럽게합니다. 구별을 분명히하기 위해이 두 가지를 자세히 설명하려고합니다.
메모리 벌룬
이는 게스트 가상 머신에 할당 된 일부 메모리 가 다른 게스트 나 호스트 자체 (캐시 등)에서 계속 사용할 수 있도록하는 요령 입니다 . 다음과 같은 방식으로 수행됩니다.
게스트 커널에는 드라이버가 주입되어 게스트 메모리 사용을 모니터링하고 사용되지 않은 메모리 중 일부를 '훔쳐'(게스트 메모리 공간에 자체 할당하여이 게스트에서 해당 범위에 닿을 수있는 것은 없는지 확인)합니다.
그런 다음 호스트 커널에 알려줍니다. 실제로 메모리에서 이러한 메모리 페이지를 제거하고 게스트에서 사용하지 않을 것입니다 (게스트가 약간의 메모리 압력을 경험할 때까지 풍선이 수축하고 사용합니다) 다시이 범위).
궁극적으로 커널은 정확히 동일한 메모리를 다른 게스트에 할당 할 수 있으며 게스트가 많은 여유 메모리로 실행하는 경우 전체 메모리 사용량을 훨씬 효율적으로 만들 수 있습니다.
동일한 페이지 병합
이 기술은 동일한 이유로 메모리 페이지를 식별합니다. 어떤 이유로 인해 쓰기시 복사로 'quasi-read-only'로 표시되지 않은 것으로 표시됩니다.
이제 OS 수준에서는 이러한 종류의 트릭에 대한 요구가 제한적입니다. 간단히 말해, 대부분의 메모리 페이지가 동일한 경우 대부분 응용 프로그램 코드, 라이브러리 등이기 때문에 이미 읽기 전용입니다 (때로는 CoW가없는 경우도 있음). 이들은 기본적으로 메모리 맵을 통해 열리므로 커널은 유지할 수 있습니다. 코어에는 사본이 하나만 있습니다 (있는 경우에는 완전히 페이징 아웃하고 필요한 경우 기본 저장소에서 페이징 할 수 있음).
가상화 된 OS 수준에서 각 게스트 하위 시스템 내에서 동일한 원칙이 올바르게 적용됩니다. 그러나 호스트 커널은 두 게스트가 거의 동일한 코드를 실행하고 동일한 메모리를 공유하는지 여부를 모릅니다. 게스트는이를 조정하기 위해 통신하지 않습니다.
어떤은 종종 동일한 메모리 페이지에 대한 전체 시스템을 검색 할 수 있습니다 이유 - 대부분의 시간, 그들은 동일합니다 걸쳐 되지 각각 내에서, 게스트 OS의 - 게스트 커널은 그것의 범위 내에서 깔끔한 메모리를 유지 괜찮은 일을한다. 따라서 하나의 호스트 커널이 50 개 이상의 게스트를 처리하는 일반적인 VM 환경에서 메모리 절약 효과는 상당히 클 수 있습니다.
한 번에 둘 다
벌룬 및 Same-Page-Merging은 공존 할 수 있으므로 동일한 시스템에 대해 상당한 메모리 오버 커밋을 달성 할 수 있습니다.
귀하의 질문에 대답하기 위해-Same-Page-Merging은 때로는 OS 수준에서 활성화 될 수 있습니다. 해석되는 페이지 공유와 관련이 있으므로 동일한 백업 파일이 없어도 동일 할 수 있습니다.
Chromium 예제에서 프로세스 바이너리 자체는 이미 읽기 전용 시작 맵을 통해 중복 제거되어 있으며 동일한 메모리 공간을 공유합니다. 페이지 캐시 (탭의 내용)는 일반적으로 디스크 캐시가 관리되는 방식으로 인해 프로세스 (읽기 전용 복사 중 쓰기)간에 공유됩니다. VM의 다른 프로세스간에 동일한 온 디스크 파일을 가상으로 열 수 있습니다. 최적의 의미.
장점은 다른 Javascript 엔진의 공유 상태에서 가장 분명하지만, 동일한 메모리 레이아웃으로 할당되는지 확실하지 않으므로 전체 메모리 페이지가 동일해야합니다.
이것은 모바일 시스템에서 다릅니다. 예를 들어, Android는 KSM을 광범위하게 사용하여 서로 다른 애플리케이션간에 동일한 코드를 중복 제거합니다.
두 경우 모두 Linux (Kernel SamePage Merging)에서 직접 활성화 할 수 있습니다. 운전자는이 답변을 읽은 후 해석이 가능하고 자신의 목적에 적합한 지 여부를 스스로 결정할 수있는 다양한 통계를 내 보냅니다.