A.11. VDSM 후크 예
이 섹션에서 제공하는 예제 후크 스크립트는 Red Hat에서 엄격하게 지원하지 않습니다. 소스와 관계없이 시스템에 설치하는 모든 후크 스크립트가 환경에 맞게 철저하게 테스트되었는지 확인해야 합니다.
예 A.5. NUMA 노드 튜닝
목적:
이 후크 스크립트를 사용하면 numaset
사용자 지정 속성을 기반으로 NUMA 호스트에서 메모리 할당을 조정할 수 있습니다. 사용자 지정 속성이 설정되지 않은 위치입니다.
구성 문자열:
numaset=^(interleave|strict|preferred):[\^]?\d+(-\d+)?(,[\^]?\d+(-\d+)?)*$
사용된 정규 표현식을 사용하면 지정된 가상 시스템의 numaset
사용자 지정 속성에서 할당 모드(인터리브
,엄격한
,기본 설정
)와 사용할 노드 모두를 지정할 수 있습니다. 두 값은 콜론(:
)으로 구분됩니다. 정규 표현식을 사용하면 다음과 같이 노드 세트를 지정할 수
있습니다.
-
특정 노드(
numaset=strict:1)
가 노드 1만 사용됨을 지정합니다. -
사용 가능한 노드 범위(
numaset=strict:1-4
, 노드가 1-4로 사용됨) 또는 -
(
numaset=strict:^3
) 특정 노드가 사용되지 않는 경우 노드 3을 사용하지 않도록 지정합니다. -
위의 쉼표로 구분된 조합(
numaset=strict:1-4,6)은 노드를 1에서 4로, 6을 사용하도록 지정합니다
.
스크립트:
/usr/libexec/vdsm/hooks/before_vm_start/50_numa
#!/usr/bin/python import os import sys import hooking import traceback ''' numa hook ========= add numa support for domain xml: <numatune> <memory mode="strict" nodeset="1-4,^3" /> </numatune> memory=interleave|strict|preferred numaset="1" (use one NUMA node) numaset="1-4" (use 1-4 NUMA nodes) numaset="^3" (don't use NUMA node 3) numaset="1-4,^3,6" (or combinations) syntax: numa=strict:1-4 ''' if os.environ.has_key('numa'): try: mode, nodeset = os.environ['numa'].split(':') domxml = hooking.read_domxml() domain = domxml.getElementsByTagName('domain')[0] numas = domxml.getElementsByTagName('numatune') if not len(numas) > 0: numatune = domxml.createElement('numatune') domain.appendChild(numatune) memory = domxml.createElement('memory') memory.setAttribute('mode', mode) memory.setAttribute('nodeset', nodeset) numatune.appendChild(memory) hooking.write_domxml(domxml) else: sys.stderr.write('numa: numa already exists in domain xml') sys.exit(2) except: sys.stderr.write('numa: [unexpected error]: %s\n' % traceback.format_exc()) sys.exit(2)