하이퍼 스레딩에서 몇 개의 CPU를 사용해야합니까?


22

하이퍼 스레딩이 켜져있는 18 개의 코어가있는 서버 CPU가 있다고 가정 해 봅시다.

CPU를 완전히 활용하고 단일 스레드 성능에 영향을 미치지 않으려면 36 개의 "코어"를 모두 100 %로 실행하는 것을 목표로해야하며, HT 코어는 작업을 덜 수행하고 여전히 100 %를보고 할 것입니다. "전체"코어는 "HT 코어"작업으로 인해 이미 중단되어 단일 스레드 작업이 줄었습니까?

HT 성능에 영향을 미치는 많은 변수가 있다는 것을 알고 있습니다 .HT를 처리 할 때 CPU 미터가 무엇을 의미하는지 알고 싶습니다.


6
하이퍼 스레딩은 실제로 두 배의 CPU를 제공하지 않습니다. 두 개의 프로그램에서 CPU가 읽는 것처럼 생각하면 하나의 프로그램이 여러주기가 걸릴 무언가를하려고하거나 모든 리소스 (adders, multipliers, loader 등)를 사용하지 않을 때마다 다른 프로그램에서 사용할 수 있습니다. 따라서 모든 스레드 에서 100 %를 보려면 코어에서 실행되는 호환 가능한 프로그램과 일치해야합니다.
simpleuser

4
이러한 설계로 인해 하이퍼 스레딩은 혼합 워크로드에서 잘 작동합니다. 예를 들어 모든 VM이 다른 서비스를 실행하는 하이퍼 바이저입니다. 이런 종류의 시나리오에서는 테스트 할 필요조차 없습니다. 보다 균일 한 워크로드를 위해서는 일반적으로 테스트가 필요합니다.
Michael Hampton

답변:


14

두 번째 가상 코어가 처음 그렇지 않으면 붙어 될 때 기여할 수 있으면, 그것은보다 나은입니다 하지 당신은 약간의 추가 작업이 완료 (적어도) 얻을 수 있도록.

문제는 다음과 같습니다. 두 개의 서로 다른 스레드가있는 경우 하나가 더 악화되는 이유는 무엇입니까? 명령어 간의 분기 예측 및 종속성은 변경되지 않습니다. 메모리 액세스 대기 중 ... 두 스레드는 캐시 사용률과 대역폭 모두에서 메모리 액세스와 경쟁합니다.

일부 CPU가 HT로 실행되고 다른 CPU는 그렇지 않은 경우 특정 스레드를 한 유형 또는 다른 유형으로 할당한다는 의미입니까? 나는 생각하지 않습니다 : 귀하의 프로그램은 임의의 가상 코어에서 스레드를 실행합니다. 그렇다면 구성을 나누는 것이 어떻게 도움이됩니까? 각 CPU에는 고유 한 캐시가 있으므로 메모리 대역폭과 캐시 일관성 부담 만 영향을 미칩니다.

일반적으로 일부 CPU 실행 장치를 유휴 상태 로 두는 것보다 더 많은 일을하는 것이 더 비싸다는 점에 도달합니다 . 이것은 스레드 수에 직접 의존하지 않고 스레드가 수행하는 작업 과 다양한 구성 요소의 자세한 메모리 아키텍처 및 성능 미묘한 차이에 달려 있습니다.

간단한 대답은 없습니다. 특정 프로그램을 염두에 두더라도 기계는 자신의 경험과 관련된 사람들의 기계와 다를 수 있습니다.

정확한 기계에서 특정 작업을 수행하여 직접 시도하고 가장 빠른 것을 측정 해야합니다. 심지어 소프트웨어 업데이트와 시간이 지남에 따라 사용량이 변함에 따라 변경 될 수 있습니다.

분노의 매그넘 opus 3 권을 보십시오 . 특정 프로세서를주의 깊게 살펴보면 코드를 실행하는 데 필요한 여러 단계의 심층 파이프 라인에서 제한적인 리소스를 찾을 수 있습니다. 과업으로 인해 더 많은 일을하지 않는 것과 달리과 집합이 느리게 실행되는 경우를 찾아야합니다. 일반적으로 이는 일종의 캐싱을 의미합니다. 리소스가 스레드간에 공유되는 위치


CPU 측정기의 의미 : 유휴 스레드를 실행하는 데 소비하지 않은 모든 시간을보고합니다. 코어 중 하나에 수행 된 실제 작업이 작더라도 코어에 할당 된 두 논리 스레드는 유휴 상태가 아닙니다. 결과가 준비 될 때까지, 메모리가 페치되고, 원자 연산이 차단되는 등 파이프 라인이 몇 사이클 동안 멈추는 데 걸리는 시간도 마찬가지로 스레드가 "준비되지 않은"것으로 선반에 놓이지 않아 유휴 상태가되지 않습니다. 시간은 여전히 ​​사용 중으로 표시됩니다. RAM 대기는 유휴 상태로 표시되지 않습니다. I / O와 같은 것만이 스레드 블록을 만들고 충전 시간을 멈 춥니 다. 일반적으로 운영 체제 뮤텍스 그렇게 할 것입니다, 하지만 은 "스핀"로 더 이상 확실한 일이 멀티 코어 시스템의 상승과 함께 할 수 없습니다 선반에 스레드 가서 다시 확인합니다.

따라서 CPU 미터가 100 %라고해서 CPU가 종종 메모리 대기 중으로 멈춰 있으면 모든 것이 순조롭게 진행되는 것은 아닙니다. 90 %를 표시하는 더 적은 수의 논리 코어 는 숫자 처리를 마치고 디스크에서 대기 중이므로 더 많은 작업을 수행 할 수 있습니다.

