Linux内核中kzalloc_node的内存节点是什么?

我不明白kzalloc_node函数中的内存节点是什么。 描述中说“从特定的内存节点分配零内存”。 但是什么是内存节点? 我特别关注截止dateI / O调度程序的一部分(如下所示)。

static int deadline_init_queue(struct request_queue *q, struct elevator_type *e) { struct deadline_data *dd; ... dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node); ... } 

这里有一个非常好的描述:

https://www.kernel.org/doc/gorman/html/understand/understand009.html

…函数alloc_pages()调用numa_node_id()返回与当前正在运行的CPU相关联的节点的逻辑ID。 这个NID被传递给_alloc_pages(),它以NID作为参数调用NODE_DATA()。

在UMA体系结构上,这将无条件地返回contig_page_data,但NUMA体系结构改为设置一个NODE_DATA()使用NID作为偏移量的数组。 换句话说,体系结构负责将一个CPU ID设置为NUMA内存节点映射。

这实际上仍然是2.4中使用的节点本地分配策略,但是它的定义更加清晰。

另见: https : //en.wikipedia.org/wiki/Non-uniform_memory_access