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
Starting ksm: [ OK ]
ksm
서비스는 기본 시작 시퀀스에 추가할 수 있습니다. systemctl 명령을 사용하여 ksm
서비스를 영구적으로 만듭니다.
# systemctl enable ksm