리눅스에서 하이퍼 스레딩으로 CPU 부하 측정


12

멀티 코어 하이퍼 스레딩 지원 CPU의 실제 사용법을 어떻게 알 수 있습니까?

예를 들어 4 개의 가상 코어를 표현하는 2 개의 코어 CPU를 고려하십시오.

top가상 코어 중 하나의 코어가 완전히 사용되므로 단일 스레드 워크로드가 이제 100 %로 표시 됩니다. top4 개의 실제 코어가있는 것처럼 CPU와 예상대로 작동합니다.

그러나 두 개의 스레드를 사용하면 문제가 발생합니다. 모든 것이 제대로 작동하면 두 개의 실제 코어와 균형을 이룰 수 있으므로 200 % 사용률이 100 %가됩니다. . 나에게 괜찮아 보인다.

그러나 두 스레드가 단일 실제 코어에서 실행되는 경우 100 %의 두 배를 사용하는 것으로 표시되어 가상 코어 사용량이 200 %가됩니다. 그러나 실제로는 두 개의 스레드에서 전원을 공유하는 하나의 코어가되며 총 CPU 전력의 절반 만 사용합니다.

따라서로 표시된 사용량 top은 총 CPU 워크로드를 측정하는 데 사용할 수 없습니다.

또한 하이퍼 스레딩이 실제 코어에서 두 가상의 균형을 어떻게 유지하는지 궁금합니다. 두 스레드가 다른주기를 사용하는 경우 실제로드가 다르더라도 가상 코어가 '적응'되어 둘 다 100 %로드를 표시합니까?


1
운영자 시스템이 하이퍼 스레딩 가상 코어와 물리적 코어 권한의 차이점을 인식하지 못한다는 것을 알고 있습니까?
Ramhound

그렇게 보이지만 꼭 그럴 필요는 없습니까? 실제 대 가상 코어 매핑은 간단한 1-2 맵입니다. 문제는 실제 코어에서 다른 일정으로 예약하여 사용 가능한 성능을 실제로 변경하는 가상 코어의 부하를 측정하는 방법입니다. 그러나 모든 데이터는 유용하다고 생각합니다. 문제는 적절한 결과를 얻는 도구가 어디에 있습니까?
dronus

1
100 %가 모든 실제 코어의 모든 사이클이 사용됨을 의미하는로드 측정을 원합니다.
dronus

1
간단히 말해서 : 현재 진행중인 작업 속도를 늦추지 않고 CPU가 추가 작업을 수행 할 수 있는지 주어진 순간에 말하는 방법은 무엇입니까?
dronus

1
@Ramhound, 따라서 논리 코어가 8 개인 물리적 4 코어 프로세서가 있고로드 평균이 4.00이면 100 % 또는 50 %입니까?
Buttle Butkus

답변:


5

오라클의 마틴 Tegtmeier이 지난 해에 대한 흥미로운 블로그 포스트를 작성했습니다 : https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

짧은 대답; 하이퍼 스레딩은 전체 CPU 사용률 / CPU 유휴 백분율을보고 할 수있는 top의 기능을 정말로 망칩니다.

최악의 경우, 코어 당 100 % 활용률에서 2 개의 스레드를 실행하는 2 코어 4 가상 코어 CPU가 CPU를 거의 포화시킬 수 있습니다. (실행 포트 사용에 따라 CPU에서 완전히 다른 컴퓨팅 리소스를 사용하는 스레드 만 현재 스레드의 성능에 영향을주지 않고 계속 실행될 수 있습니다.) 그러나이 경우 top은 여전히 ​​50 %의 유휴 상태를보고합니다.



4

코어 활용은 시스템의 부하와 매우 다릅니다. 코어 사용률은 코어가 무언가를 계산하거나 명령을 기다리는 양만 보여줍니다. CPU가 무언가를 계산하는 주어진 시간에 해당하는 100 % 일 수 있습니다.

그러나로드는 다른 것이며로드는 일반적으로 프로세스가 리소스를 기다려야하는지 여부를 결정하기 위해 측정됩니다. 프로세스가 리소스를 기다리지 않으면 성능이 뛰어난 시스템을 보게됩니다. 그러나 때때로 시스템 속도는 느리지 만 CPU 사용률은 낮습니다. 이는 일반적으로 일부 프로세스가 리소스를 대기하고 CPU를 해제하지 않음을 의미합니다. 이러한 종류의 시나리오에서는 CPU 사용률이 높지 않지만 시스템 용량을 초과 할 수 있습니다.

