A.13. VDSM 후크 예
예 A.5. NUMA 노드 튜닝
이러한 후크 스크립트를 사용하여 numaset 사용자 정의 속성에 기반하는 NUMA 호스트에서 메모리 할당을 조정합니다. 사용자 정의 속성이 설정되어 있지 않은 경우 동작하지 않게 됩니다.
numaset=^(interleave|strict|preferred):[\^]?\d+(-\d+)?(,[\^]?\d+(-\d+)?)*$
numaset 사용자 정의 속성을 통해 할당 모드 (interleave, strict, preferred) 및 사용할 노드 모두를 지정할 수 있습니다. 두 값은 콜론 (:)으로 구분됩니다. 정규 표현식을 통해 다음과 같이 nodeset 사양을 지정할 수 있습니다:
- 특정 노드 (
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)

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.