에 정의된 소스 코드를 읽었습니다 /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가 무엇인지 모르고 대규모 다중 프로세서 아키텍처에 익숙하지 않은 경우 이 문서가 관심을 끌지 못할 수도 있습니다.