A.11. VDSM Hook 示例
本节中提供的示例 hook 脚本严格不受红帽的支持。您必须确保安装到您的系统的任何和所有 hook 脚本(无论源如何)都已针对您的环境进行了全面的测试。
例 A.5. NUMA 节点调节
目的:
此 hook 脚本允许根据 numaset 自定义属性调整 NUMA 主机上的内存分配。如果 custom 属性没有设置任何操作。
配置字符串:
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)。
script:
/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)