numactl:このシステムはNUMAポリシーをサポートしていません。

numactl:このシステムはNUMAポリシーをサポートしていません。

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)に追加されているため、これは設定の問題かもしれません。

  1. BIOSでNUMAサポートが無効になっています(これを確認したと述べました)。
  2. NUMA ACPIが無効になっています。

    1. cmdline - /prco/cmdlineでacpi = offを確認してください。
    2. カーネルの設定 - CONFIG_X86_64_ACPI_NUMA=y と CONFIG_ACPI_NUMA=y を確認してください。

CONFIG_NUMA=y も設定されていることを確認してください。詳細を見るこの記事

お役に立てば幸いです。

PS - 実行中のカーネルが何なのか、ベアメタルなのかVM/dockerなのかについては言及しませんでした。後者の場合、get_mempolicy() sysctl がブロックされることがあります。追加情報ここ

関連情報