Linux 시스템에서로드 평균은 시스템의 전체 성능을 측정하기 위해 계산 된 값입니다. 로드 평균 값은 병렬 컴퓨팅 리소스와 비교해야하며 코어는 구체적입니다. 따라서 물리적 코어가 4 개인 시스템의로드 평균이 4 이상이면 일부 프로세스가 리소스를 기다릴 것이라고 안전하게 말할 수 있습니다.

CPU 사용률이 100 또는 10 % 인 경우 중요하지 않습니다. 로드 평균은 200 또는 300만큼 높을 수 있으며,이 경우 시스템은 거의 응답하지 않습니다.

정상적인 작동 조건에서 서버로드 평균은 오랫동안 코어 수를 초과하지 않아야합니다. 제 생각에는 짧은 스파이크는 중요하지 않습니다. w출력 에서 볼 수있는 3 개의 숫자 는로드 av입니다. 1/5/15 분 동안.


0

내 의견으로는 위의 답변 중 어느 것도 만족스럽지 않습니다.

다음 링크에서 언급 한 기사 가이 질문에 대한 답변을 제공하는 것으로 생각됩니다 .http : //perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

인용문:

HT의 기본 개념은 현재 실행중인 앱이 정지 될 때 다른 애플리케이션 스레드를 실행할 수 있도록하는 것입니다. 분기 잘못 예측, 파이프 라인의 기포 등으로 인해 가능합니다.이를 가능하게하려면 다른 포트 또는 AS 레지스터가 있어야합니다. HT가 활성화되면 해당 레지스터가 OS에 표시됩니다. 그러나 OS (및 사용중인 성능 도구에 이르기까지 먹이 사슬까지)는 이제 두 배의 프로세서 용량 (즉, 각 AS 포트에서 100 % CPU)을 사용할 수 있다고 생각합니다.

그러나 HT가 활성화되기 전에 시작한 단일의 물리적 코어 는 여전히 하나의 실행 단위입니다. 차이점은 2 AS 포트간에 어떤 방식으로 공유되고 있다는 것입니다. 단일 코어가 두 포트 사이를 전환하는 방법은 매우 복잡하지만 폴링 된 대기열 측면에서 가장 쉽게 이해할 수 있습니다. 나는 GCaP 수업에서 그 수준에 대해 자세히 설명합니다.

필자가 보유한 최상의 테스트 측정 결과, 각 HT 포트는 평균 75 % 이상, 평균 OS 또는 OS에 따라 예상되는 총 200 % 용량의 150 % 이상이 될 수 없음을 나타냅니다. 앞서 언급 한 "누락 된"50 % 용량은 환상입니다. 인텔은 일반 애플리케이션에서 120 % ~ 130 % 범위의 무언가를 기대할 수 있다고 주장했다.

실제로 각 가상 코어에서 운영 체제가 100 %에 도달 할 수 있다고 확신합니다. 방금 다음을 수행했습니다.

mvn clean install -DskipTests -T 5

그리고 8 개의 가상 코어와 4 개의 물리적 코어가 모두 100 % CPU 사용률에 도달했음을 보증 할 수 있습니다. 그리고 내 컴퓨터에는 8 코어가 없습니다.

간단히 말해서, 총 CPU로드가 최대 100 %를 초과하고 물리적 코어의 정확히 100 %를 사용하여 상당히 정확할 경우 다음을 가정 할 수 있습니다. 물리적 CORE 1이 운영 체제 CPU 1과 CPU 2로 분할되어 있다면 CPU 1의 총 사용량은 50 %이고 CPU 2의 총 사용량은 50 %입니다. 해당 CPU에 총 100 %의 사용 압력을가합니다. 당신은 그것을 최대한 활용했습니다.

그러나 물론 시스템 모니터링 도구의 운영 체제는 그것이 당신에게 환상을 판다는 것을 모릅니다. 운영 체제의 관점과 리소스 관리 방법에서 볼 때이 두 가상 코어 각각이 여전히 50 % 유휴 상태라고 믿기 때문에 실행해야 할 작업이 더 있으면 두 코어에 균일하게 분배하려고합니다. . 따라서 CPU 사용률이 100 %를 초과하면 CPU 사용 기간 동안 CPU에서 시간이 걸리도록 변경되지 않은 해당 시간 동안 실행 대기중인 작업이 항상 있습니다. 결국에는 얻을 수 있지만 실제로 실행되도록 예약되어 있어도 실제로 실행되지 않는 스레드가 항상 있습니다.

감사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.