따라서 CPU 미터에 대해 걱정하지 마십시오. 실제 진행 봐, 제작 에만 .


23

CPU 미터는 하이퍼 스레드 CPU에서 얼마나 많은 성능을 발휘할 수 있는지 알려주는 데 매우 나쁩니다. 이를 위해서는 다양한 물리적 코어 초과 가입률로 자체 벤치 마크를 실행해야합니다. HT를 완전히 끈 상태에서 가장 잘 작동하는 워크로드가 있으므로 테스트에 포함하십시오. 1 : 2 (병행 근로자 36 명), 1 : 1.5 또는 1 : 2.5 일 수 있습니다! 작업량에 따라 다릅니다.

보다 구체적으로, HT는 컨텍스트가 전환되거나 분기 예측이 실패 할 때 프로세서가 유휴 상태로 보내는 시간을 줄이는 방식으로 실리콘에 구현됩니다. 따라서 순수한 운영 체제 트릭보다 100 % 실행 장치 사용량에 쉽게 도달 할 수 있습니다. HT는 도입 된 이후로 발전했으며, 10 년 전에 사용했던 것보다 최신 칩에 대한 병렬성이 더 많습니다.

최적의 초과 가입 지점에 영향을주는 두 가지 실행 프로필이 있습니다.

  • 실행 시간이 길다 . 대규모 렌더링 작업이나 환경 모델링과 같이 재활용하기 전에 작업자가 몇 분 또는 몇 시간 동안 실행하면 작업 자당보다 효율적인 단일 코어 성능을 얻을 수 있습니다. 비율이 낮아집니다.
  • 실행 시간이 짧습니다 . 웹앱 스레드와 같이 작업자가 몇 초 또는 몇 분 안에 순환하는 경우 새 프로세스를 켜는 데 드는 오버 헤드로 인해 비율이 높아집니다.

작은 분? 몇 분요?
Ismael Miguel

거의 요 1에서 5 정도 직원이 18 명인 직원당 120 초에 7 초마다 새로운 직원을 넘깁니다. 많은 부분이 캐시 로컬 리티에 속합니다.
sysadmin1138

1
당신은 그것을 얻지 못했습니다. 당신은 당신의 두 번째 포인트에 "작은 분"을 말하는 것입니다. 분은 항상 동일한 "크기"(60 초)입니다. 때때로 61 초.
Ismael Miguel

4

소프트웨어가 그렇게 할 수 있다고 가정 할 때 (36 %의 코어가 100 %로 실행되는 것을 볼 수 있습니다.) 이는 많은 코어에서 스케줄링이 까다로울 수 있으므로 100 % 미만의 딥은 허용됩니다.

분명히 하이퍼 스레딩으로 광석을 "분할"할 때 200 %의 의미는 "2x100 %"가 아닙니다. 그러나 이것은 CPU 사용률에서 비롯된 작업 개념이없는 모든 측정에는 보이지 않습니다. 얼마나 많은 작업이 수행되는지는 작업이 무엇인지에 달려 있습니다. 1.5 x 이상일 경우 하이퍼 스레딩이없는 작업은 대부분 예상됩니다.


3

하이퍼 스레딩이 구현되는 방식은 특정 CPU uarch에 따라 다릅니다. Nehalem에서 Skylake에 이르기까지 인텔은 파이프 라인의 고정 비율 (즉, 50/50) 공유 부분을 대폭 줄였으며, 이로 인해 공유 구조가 크게 바뀌 었습니다.

어쨌든 일반적으로 HT를 활성화하면 단일 스레드 실행이 상당히 느려졌지만 Linux 스케줄러의 작동 방식으로 인해 수 또는 실행중인 스레드가 물리적 코어 수보다 높은 경우 에만 발생합니다 . 이러한 상황에서 (스레드> 코어 인 경우) 일반적으로 최대 중요도의 총 처리량을 중요하게 생각하면 하이퍼 스레딩은 여전히 ​​순이익입니다.

이것이 어떻게 가능합니까? 이해해야 할 핵심은 CPU가 물리적 코어와 가상 코어를 동일한 코어로 표시하지 않으며, 다른 물리적 코어를 사용할 수있는 경우 Linux 스케줄러가 스케줄링을 피할 수있는 방식으로 가상 코어를 노출하는 것입니다. 즉, 첫째, 모두에게 물리적 코어를 사용합니다 다음 은 가상 하나를 사용하기 시작합니다.

이는 일반적으로 하이퍼 스레딩이 매우 유용한 기능 (Power8과 같은 다른 프로세서는 더 깊은 SMT 기술을 사용함)보다 처리량을 최대화하기 위해 가상 또는 물리적 코어 당 최소 하나의 스레드로 CPU를로드하여 처리해야한다는 것을 의미합니다. 실제 예를 들어, 18 코어 CPU에서 전체 성능을 추출하려면 36 개 이상의 스레드를 사용해야합니다.

두 가지 예외가 있습니다.

  1. 제한된 스레드 세트 (스레드 <물리적 코어)에서 대기 시간을 최소화하기 만하면 HT를 비활성화 할 수 있습니다.
  2. 아주 오래된 CPU (Pentium4 및 훨씬 작은 방식으로 Nehalem)는 유연하지 않은 파티션 규칙을 가지고있어 CPU가 많은 주요 리소스를 두 번째 스레드의 상태 /로드와 독립적으로 50/50 비율로 나눕니다. 이 경우 추가 처리량이 단일 스레드 성능을 크게 낮추는 데 도움이되도록 사용 사례를 벤치마킹해야했습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.