linux에서는 사용 용도에 따라 페이지 프레임들을 zone으로 관리하며 그 종류는 다음과 같다.
- ZONE_DMA
- ZONE_DMA32
- ZONE_NORMAL
- ZONE_HIGHMEM
- ZONE_MOVABLE
- ZONE_DEVICE
cat /proc/buddyinfo 조회 시 node 0(NUMA 아키텍처에서 표현하는 영역)에서 DMA, DMA32, Normal 영역들이 표시되었다. 각 영역들을 풀어 설명하게 되면
ZONE_DMA, ZONE_DMA32
DMA란 Direct Memory Access의 약자로써 주소를 지정할 수 있는 모든 메모리에 접근할 수 없는 주변 장치들에 접근하는 DMA에 적합한 메모리를 나타낸다.
수년이 지난 후 DMS 특정 요구사항을 가진 메모리를 가지는 더 좋고 강력한 인터페이스들이 만들어졌지만, ZONE_DMA와 ZONE_DMA32는 여전히 접근하는 데에 제한을 가지고 있는 메모리 범위를 나타내고 있으며 일부 64비트 플랫폼에서 서로 다른 DMA 주소 지정 제한이 있는 주변 장치를 지원하므로 두 영역이 모두 필요할 수 있습니다.
ZONE_NORMAL
normal 영역은 커널이 항상 접근할 수 있는 메모리입니다. 이름 그대로 일반적인 용도로써 사용할 수 있으며 커널, 프로세스 등이 메모리를 필요로 할 때 normal 영역에서 메모리를 할당 받아서 사용합니다.
vm.zone_reclaim_mode
해당 커널 파라미터는 위에서 설명한 영역들 사이에서 특정 영역의 메모리가 부족할 경우 다른 영역의 메모리를 할당할 수 있게 해준다.
특히나 해당 파라미터가 중요한 이유는 NUMA 아키텍처에서 서로 다른 노드의 normal 영역은 다른 영역으로 취급되기에 특정 노드의 normal 영역의 메모리가 부족할 때 다른 노드의 normal 영역에서 요청할 수 있기 때문이다.
vm.zone_reclaim_mode 파라미터에 0 입력 시 disable 되며 zone 안에서 재할당을 하지 않는다고 선언하는 것이다. 이것은 zone 안에서 메모리를 다시 가져와 재할당하지 않고 다른 영역에서 메모리를 요청한다는 것을 의미하며 1로 지정 시 enable 되어 메모리 부족 시에 zone 안에서 재할당할 수 있는 메모리를 찾아 재사용하고, 그렇지 않으면 다른 zone에서 메모리를 할당 받아서 사용한다.
'Linux' 카테고리의 다른 글
Keepalive (0) | 2023.07.24 |
---|---|
TIME_WAIT 소켓과 keepalive (0) | 2023.07.24 |
SSH Multiplexing (0) | 2023.07.03 |