【问题标题】:What is the memory node in kzalloc_node in the Linux kernelLinux内核中kzalloc_node中的内存节点是什么
【发布时间】:2016-03-30 19:01:29
【问题描述】:

我不明白 kzalloc_node 函数中的内存节点是什么。描述说,“从特定内存节点分配归零内存。”但是什么是内存节点?我专门研究了最后期限 I/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);

    ...
}

【问题讨论】:

    标签: c linux memory-management linux-kernel dynamic-memory-allocation


    【解决方案1】:

    这里有一个很好的描述:

    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 作为偏移量的数组。其他 换句话说,架构负责为 NUMA 设置一个 CPU ID 内存节点映射。

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

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

    【讨论】:

    • 那么在deadline调度器的情况下,dd指针和request_queue分配在同一个节点,对吗?
    • 我专注于“什么是节点?”这个问题。但我相信答案是“是的——你是对的”。
    猜你喜欢
    • 2013-08-31
    • 2021-07-28
    • 2014-11-13
    • 2014-05-07
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多