Linux 中进程的动态交错是什么?

Linux 中进程的动态交错是什么?

我已经阅读了 中定义的源代码/source/mm/mempolicy.c。从第 1178 行开始:

/* Do dynamic interleaving for a process */
static unsigned interleave_nodes(struct mempolicy *policy)
{
        unsigned nid, next;
        struct task_struct *me = current;

        nid = me->il_next;
        next = next_node(nid, policy->v.nodes);
        if (next >= MAX_NUMNODES)
                next = first_node(policy->v.nodes);
        me->il_next = next;
        return nid;
}

我对交错不熟悉。 Linux 中的交错到底是什么?

答案1

阅读文件开头的注释。

 * interleave     Allocate memory interleaved over a set of nodes,
 *                with normal fallback if it fails.
 *                For VMA based allocations this interleaves based on the
 *                offset into the backing object or offset into the mapping
 *                for anonymous memory. For process policy an process counter
 *                is used.

这是一个内存分配策略NUMA系统,即具有多个存储体的大型多处理器计算机,这些存储体可以或多或少地远离每个节点(处理器)。默认策略有利于靠近当前正在运行请求内存的进程的节点的内存。这交错策略通过一组内存库轮换以分散负载(其想法是,这允许并行执行内存请求,因为它们通常会发送到不同的内存库)。

如果您不知道 NUMA 是什么,也不熟悉大规模多处理器架构,那么您可能不会对该文件感兴趣。

相关内容