NUMA 아키텍처 이해

Understanding Numa Architecture



컴퓨터 설계는 항상 타협입니다. 컴퓨터의 4가지 기본 구성 요소인 중앙 처리 장치(CPU) 또는 프로세서, 메모리, 스토리지 및 구성 요소를 연결하기 위한 보드(I/O 버스 시스템)는 가능한 한 영리하게 결합되어 다음을 수행하는 기계를 만듭니다. 비용 효율적이고 강력합니다. 설계 프로세스에는 주로 프로세서(코프로세서, 멀티 코어 설정), 메모리 유형 및 양, 스토리지(디스크, 파일 시스템), 가격에 대한 최적화가 포함됩니다. 코프로세서 및 멀티 코어 아키텍처 이면의 아이디어는 다음과 같습니다. 가능한 가장 작은 공간에서 가능한 한 많은 단일 컴퓨팅 장치에 작업을 분산하고 컴퓨팅 명령의 병렬 실행을 보다 유용하고 저렴하게 수행할 수 있습니다. 메모리와 관련하여 개별 컴퓨팅 장치에서 처리할 수 있는 양이나 크기와 가능한 가장 짧은 대기 시간으로 작동하는 메모리 유형이 문제입니다. 저장소는 외부 메모리에 속하며 그 성능은 디스크 유형, 사용 중인 파일 시스템, 스레딩, 전송 프로토콜, 통신 패브릭 및 연결된 메모리 장치의 수에 따라 다릅니다.

I/O 버스의 디자인은 컴퓨터 동맥을 나타내며 위에 나열된 단일 구성 요소 간에 데이터를 교환할 수 있는 양과 속도를 크게 결정합니다. 상위 범주는 고성능 컴퓨팅(HPC) 분야에서 사용되는 구성 요소가 주도합니다. 2020년 중반 현재, HPC의 현대 대표자들 중에는 Nvidia Tesla 및 DGX, Radeon Instinct, Intel Xeon Phi GPU 기반 가속기 제품이 있습니다(제품 비교는 [1,2] 참조).







NUMA 이해하기

NUMA(Non-Uniform Memory Access)는 최신 다중 처리 시스템에서 사용되는 공유 메모리 아키텍처를 설명합니다. NUMA는 집계 메모리가 모든 노드 간에 공유되는 방식으로 여러 단일 노드로 구성된 컴퓨팅 시스템입니다. 각 CPU에는 자체 로컬 메모리가 할당되고 시스템의 다른 CPU에서 메모리에 액세스할 수 있습니다[12,7].



NUMA는 여러 CPU(중앙 처리 장치)를 컴퓨터에서 사용할 수 있는 모든 컴퓨터 메모리에 연결하는 데 사용되는 영리한 시스템입니다. 단일 NUMA 노드는 확장 가능한 네트워크(I/O 버스)를 통해 연결되어 CPU가 다른 NUMA 노드와 관련된 메모리에 체계적으로 액세스할 수 있습니다.



로컬 메모리는 CPU가 특정 NUMA 노드에서 사용하는 메모리입니다. 외부 또는 원격 메모리는 CPU가 다른 NUMA 노드에서 가져오는 메모리입니다. NUMA 비율이라는 용어는 외부 메모리에 액세스하는 비용과 로컬 메모리에 액세스하는 비용의 비율을 나타냅니다. 비율이 클수록 비용이 증가하므로 메모리에 액세스하는 데 더 오래 걸립니다.





그러나 해당 CPU가 자체 로컬 메모리에 액세스할 때보다 시간이 더 걸립니다. 로컬 메모리 액세스는 낮은 대기 시간과 높은 대역폭을 결합하기 때문에 주요 이점입니다. 대조적으로, 다른 CPU에 속한 메모리에 액세스하면 대기 시간이 더 길고 대역폭 성능이 낮아집니다.

되돌아보기: 공유 메모리 멀티프로세서의 진화

