我已经阅读了 中定义的源代码/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 是什么,也不熟悉大规模多处理器架构,那么您可能不会对该文件感兴趣。