numactlを使用すると、私は見る。
numactl: this system does not support NUMA policy.
一部のカーネル設定が有効になっていないためですか?
BIOSでNUMAが有効になっていることを確認してください。
lscpu は NUMA ノードがあることを示します。
答え1
短い答え
NUMA ACPIは、(A)BIOS、(B)cmdline、または(C)カーネル構成で無効にできます。以下の詳細をご覧ください。
詳しくは
numactlソースコードを見る(フラッグハブ)、上記のエラーはchecknuma()関数で発生したようです。
void checknuma(void)
{
static int numa = -1;
if (numa < 0) {
if (numa_available() < 0)
complain("This system does not support NUMA policy");
}
numa = 0;
}
numa_available() 戻り値が 0 より小さい場合は失敗します。これは、get_mempolicy()システムコールがエラーコードENOSYSで失敗した場合にのみ発生します。
int numa_available(void)
{
if (get_mempolicy(NULL, NULL, 0, 0, 0) < 0 && errno == ENOSYS)
return -1;
ENOSYSエラーは「機能が実装されていません」に関連しているため、システムはNUMAをサポートしていないようです。このサポートはずっと前にカーネル(カーネルv2.6.7)に追加されているため、これは設定の問題かもしれません。
- BIOSでNUMAサポートが無効になっています(これを確認したと述べました)。
NUMA ACPIが無効になっています。
- cmdline - /prco/cmdlineでacpi = offを確認してください。
- カーネルの設定 - CONFIG_X86_64_ACPI_NUMA=y と CONFIG_ACPI_NUMA=y を確認してください。
CONFIG_NUMA=y も設定されていることを確認してください。詳細を見るこの記事。
お役に立てば幸いです。
PS - 実行中のカーネルが何なのか、ベアメタルなのかVM/dockerなのかについては言及しませんでした。後者の場合、get_mempolicy() sysctl がブロックされることがあります。追加情報ここ。