Frank Dennemann[8]은 현대 시스템 아키텍처가 UMA(Uniform Memory Access)를 허용하지 않는다고 밝혔습니다. 간단히 말해서, 병렬 컴퓨팅의 아이디어는 주어진 작업을 계산하기 위해 협력하는 프로세서 그룹을 갖게 함으로써 기존의 순차 계산 속도를 높이는 것이었습니다.



Frank Dennemann[8]이 설명한 바와 같이 1970년대 초반에 관계형 데이터베이스 시스템의 도입으로 여러 동시 사용자 작업과 과도한 데이터 생성을 처리할 수 있는 시스템에 대한 필요성이 주류가 되었습니다. 단일 프로세서 성능의 놀라운 속도에도 불구하고 다중 프로세서 시스템은 이러한 작업 부하를 처리하는 데 더 적합했습니다. 비용 효율적인 시스템을 제공하기 위해 공유 메모리 주소 공간이 연구의 초점이 되었습니다. 초기에는 크로스바 스위치를 사용하는 시스템이 주창되었지만 이 설계 복잡성은 프로세서의 증가와 함께 확장되어 버스 기반 시스템을 더욱 매력적으로 만들었습니다. 버스 시스템의 프로세서는 버스에 요청을 보내 전체 메모리 공간에 액세스할 수 있습니다. 이는 사용 가능한 메모리를 가능한 한 최적으로 사용하는 매우 비용 효율적인 방법입니다.

그러나 버스 기반 컴퓨터 시스템에는 병목 현상이 발생합니다. 즉, 대역폭이 제한되어 확장성 문제가 발생합니다. 시스템에 추가되는 CPU가 많을수록 사용 가능한 노드당 대역폭이 줄어듭니다. 또한 추가되는 CPU가 많을수록 버스가 길어지고 결과적으로 대기 시간이 길어집니다.

대부분의 CPU는 2차원 평면으로 구성되었습니다. 또한 CPU에는 통합 메모리 컨트롤러가 추가되어야 했습니다. 각 CPU 코어에 대해 4개의 메모리 버스(상단, 하단, 왼쪽, 오른쪽)를 갖는 간단한 솔루션은 사용 가능한 전체 대역폭을 허용했지만 여기까지는 가능합니다. CPU는 상당한 시간 동안 4개의 코어로 정체되었습니다. 위와 아래에 트레이스를 추가하면 칩이 3D가 됨에 따라 대각선으로 반대되는 CPU에 직접 버스가 연결될 수 있습니다. 다음 논리적 단계는 4코어 CPU를 카드에 배치한 다음 버스에 연결하는 것입니다.

오늘날 각 프로세서에는 공유 온칩 캐시와 오프칩 메모리가 있는 많은 코어가 포함되어 있으며 서버 내 메모리의 여러 부분에 걸쳐 메모리 액세스 비용이 가변적입니다.

데이터 액세스의 효율성을 높이는 것은 현대 CPU 설계의 주요 목표 중 하나입니다. 각 CPU 코어에는 작은 레벨 1 캐시(32KB)와 더 큰 레벨 2 캐시(256KB)가 부여되었습니다. 다양한 코어는 나중에 몇 MB의 레벨 3 캐시를 공유하게 되며 그 크기는 시간이 지남에 따라 상당히 커졌습니다.

캐시에 없는 데이터를 요청하는 캐시 누락을 방지하기 위해 적절한 수의 CPU 캐시, 캐싱 구조 및 해당 알고리즘을 찾는 데 많은 연구 시간이 소요됩니다. 캐싱 snoop [4] 및 캐시 일관성 [3,5]에 대한 프로토콜과 NUMA 이면의 설계 아이디어에 대한 자세한 설명은 [8]을 참조하십시오.

NUMA에 대한 소프트웨어 지원

