질문은 다음과 같습니다.
1. sparsemem, discontiguous mem, flat mem의 차이는 무엇인가?
2. 위 3가지가 numa, uma와 어떤 연관이 있는지요?
3. arm에서 sparsemem을 사용하는지요? (arch/arm/에 있는 config file에는 no set이라고 되어있더라구요.)
4. 안한다면 flat mem쪽만 분석하면 되는것인지요?
5. 아래는 스터디 도중 정리한 내용인데 괜찮으시면 한번 봐주세요.
간략히 다음과 같이 정리를 했습니다.
1. hole이라는 것은 뱅크 사이에 메모리가 물리적으로 주소가 불연속적인 부분을 의미
2. discontiguous 하다는것은 hole이 존재함을 의미
3. NUMA는 (접근 속도가 다른)node가 2개 이상인 경우를 의미하는데, hole은 있을수도 있고 없을수도 있다.
sparsemem 는 numa(& uma) 상에서 물리적으로 불연속적인 메모리를, OS상에서 연속적인것으로 해주기위함이고
더불어,
- inter, intranode memory hole을 핸들일할수 있다.
- UMA/NUMA discontiguous memory layout을 모두 핸들링한다.
- hotplug 지원
- NUMA node의 range가 contiguous 할 필요가 없다
- 노드간의 range overlap 문제를 핸들링한다.
의 기능을 수행한다.
댓글 5
-
백창우
2010.03.20 19:45
-
백창우
2010.03.21 10:23
빼는건 아직 구현이 안된 부분이 있는가 봅니다.
http://lxr.iamroot.org:8088/lxr/http/source/mm/sparse.c?v=linux-2.6.24-lksas4-x86-64;a=i386#L336
#ifdef CONFIG_SPARSEMEM_VMEMMAP
static int __remove_section(struct zone *zone, struct mem_section *ms)
{
/*
* XXX: Freeing memmap with vmemmap is not implement yet.
* This should be removed later.
*/
return -EBUSY;
}
#else -
박은병
2010.03.21 02:12
참고로 hotplug memory는 가상화 환경에서 유용하게 쓰인다고 하더군요.
문제는 hotplug memory는 hot plug하기는 쉬운데 도로 빼내기가 곤란하다고 하더군요..
-
조경호
2010.06.20 16:07
ARM implementation에 따라 flat memory를 쓰기도 하고, discontig memory를 쓰기도 하고 sparse memory를 쓰기도 합니다. memory hotplug는 ARM에서 별로 의미 없겠지만, flat memory든 discontiguous 메모리든 sparse memory로 옮겨가려는 추세인 것 같습니다.
-
김남형
2010.03.21 15:43
다른 분들이 잘 설명해 주셨지만 몇 가지 덧붙이지면
flat memory는 가장 단순한 방식으로, 연속된 물리주소를 통해 시스템의 메모리에 동등하게 접근할 수 있는 환경입니다.
따라서 kernel에서는 이를 하나의 노드 (contig_page_data)로 관리할 수 있습니다.
discontiguous memory는 물리 주소 상에 hole이 있어서 시스템 메모리가 나뉘어져 있는 환경입니다.
kernel은 노드 내의 모든 페이지는 연속된 주소를 가진다고 가정하므로,
각각의 나뉘어진 메모리 영역을 별도의 노드로 관리해야 합니다.
sparse memory는 이것과는 약간 다른 관점인데
contiguous 여부와 상관없이 시스템의 메모리를 섹션이라는 일정한 크기로 나누고
각 섹션을 개별적으로 online/offline 시킬 수 있습니다.
만약 discontiguous memory인 경우라면 처음부터 hole에 해당하는 영역을 offline으로 잡아두면 될 것입니다.
위에서 말씀하신대로 이 기능은 memory hotpluging을 위해 사용되며
아직 physical memory remove 기능은 구현되지 않은 듯 합니다.
다만 MOVABLE_ZONE 내의 섹션들은 제한적으로나마 logical remove (offline)시키는 것이 가능한 것으로 알고 있습니다.
기본적으로 UMA/NUMA를 시스템 내의 메모리 컨트롤러의 수로 구분하자면
flat memory는 UMA 환경에 속할 테지만, 시스템 구성에 따라
UMA에서도 discontiguous memory인 환경이 있을 수 있고
NUMA에서도 contiguous memory인 환경이 있을 수 있습니다.
.
1. sparsemem, discontiguous mem, flat mem의 차이는 무엇인가?
- flat memory model은 일반적으로 많이 사용하는 선형된 physical memory 영역을 관리하는 메모리 모델입니다. discontiguous memory model은 physical memory 영역이 분리된 시스템에서 사용하는 메모리 모델이고, sparse memory model은 hotplug memory등과 같은 메모리를 사용할때 사용하는 메모리 모델입니다. 예전에는 sparse memory model에서 hotplug memory가 없었는데 요즘에는 생겼나봅니다.
2. 위 3가지가 numa, uma와 어떤 연관이 있는지요?
- 우선 uma에서는 flat memory model 시스템이 대부분입니다. numa에서는 discontiguous memory model과 sparse memory model이 더 일반적입니다. 그리고 uma라고 해서 무조건 flat memory model 시스템만 있는것도 아니고 discontiguous memory model 시스템도 있을 수 있습니다. 일반적으로 그렇다는 이야기입니다.
3. arm에서 sparsemem을 사용하는지요? (arch/arm/에 있는 config file에는 no set이라고 되어있더라구요.)
- 사용하지 않습니다.
4. 안한다면 flat mem쪽만 분석하면 되는것인지요?
- 네