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도 설정되어 있는지 확인하세요. 자세한 내용 보기이 기사.
도움이 되었기를 바랍니다.
추신 - 실행 중인 커널이 무엇인지, 베어메탈인지 VM/docker인지에 대해서는 언급하지 않았습니다. 후자의 경우 get_mempolicy() sysctl이 차단될 수 있습니다. 추가 정보여기.