7장. KSM


공유 메모리의 개념은 최신 운영 체제에서 일반적입니다. 예를 들어 프로그램이 처음 시작되면 모든 메모리를 부모 프로그램과 공유합니다. 자식 또는 부모 프로그램이 이 메모리를 수정하려고 하면 커널은 새 메모리 영역을 할당하고, 원래 내용을 복사하고 프로그램이 이 새 영역을 수정할 수 있도록 합니다. 이 작업을 쓰기 시 복사라고 합니다.
KSM은 이 개념을 역순으로 사용하는 새로운 Linux 기능입니다. KSM을 사용하면 커널이 두 개 이상의 이미 실행 중인 프로그램을 검사하고 메모리를 비교할 수 있습니다. 메모리 영역 또는 페이지가 동일한 경우 KSM은 여러 동일한 메모리 페이지를 단일 페이지로 줄입니다. 그런 다음 이 페이지는 쓰기 시 복사로 표시됩니다. 페이지 콘텐츠를 게스트 가상 시스템에서 수정하면 해당 게스트 가상 머신에 대한 새 페이지가 생성됩니다.
이는 KVM을 사용한 가상화에 유용합니다. 게스트 가상 머신이 시작되면 상위 qemu-kvm 프로세스의 메모리만 상속합니다. 게스트 가상 머신이 실행되면 게스트가 동일한 운영 체제 또는 애플리케이션을 실행할 때 게스트 가상 머신 운영 체제 이미지의 콘텐츠를 공유할 수 있습니다.
참고
페이지 중복 제거 기술(KSM 구현에서도 사용됨)은 여러 게스트에서 정보를 유출하는 데 사용할 수 있는 사이드 채널을 도입할 수 있습니다. 우려되는 경우 게스트당 KSM을 비활성화할 수 있습니다.
KSM은 향상된 메모리 속도 및 사용률을 제공합니다. KSM을 사용하면 일반적인 프로세스 데이터가 캐시 또는 주 메모리에 저장됩니다. 이를 통해 일부 애플리케이션 및 운영 체제의 성능을 향상시킬 수 있는 KVM 게스트의 캐시 누락이 줄어듭니다. 둘째, 메모리를 공유하면 더 높은 밀도와 리소스 사용률을 높일 수 있는 게스트의 전체 메모리 사용량이 줄어듭니다.
참고
Red Hat Enterprise Linux 6.5부터 KSM은 NUMA 인식입니다. 이를 통해 페이지를 병합하는 동안 NUMA 현지성을 고려할 수 있으므로 페이지와 관련된 성능 저하가 원격 노드로 이동되지 않습니다. KSM을 사용하는 경우 노드 간 메모리 병합을 방지하는 것이 좋습니다. KSM이 사용 중인 경우 NUMA 노드 간에 페이지를 병합하지 않도록 /sys/kernel/mm/ksm/merge_across_nodes 튜닝 가능 항목을 0 으로 변경합니다. 커널 메모리 회계 통계는 대량의 교차 노드 병합 후 결국 서로 모순될 수 있습니다. 따라서 KSM 데몬에서 대량의 메모리를 병합한 후 numad가 혼동될 수 있습니다. 시스템에 사용 가능한 메모리가 많은 경우 KSM 데몬을 끄고 비활성화하여 더 높은 성능을 얻을 수 있습니다. NUMA에 대한 자세한 내용은 Red Hat Enterprise Linux 성능 튜닝 가이드 를 참조하십시오.
Red Hat Enterprise Linux는 KSM을 제어하기 위한 두 가지 다른 방법을 사용합니다.
  • ksm 서비스는 KSM 커널 스레드를 시작하고 중지합니다.
  • ksmtuned 서비스는 동일한 페이지 병합을 동적으로 관리하면서 ksm 을 제어하고 조정합니다. ksmtuned 서비스는 ksm 을 시작하고 메모리 공유가 필요하지 않은 경우 ksm 서비스를 중지합니다. ksmtuned 서비스에 새 게스트가 생성 또는 삭제될 때 실행할 retune 매개변수가 있어야 합니다.
이러한 두 서비스는 모두 표준 서비스 관리 툴로 제어됩니다.

KSM 서비스

ksm 서비스는 qemu-kvm 패키지에 포함되어 있습니다. KSM은 Red Hat Enterprise Linux 6에서 기본적으로 꺼져 있습니다. 그러나 Red Hat Enterprise Linux 6를 KVM 호스트 물리적 시스템으로 사용하는 경우 ksm/ksmtuned 서비스를 통해 켜질 수 있습니다.

ksm 서비스가 시작되지 않으면 KSM은 2000 페이지만 공유합니다. 이 기본값은 낮으며 제한된 메모리 저장 이점을 제공합니다.
ksm 서비스가 시작되면 KSM은 호스트 물리적 시스템 기본 메모리의 절반까지 공유합니다. KSM이 더 많은 메모리를 공유할 수 있도록 ksm 서비스를 시작합니다.
# service ksm start
Starting ksm:                                              [  OK  ]
ksm 서비스는 기본 시작 시퀀스에 추가할 수 있습니다. chkconfig 명령을 사용하여 ksm 서비스를 영구적으로 만듭니다.
# chkconfig ksm on

