我不明白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