
내 서버에 있는 CPU 수에 대해 약간 혼란스럽습니다.
Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
에 따르면 실행 중입니다 .공식 인텔 문서20개의 물리적 코어를 포함합니다.
여기서 문제는 lscpu
명령의 출력입니다(일부 행이 필터링됨).
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Model name: Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s): 0-19,40-59
NUMA node1 CPU(s): 20-39,60-79
내가 이해한 actual physical cores = CPU(s) / thread(s) per core
바로는 내가 기대했던 것의 두 배인 40을 얻습니다.
누군가 여기서 무슨 일이 일어나고 있는지, 정확히 무엇을 CPU(s), thread(s) per core, core(s) per socket, socet(s)
의미하는지 설명해 주시겠습니까?
답변1
Sockets
시스템에 있는 물리적 CPU 수를 나타냅니다.Cores per socket
물리적 CPU당 전체 CPU 코어(로딩/디코딩 로직 포함)가 몇 개 있는지를 나타냅니다.Threads per core
단일 코어에서 예약할 수 있는 스레드 수(HyperThreading)입니다. 간단히 말해서, 사용되는 CPU의 하드웨어~ 전에실제 코드 실행이 두 배로 늘어나 CPU가 여러 가지 다른 작업을 실행할 수 있도록 준비할 수 있습니다. 이를 통해 CPU는 명령어가 CPU의 실행 코어에 도달하기 전에 명령어를 가져오거나 디코딩할 수 있습니다. 예방하거나 감소시킵니다.파이프라인 실속.CPU
"스케줄링 가능한 엔터티"를 의미합니다. 이는 운영 체제가 갖게 될 실행 대기열 수입니다.sockets x cores per socket x threads per core
귀하의 경우에는 각각 20개의 코어가 있고 각각 2개의 스레드(하이퍼스레딩)를 실행할 수 있는 2개의 물리적 CPU가 있습니다. 그래서 표시된 2x20x2 = 80
개수는 입니다 CPUs
.
답변2
혼란은 info lscpu
명령이 표시하는 것에서 명확하지 않을 수 있는 매우 간단한 세부 사항에서 비롯됩니다.
문제는 귀하의 서버가 실제로 행 Intel(R) Xeon(R) Gold 6242R CPU
에 언급된 2 s를 가지고 있다는 것 입니다 Socket(s)
.
Intel 문서에 명시된 대로 각 CPU에는 20개의 물리적 코어(라인 Core(s) per socket
)가 포함되어 총 40개의 물리적 코어를 제공합니다.
각 코어는 2개의 스레드를 "동시에"(라인 Thread(s) per core
) 실행할 수 있습니다.
따라서 Intel Xeon 2개, 각각 20개의 물리적 코어, 각 코어당 2개의 스레드는 총 80개의 "프로세스를 실행할 수 있는 장치" 또는 "CPU"를 제공합니다.
답변3
CPU에 대한 아이디어는 현재 약간 추상화되어 있으며 이는 하이퍼스레딩(90년대 후반)으로 시작된 다음 Intel Core(00년대 초반) 시리즈로 시작되었습니다. 그 전에는 확실히 다중 CPU 시스템이 있었지만 모두 다중 물리적 CPU였습니다.
그러나 하이퍼스레딩 및 다중 코어 단일 CPU의 경우 물리적 CPU 수는 CPU에서 실행되는 코드에 표시되는 논리적 CPU 수와 다릅니다.
Socket(s): 2
"마더보드에 방열판이 연결된 것"과 같이 2개의 물리적 CPU가 있습니다.
Core(s) per socket: 20
각 물리적 CPU에는 20개의 코어가 있으며, 이는 Linux의 독립 CPU처럼 보이고 대부분 작동합니다. 코어는 적어도 동일한 L3 캐시, 아마도 L2 캐시를 공유하고 아마도 자체 L1 캐시를 가질 수도 있습니다. 따라서 자체 L3/L2/L1이 있는 개별 소켓만큼 성능이 좋지는 않지만 거의 거기에 있습니다.
이것이 각 소켓이므로 2 * 20 = 40이 됩니다.
Thread(s) per core: 2
각 코어에는 기본적으로 Linux의 독립 CPU처럼 보이도록 CPU의 마이크로아키텍처에 의해 구현되는 2개의 SMT 스레드가 있습니다.
실제 독립 코어만큼 빠르지는 않습니다.
마이크로아키텍처의 스레드는 코어에서 현재 사용되지 않는 파이프라인 단계를 가져오려고 시도하지만 사용량이 많으면 결국 기다려야 할 수도 있습니다. 그리고 CPU는 이미 매우 바쁜 상태를 유지하려고 시도하므로 다시 2개 코어의 2개 스레드는 4개 코어와 거의 동일하지 않습니다. 이는 코드 실행 속도를 좀 더 빠르게 만들 수 있는 것입니다.
코어 리소스가 공유되기 때문에 Spectre 및 유사한 취약점은 코어나 소켓보다 스레드 전체에서 훨씬 더 많이 발생할 수 있습니다.
어쨌든 이는 코어당 및 소켓당이므로 2 * 20 * 2이며 다음을 제공합니다.
CPU(s): 80
답변4
귀하의 서버는 각각 20개의 물리적 코어가 있는 2개의 "프로세서 칩"(2소켓)을 사용하고 있습니다.
그리고 각 코어는 2개의 스레드를 처리할 수 있습니다.
이것이 바로 2(프로세서 칩) * 20(부품당 코어) * 2(각 코어가 처리할 수 있는 스레드) = 80 CPU로 표시되는 이유입니다.
이 경우 CPU는 "예약 가능한 엔터티"라고도 합니다. 머신이 실행할 수 있는 스레드의 양.