31.2. 시스템 토폴로지 유형
오늘날의 컴퓨팅에서 대부분의 최신 시스템에는 여러 프로세서가 있기 때문에 CPU의 개념은 잘못된 개념입니다. 시스템의 토폴로지는 이러한 프로세서가 서로 그리고 다른 시스템 리소스에 연결하는 방식입니다. 이는 시스템과 애플리케이션 성능 및 시스템의 튜닝 고려 사항에 영향을 줄 수 있습니다.
다음은 최신 컴퓨팅에 사용되는 두 가지 기본 토폴로지 유형입니다.
SMP(대칭 멀티프로세서) 토폴로지
- SMP 토폴로지를 사용하면 모든 프로세서가 동일한 시간 내에 메모리에 액세스할 수 있습니다. 그러나 공유 및 동일한 메모리 액세스는 본질적으로 모든 CPU에서 직렬화된 메모리 액세스를 강제하기 때문에 SMP 시스템 확장 제약 조건은 일반적으로 허용되지 않습니다. 이러한 이유로 사실상 모든 최신 서버 시스템은 NUMA 시스템입니다.
NUMA(Non-Uniform Memory Access) 토폴로지
NUMA 토폴로지는 SMP 토폴로지보다 최근에 개발되었습니다. NUMA 시스템에서 다중 프로세서는 소켓에 물리적으로 그룹화됩니다. 각 소켓에는 해당 메모리에 대한 로컬 액세스 권한이 있는 전용 메모리 및 프로세서 영역이 있으며, 이를 전체적으로 노드라고 합니다. 동일한 노드의 프로세서는 해당 노드의 메모리 은행에 대한 빠른 속도로 액세스하고, 해당 노드에 없는 메모리 은행에 대한 액세스 속도가 느려집니다.
따라서 비로컬 메모리에 액세스할 때 성능이 저하됩니다. 따라서 NUMA 토폴로지가 있는 시스템에서 성능에 민감한 애플리케이션은 애플리케이션을 실행하는 프로세서와 동일한 노드에 있는 메모리에 액세스해야 하며 가능한 경우 원격 메모리에 액세스하지 않아야 합니다.
성능에 민감한 다중 스레드 애플리케이션은 특정 프로세서가 아닌 특정 NUMA 노드에서 실행하도록 를 구성하는 것이 좋습니다. 이것이 적합한지 여부는 시스템과 애플리케이션의 요구 사항에 따라 달라집니다. 여러 애플리케이션 스레드가 동일한 캐시 데이터에 액세스하는 경우 동일한 프로세서에서 실행하도록 해당 스레드를 구성하는 것이 적합할 수 있습니다. 그러나 동일한 프로세서에서 액세스하고 캐시하는 여러 스레드가 동일한 프로세서에서 실행되는 경우 각 스레드는 이전 스레드에서 액세스하는 캐시된 데이터를 제거할 수 있습니다. 즉, 각 스레드가 캐시를 '누락'하고 메모리에서 데이터를 가져와 캐시에서 데이터를 교체하는 실행 시간이 낭비됩니다.
perf
도구를 사용하여 과도한 수의 캐시 누락이 있는지 확인합니다.
31.2.1. 시스템 토폴로지 표시
시스템의 토폴로지를 이해하는 데 도움이 되는 여러 명령이 있습니다. 다음 절차에서는 시스템 토폴로지를 결정하는 방법을 설명합니다.
절차
시스템 토폴로지의 개요를 표시하려면 다음을 수행합니다.
$ numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 4 8 12 16 20 24 28 32 36 node 0 size: 65415 MB node 0 free: 43971 MB [...]
CPU 수, 스레드, 코어, 소켓 및 NUMA 노드 수와 같은 CPU 아키텍처에 대한 정보를 수집하려면 다음을 수행합니다.
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 40 On-line CPU(s) list: 0-39 Thread(s) per core: 1 Core(s) per socket: 10 Socket(s): 4 NUMA node(s): 4 Vendor ID: GenuineIntel CPU family: 6 Model: 47 Model name: Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz Stepping: 2 CPU MHz: 2394.204 BogoMIPS: 4787.85 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 30720K NUMA node0 CPU(s): 0,4,8,12,16,20,24,28,32,36 NUMA node1 CPU(s): 2,6,10,14,18,22,26,30,34,38 NUMA node2 CPU(s): 1,5,9,13,17,21,25,29,33,37 NUMA node3 CPU(s): 3,7,11,15,19,23,27,31,35,39
시스템의 그래픽 표현을 보려면 다음을 수행합니다.
# yum install hwloc-gui # lstopo
그림 31.1.
lstopo
출력자세한 텍스트 출력을 보려면 다음을 수행합니다.
# yum install hwloc # lstopo-no-graphics Machine (15GB) Package L#0 + L3 L#0 (8192KB) L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 PU L#0 (P#0) PU L#1 (P#4) HostBridge L#0 PCI 8086:5917 GPU L#0 "renderD128" GPU L#1 "controlD64" GPU L#2 "card0" PCIBridge PCI 8086:24fd Net L#3 "wlp61s0" PCIBridge PCI 8086:f1a6 PCI 8086:15d7 Net L#4 "enp0s31f6"
추가 리소스
-
numactl(8)
,lscpu(1)
및lstopo(1)
도움말 페이지