NUMA 아키텍처를 지원하는 시스템의 성능을 향상시킬 수 있는 두 가지 소프트웨어 최적화 방법이 있습니다. 바로 프로세서 선호도와 데이터 배치입니다. [19]에서 설명한 바와 같이 프로세서 선호도[… 모든 CPU. 데이터 배치라는 용어는 코드와 데이터가 메모리에 최대한 가깝게 유지되는 소프트웨어 수정을 의미합니다.

다양한 UNIX 및 UNIX 관련 운영 체제는 다음과 같은 방식으로 NUMA를 지원합니다(아래 목록은 [14]에서 가져옴).

  • Origin 서버 시리즈에서 1240 CPU 이상의 ccNUMA 아키텍처에 대한 Silicon Graphics IRIX 지원.
  • Microsoft Windows 7 및 Windows Server 2008 R2는 64개의 논리 코어를 통해 NUMA 아키텍처에 대한 지원을 추가했습니다.
  • Linux 커널 버전 2.5에는 이미 기본 NUMA 지원이 포함되어 있으며 이는 후속 커널 릴리스에서 더욱 개선되었습니다. Linux 커널 버전 3.8은 이후 커널 릴리스에서 보다 효율적인 NUMA 정책 개발을 허용하는 새로운 NUMA 기반을 가져왔습니다[13]. Linux 커널 버전 3.13은 프로세스 간에 메모리 페이지를 공유하거나 투명한 거대한 페이지를 사용하는 것과 같은 경우 처리와 함께 프로세스를 메모리 근처에 두는 것을 목표로 하는 수많은 정책을 가져왔습니다. 새로운 시스템 제어 설정을 통해 NUMA 밸런싱을 활성화 또는 비활성화할 수 있을 뿐만 아니라 다양한 NUMA 메모리 밸런싱 매개변수를 구성할 수 있습니다[15].
  • Oracle과 OpenSolaris는 모두 논리 그룹을 도입하여 NUMA 아키텍처를 모델링합니다.
  • FreeBSD는 버전 11.0에서 초기 NUMA 선호도 및 정책 구성을 추가했습니다.

Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai는 책에서 NUMA 아키텍처에 대한 연구가 주로 고급 컴퓨팅 환경에 초점을 맞추고 성능을 최적화하는 NUMA 인식 기수 분할(NaRP)을 제안했다고 제안합니다. 비즈니스 인텔리전스 애플리케이션을 가속화하기 위한 NUMA 노드의 공유 캐시 이와 같이 NUMA는 몇 개의 프로세서가 있는 공유 메모리(SMP) 시스템 사이의 중간 지점을 나타냅니다[6].

NUMA 및 Linux

위에서 언급했듯이 Linux 커널은 버전 2.5부터 NUMA를 지원합니다. Debian GNU/Linux와 Ubuntu는 모두 numactl [16] 및 numad [17] 소프트웨어 패키지 두 개를 사용하여 프로세스 최적화를 위한 NUMA 지원을 제공합니다. numactl 명령을 사용하여 시스템에서 사용 가능한 NUMA 노드의 인벤토리를 나열할 수 있습니다[18].

# numactl --하드웨어
사용 가능:2노드(0-1)
마디0CPU:0 1 2 4 5 6 7 16 17 18 19 스물 이십 일 22 2. 3
마디0크기:8157메가바이트
마디0무료:88메가바이트
마디1CPU:8 9 10 열하나 12 13 14 열 다섯 24 25 26 27 28 29 30 31
마디1크기:8191메가바이트
마디1무료:5176메가바이트
노드 거리:
마디0 1
0:10 스물
1:스물 10

NumaTop은 런타임 메모리 지역을 모니터링하고 NUMA 시스템에서 프로세스를 분석하기 위해 Intel에서 개발한 유용한 도구입니다[10,11]. 이 도구는 잠재적인 NUMA 관련 성능 병목 현상을 식별하여 메모리/CPU 할당의 균형을 재조정하여 NUMA 시스템의 잠재력을 극대화할 수 있습니다. 자세한 설명은 [9]를 참조하십시오.

사용 시나리오

NUMA 기술을 지원하는 컴퓨터를 사용하면 모든 CPU가 전체 메모리에 직접 액세스할 수 있습니다. CPU는 이를 단일 선형 주소 공간으로 간주합니다. 이를 통해 64비트 주소 지정 체계를 보다 효율적으로 사용할 수 있으므로 데이터 이동 속도가 빨라지고 데이터 복제가 줄어들며 프로그래밍이 쉬워집니다.

NUMA 시스템은 데이터 마이닝 및 의사 결정 지원 시스템과 같은 서버측 애플리케이션에 매우 매력적입니다. 또한 이 아키텍처를 사용하면 게임 및 고성능 소프트웨어용 애플리케이션을 훨씬 쉽게 작성할 수 있습니다.

결론

결론적으로 NUMA 아키텍처는 주요 이점 중 하나인 확장성을 해결합니다. NUMA CPU에서 한 노드는 동일한 노드의 메모리에 액세스하기 위해 더 높은 대역폭 또는 더 낮은 대기 시간을 갖습니다(예: 로컬 CPU는 원격 액세스와 동시에 메모리 액세스를 요청합니다. 우선 순위는 로컬 CPU에 있음). 이렇게 하면 데이터가 특정 프로세스(및 프로세서)에 국한되는 경우 메모리 처리량이 크게 향상됩니다. 단점은 한 프로세서에서 다른 프로세서로 데이터를 이동하는 데 더 높은 비용이 든다는 것입니다. 이 경우가 너무 자주 발생하지 않는 한 NUMA 시스템은 보다 전통적인 아키텍처를 사용하는 시스템보다 성능이 뛰어납니다.

링크 및 참조

  1. NVIDIA Tesla와 Radeon Instinct 비교, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. NVIDIA DGX-1과 Radeon Instinct 비교, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. 캐시 일관성, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. 버스 스누핑, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. 다중 프로세서 시스템의 캐시 일관성 프로토콜, 괴짜를 위한 괴짜, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. 컴퓨터 과학 및 기술 – Proceedings of the International Conference(CST2016), Ning Cai(Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet 및 Marco Cesati: Linux 커널 이해의 NUMA 아키텍처 이해, 3판, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA 심층 분석 파트 1: UMA에서 NUMA로, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: NUMA 시스템 모니터링 도구, http://smackerelofinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. 누마톱, https://github.com/intel/numatop
  11. 데비안 GNU/리눅스용 패키지 numatop, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: NUMA(Non-Uniform Memory Access/Architecture) 이해, https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. 커널 3.8용 Linux 커널 뉴스, https://kernelnewbies.org/Linux_3.8
  14. NUMA(Non-Uniform Memory Access), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux 메모리 관리 문서, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. 데비안 GNU/리눅스용 패키지 numactl, https://packages.debian.org/sid/admin/numactl
  17. 데비안 GNU/리눅스용 패키지 numad, https://packages.debian.org/buster/numad
  18. NUMA 구성이 활성화 또는 비활성화되어 있는지 확인하는 방법, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. 프로세서 선호도, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

감사 해요

저자는 이 기사를 준비하는 동안 도움을 준 Gerold Rupprecht에게 감사의 말을 전하고 싶습니다.

저자 소개

Plaxedes Nehanda는 남아프리카 요하네스버그에 거주하며 이벤트 플래너, 가상 비서, 필사자, 열렬한 연구원 등 많은 모자를 쓰고 다재다능하고 자기 주도적인 다재다능한 사람입니다.

Prince K. Nehanda는 짐바브웨 하라레에 있는 Paeflow Metering의 계측 및 제어(도량형) 엔지니어입니다.

Frank Hofmann은 주로 베를린(독일), 제네바(스위스), 케이프타운(남아공)에서 개발자, 트레이너 및 Linux-User 및 Linux Magazine과 같은 잡지의 저자로 일하고 있습니다. 그는 데비안 패키지 관리 책( http://www.dpmb.org ).