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 源码分析
想对作者说点什么? 我来说一句

SRAT 远程控制软件

2008年11月30日 1.26MB 下载

SRAT远程控制系统

2010年09月24日 967KB 下载

Srat24远程控制破解版

2009年07月24日 4.11MB 下载

SRAT 午后门版本

2010年10月23日 3.27MB 下载

SRAT超级会员版SRAT超级会员版

2010年07月11日 3.02MB 下载

SRAT超级会员版

2011年11月07日 3.02MB 下载

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

不良信息举报

srat 表中的memblk的限制

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