A.13. VDSM フックの例
このセクションで提供されているフックスクリプトの例は、Red Hat では厳密にはサポートされていません。ソースに関係なく、システムにインストールするすべてのフックスクリプトが、環境に対して徹底的にテストされていることを確認する必要があります。
例A.5 NUMA ノードのチューニング
目的:
このフックスクリプトを使用すると、numaset
カスタムプロパティーに基づいて NUMA ホストのメモリー割り当てを調整できます。カスタムプロパティーが設定されていない場合、アクションは実行されません。
Configuration String:
numaset=^(interleave|strict|preferred):[\^]?\d+(-\d+)?(,[\^]?\d+(-\d+)?)*$
使用される正規表現により、特定の仮想マシンの numaset
カスタムプロパティーで、割り当てモード (interleave
、strict
、preferred
) と使用するノードの両方を指定できます。2 つの値はコロン (:
) で区切られます。正規表現を使用すると、nodeset
を次のように指定できます。
-
特定のノード (ノード 1 のみを使用することを指定する
numaset=strict:1
)、または -
ノードの範囲が使用される (ノード 1 から 4 が使用されることを指定する
numaset=strict:1-4
)、または -
特定のノードが使用されていないこと (ノード 3 が使用されていないことを指定する
numaset = strict:^ 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)