8.3. 커널 동일 페이지 병합(KSM)
KVM 하이퍼바이저에서 사용하는 KSM(커널 동일 페이지 병합)을 통해 KVM 게스트가 동일한 메모리 페이지를 공유할 수 있습니다. 이러한 공유 페이지는 일반적으로 공통 라이브러리 또는 기타 동일한 고가용성 데이터입니다. KSM은 메모리 복제를 방지하여 동일하거나 유사한 게스트 운영 체제의 게스트 밀도를 높일 수 있습니다.
공유 메모리의 개념은 최신 운영 체제에서 일반적입니다. 예를 들어 프로그램이 처음 시작되면 모든 메모리를 부모 프로그램과 공유합니다. 자식 또는 부모 프로그램이 이 메모리를 수정하려고 하면 커널은 새 메모리 영역을 할당하고, 원래 내용을 복사하고 프로그램이 이 새 영역을 수정할 수 있도록 합니다. 이 작업을 쓰기 시 복사라고 합니다.
KSM은 이 개념을 역순으로 사용하는 Linux 기능입니다. KSM을 사용하면 커널이 두 개 이상의 이미 실행 중인 프로그램을 검사하고 메모리를 비교할 수 있습니다. 메모리 영역 또는 페이지가 동일한 경우 KSM은 여러 동일한 메모리 페이지를 단일 페이지로 줄입니다. 그런 다음 이 페이지는 쓰기 시 복사로 표시됩니다. 페이지 콘텐츠를 게스트 가상 시스템에서 수정하면 해당 게스트에 대해 새 페이지가 생성됩니다.
이는 KVM을 사용한 가상화에 유용합니다. 게스트 가상 머신이 시작되면 호스트
qemu-kvm
프로세스의 메모리만 상속합니다. 게스트가 실행 중이면 게스트 운영 체제 이미지의 콘텐츠를 게스트가 동일한 운영 체제 또는 애플리케이션을 실행할 때 공유할 수 있습니다. KSM을 사용하면 KVM에서 동일한 게스트 메모리 영역을 공유할 것을 요청할 수 있습니다.
KSM은 향상된 메모리 속도 및 사용률을 제공합니다. KSM을 사용하면 일반적인 프로세스 데이터가 캐시 또는 주 메모리에 저장됩니다. 이를 통해 일부 애플리케이션 및 운영 체제의 성능을 향상시킬 수 있는 KVM 게스트의 캐시 누락이 줄어듭니다. 둘째, 메모리를 공유하면 게스트의 전체 메모리 사용량이 줄어들어 더 높은 밀도와 리소스 사용률을 높일 수 있습니다.
참고
Red Hat Enterprise Linux 7에서 KSM은 NUMA 인식. 이를 통해 페이지를 병합하는 동안 NUMA 현지성을 고려할 수 있으므로 페이지와 관련된 성능 저하가 원격 노드로 이동되지 않습니다. KSM을 사용하는 경우 노드 간 메모리 병합을 방지하는 것이 좋습니다. KSM이 사용 중인 경우 NUMA 노드 간에 페이지를 병합하지 않도록
/sys/kernel/mm/ksm/merge_across_nodes
튜닝 가능 항목을 0
로 변경합니다. 이 작업은 virsh node-memory-tune --shm-merge-across-nodes 0 명령을 사용하여 수행할 수 있습니다. 커널 메모리 회계 통계는 대량의 교차 노드 병합 후 결국 서로 모순될 수 있습니다. 따라서 KSM 데몬에서 대량의 메모리를 병합한 후 numad가 혼동될 수 있습니다. 시스템에 사용 가능한 메모리가 많은 경우 KSM 데몬을 끄고 비활성화하여 더 높은 성능을 얻을 수 있습니다. NUMA에 대한 자세한 내용은 9장. NUMA"를 참조하십시오.
중요
KSM을 사용하지 않고도 커밋된 RAM에 스왑 크기가 충분한지 확인합니다. KSM은 동일하거나 유사한 게스트의 RAM 사용량을 줄입니다. 충분한 스왑 공간없이 게스트를 오버 커밋할 수 있지만 게스트 가상 머신 메모리 사용을 사용하면 페이지가 공유되지 않을 수 있기 때문에 권장되지 않습니다.
Red Hat Enterprise Linux는 KSM을 제어하기 위한 두 가지 다른 방법을 사용합니다.
ksm
서비스는 KSM 커널 스레드를 시작하고 중지합니다.ksmtuned
서비스는 동일한 페이지 병합을 동적으로 관리하면서ksm
서비스를 제어하고 조정합니다.ksmtuned
는ksm
서비스를 시작하고 메모리 공유가 필요하지 않은 경우ksm
서비스를 중지합니다. 새 게스트가 생성 또는 삭제되면 실행할retune
매개 변수를 사용하여ksmtuned
에 지시합니다.
이러한 두 서비스는 모두 표준 서비스 관리 툴로 제어됩니다.
참고
KSM은 Red Hat Enterprise Linux 6.7에서 기본적으로 꺼져 있습니다.
8.3.1. KSM 서비스 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
ksm
서비스는 qemu-kvm 패키지에 포함되어 있습니다.ksm
서비스가 시작되지 않으면 KSM(커널 동일한 페이지 병합)은 2000 페이지만 공유합니다. 이 기본값은 제한된 메모리 절감 이점을 제공합니다.ksm
서비스가 시작되면 KSM은 호스트 시스템의 기본 메모리의 절반까지 공유합니다. KSM이 더 많은 메모리를 공유할 수 있도록ksm
서비스를 시작합니다.
systemctl start ksm
# systemctl start ksm
Starting ksm: [ OK ]
ksm
서비스는 기본 시작 시퀀스에 추가할 수 있습니다. systemctl 명령을 사용하여 ksm
서비스를 영구적으로 만듭니다.
systemctl enable ksm
# systemctl enable ksm