KSM Tuning Service

ksmtuned 서비스에는 옵션이 없습니다. ksmtuned 서비스 루프는 ksm 을 조정합니다. 게스트 가상 머신을 만들거나 삭제할 때 ksmtuned 서비스는 libvirt에서 알림을 받습니다.

# service ksmtuned start
Starting ksmtuned:                                         [  OK  ]
retune 매개변수를 사용하여 ksmtuned 서비스를 조정할 수 있습니다. retune 매개변수는 ksmtuned 에 튜닝 기능을 수동으로 실행하도록 지시합니다.
파일에서 매개변수를 변경하기 전에 다음과 같이 명확히 해야 하는 몇 가지 용어가 있습니다.
  • 제한 - 활성화 임계값(KB)입니다. 모든 qemu-kvm 프로세스의 합계에 추가된 증가 값이 총 시스템 메모리를 초과하는 경우 KSM 주기가 트리거됩니다. 이 매개변수는 KSM_THRES_COEF 에 정의된 백분율의 kbytes와 동일합니다.
/etc/ksmtuned.conf 파일은 ksmtuned 서비스의 구성 파일입니다. 아래의 파일 출력은 기본 ksmtuned.conf 파일입니다.
# Configuration file for ksmtuned.

# How long ksmtuned should sleep between tuning adjustments
# KSM_MONITOR_INTERVAL=60

# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
# KSM_SLEEP_MSEC=10

# KSM_NPAGES_BOOST is added to the npages value, when free memory is less than thres.
# KSM_NPAGES_BOOST=300

# KSM_NPAGES_DECAY Value given is subtracted to the npages value, when free memory is greater than thres.
# KSM_NPAGES_DECAY=-50

# KSM_NPAGES_MIN is the lower limit for the npages value.
# KSM_NPAGES_MIN=64

# KSM_NAGES_MAX is the upper limit for the npages value.
# KSM_NPAGES_MAX=1250

# KSM_TRES_COEF - is the RAM percentage to be calculated in parameter thres.
# KSM_THRES_COEF=20

# KSM_THRES_CONST - If this is a low memory system, and the thres value is less than KSM_THRES_CONST, then reset thres value to KSM_THRES_CONST value.
# KSM_THRES_CONST=2048

# uncomment the following to enable ksmtuned debug information
# LOGFILE=/var/log/ksmtuned
# DEBUG=1

KSM 변수 및 모니터링

KSM은 모니터링 데이터를 /sys/kernel/mm/ksm/ 디렉토리에 저장합니다. 이 디렉터리의 파일은 커널에 의해 업데이트되며 KSM 사용량 및 통계에 대한 정확한 기록입니다.

아래 목록의 변수는 아래에 언급된 /etc/ksmtuned.conf 파일의 설정 가능한 변수이기도 합니다.

/sys/kernel/mm/ksm/ 파일

full_scans
전체 검사 실행.
pages_shared
총 페이지 공유.
pages_sharing
현재 공유된 페이지입니다.
pages_to_scan
페이지를 스캔하지 않습니다.
pages_unshared
페이지가 더 이상 공유되지 않습니다.
pages_volatile
휘발성 페이지 수입니다.
run
KSM 프로세스가 실행 중인지 여부
sleep_millisecs
수면 밀리초입니다.
DEBUG=1 행이 /etc/ksmtuned.conf 파일에 추가되는 경우 KSM 튜닝 활동은 /var/log/ksmtuned 로그 파일에 저장됩니다. 로그 파일 위치는 LOGFILE 매개 변수를 사용하여 변경할 수 있습니다. 로그 파일 위치 변경은 권장되지 않으며 SELinux 설정을 특별한 설정이 필요할 수 있습니다.

KSM 비활성화

KSM에는 특정 환경 또는 물리적 머신 시스템에 비해 너무 커질 수 있는 성능 오버헤드가 있습니다.

KSM은 ksmtunedksm 서비스를 중지하여 비활성화할 수 있습니다. 서비스를 중지하면 KSM이 비활성화되지만 다시 시작한 후에는 유지되지 않습니다.
# service ksmtuned stop
Stopping ksmtuned:                                         [  OK  ]
# service ksm stop
Stopping ksm:                                              [  OK  ]

chkconfig 명령을 사용하여 KSM을 영구적으로 비활성화합니다. 서비스를 종료하려면 다음 명령을 실행합니다.
# chkconfig ksm off
# chkconfig ksmtuned off
중요
KSM을 사용하는 경우에도 스왑 크기가 커밋된 RAM에 충분한지 확인합니다. KSM은 동일하거나 유사한 게스트의 RAM 사용량을 줄입니다. 충분한 스왑 공간없이 게스트를 오버 커밋할 수 있지만 게스트 가상 머신 메모리 사용을 사용하면 페이지가 공유되지 않을 수 있기 때문에 권장되지 않습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.