srat 表中的memblk的限制

arch/arm64/include/asm/numa.h:8:#define NR_NODE_MEMBLKS         (MAX_NUMNODES * 2)
#define MAX_NUMNODES    (1 << NODES_SHIFT)

linux-uf6f:~ # zcat /proc/config.gz | grep NODES_SHIFT
CONFIG_NODES_SHIFT=2
linux-uf6f:~ #

经过上面的计算可以知道最终NR_NODE_MEMBLKS 等于8
在4.15 以下的kernel 可以在看到下面的code,也就是kernel 最大支持从SRAT 表中传递8个memblk,如果超过8个memblk
用numactl -H 就会看到所有的内存节点都在一个node上(本来正确的应该有4个)
int __init acpi_numa_init(void)
{
	int cnt = 0;


	/* SRAT: System Resource Affinity Table */
	if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
		struct acpi_subtable_proc srat_proc[3];

		cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY,
					    acpi_parse_memory_affinity, NR_NODE_MEMBLKS);
	}

	return 0;
}
因此要突破srat 表传递8个memblk的显示,只能修改kernel 配置文件中的NODES_SHIFT,但是下面的patch 同样可以解决这个问题
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index 911904b..5b52cd6 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -274,6 +274,8 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
        if ((ma->flags & ACPI_SRAT_MEM_ENABLED) == 0)
                goto out_err;
        hotpluggable = ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE;

@@ -289,6 +291,7 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
                goto out_err_bad_srat;
        }

+       pr_err("\n tiantao:node id  = %d\n",node);
        if (numa_add_memblk(node, start, end) < 0) {
                pr_err("SRAT: Failed to add memblk to node %u [mem %#010Lx-%#010Lx]\n",
                       node, (unsigned long long) start,
@@ -461,7 +464,7 @@ int __init acpi_numa_init(void)

                cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY,
                                            acpi_parse_memory_affinity,
-                                           NR_NODE_MEMBLKS);
+                                           0);
        }

这个patch 通过改变acpi_table_parse_srat 最大解析的参数由NR_NODE_MEMBLKS改为零,从而让
kernel 解析srat表中的memblk,从而不受NR_NODE_MEMBLKS的限制,而是srat 表中传递多少memblk 
就解析多少个memblk

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiantao2012/article/details/79974250
个人分类: Linux 源码分析
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