작업 관리자 CPU 이용률의 의미

mohadang·2023년 5월 7일
0

Windows System Programming

목록 보기
11/17
post-thumbnail

컴퓨터가 느려진다 싶으면 가장 먼저 확인해보는 작업 관리자의 CPU 이용률
이 수치가 높으면 CPU가 바쁘고 특정 프로세스의 수치가 높으면 자원을 많이 잡아먹는 CPU로 생각하며 정작 이 CPU 이용률값이 어떻게 계산 되는지는 관심이 없었다

그러다 우연히 저 작업 관리자 CPU 이용률이 필요한 일이 생겼고 단순히 시스템 API 하나 가져다 사용하면 될것으로 생각 하였는데 일이 생각보다 복잡하였다

작업 관리자의 CPU 관련 수치

작업 관리자 - 프로세스 탭

CPU 이용률을 파악하기 위해 테스트를 해본다
현재 16 코어를 가진 PC에서 8개의 코어에 대해 스트레스 부하 테스트(CPU-Z)를 진행 하였다
일반적으로 50%의 CPU 이용률이 기록될 것으로 예상되지만 그렇지 않다

작업 관리자에서는 50%가 아닌 89%를 기록하였다 그중 스트레스 부하 테스트 어플리케이션이 85%를 차지 하는 것을 볼 수 있다. 반면 프로세스 익스플로어에서는 50% 근접한 수치가 나왔다. 프로세스 익스플로어의 그래프를 보면 8개의 코어에 대해 그래프가 치솟았다. 이것이 우리들이 기대하는 수치일 것이다

작업 관리자 또는 프로세스 익스플로어 둘중 하나가 CPU 이용률을 잘못 계산 하는 것일까 ?
작업 관리자의 '성능' 탭을 보면 그렇지도 않은 것 같다

작업 관리자 - 성능 탭

이용률은 여전히 90%에 육박하지만 각 코어별 이용량은 프로세스 익스플로어의 그래프와 똑같으며 8개의 코어 그래프만 최대치로 사용 하는것이 보인다. 즉 작업관리자도 16개의 코어중 8개의 코어가 스트레스를 받고 있다는 것을 알고 있는 것이다

작업 관리자 - 자세히 탭

작업 관리자 '자세히' 탭은 또 다르게 표현한다

여기서는 스트레스 부하 테스트 어플리케이션이 50%를 사용한다고 나온다
오히려 이 수치가 우리가 기대했던 수치를 잘 표현한다

작업 관리자 CPU 이용률

우리가 작업 관리자에서 보이는 CPU 이용률을 얻으려면 어떻게 해야할까 ?
이를 구현하기 위해 성능 카운터의 '% Processor Utility', '% Processor Time' 값을 출력하거나 이 값에 core 갯수를 나누는등 여러 시도를 하였지만 정확한 전체 CPU 사용량을 구할 수 는 없었다. 그 전에 작업 관리자 CPU 이용률이 무엇일까 ? 어떤게 계산한 것이며 왜 이 수치를 제일 먼저 볼 수 있도록 하였을까 ?

CPU 이용률 계산

CPU 성능을 나타내는 지표로 클럭 속도가 있다. 주파수라고도 하며 단위 역시 주파수를 나타내는 Hz를 사용하고 있다. 만약 클럭 속도가 3.2GHz라면 CPU는 초당 32억 번의 사이클을 실행한다는 뜻이다

사이클 한번이 명령어 하나를 처리하는 의미는 아니다 단일 클럭 사이클에서 다수의 명령이 완료되는 경우가 있고, 하나의 명령이 여러 클럭 사이클에 걸쳐 처리되는 경우가 있다

내 CPU의 기본 클럭 속도는 작업 관리자의 성능 탭에서 확인 가능 하다

다양한 CPU 설계에 따라 명령을 다르게 처리하므로, CPU 성능 비교시 동일한 CPU 브랜드와 세대에서 클럭 속도를 비교하는 것이 가장 좋다. 예를 들어, 높은 클럭 속도를 가진 5년 전의 CPU가 더 낮은 클럭 속도를 가진 최신 CPU에 비해 성능이 떨어질 수 있다. 최신 아키텍처가 명령을 더 효율적으로 처리하기 때문이다

CPU가 사이클을 돌면서 특정 프로세스의 명령을 수행하는 BUSY 상태이거나 급한 일이 없으면 IDLE 상태일 것이다. CPU 이용률은 CPU 사이클중 BUSY 상태가 얼마나 차지하는지를 나타내는 지표이다. 이 사실을 알면 작업 관리자 성능 탭의 CPU 이용률 그래프가 어떤 의미인지 대략적으로 감이 잡힌다

60초 간 이용률인데 좀더 정확히는 60 초간의 사이클(2.5GHz) 중 CPU가 BUSY 상태인 비율인 것이다 그리고 이 그래프는 각 코어마다 그 비율을 나타내고 있다

작업 관리자 CPU 이용률이 이상한 이유

결론적으로 CPU 클럭 속도가 증가 하였고 작업 관리자에서 이 증가된 메트릭 값을 반영하지 못한 채로 표시한 것이다

위 성능 탭을 보면 기본 속도 이외에 속도라는 항목도 보인다 근데 이게 기본 속도를 뛰어 넘어 4.35GHz 가 되었다. 같은 시간이라도 좀더 많은 싸이클을 돌 수 있으며 더 많은 일을 할 수 있는 것이다

인텔 CPU는 터보 부스트라는 기술이 있는데 CPU 작업량이 많을 경우 동적으로 클럭 속도를 자동으로 향상하여 대용량 워크로드를 처리하는 것이다. 그리고 이 기술은 인텔 뿐만 아니라 다른 CPU 제조사에서도 구현한 기술이다(thermal throttling, Intel Speed Step, Intel Turbo Boost, AMD Precision Boost 2, AMD Precision Boost Overdrive, C-State management for power savings when Balanced or Power Saver power plans are enabled...)

그리고 그림은 다음과 같이 바뀌어야 할 것이다

문제는 여기서 발생한다. CPU 클럭이 높아져 BUSY 상태는 길어졌는데 계산을 현재 속도 4.35GHz가 아닌 기본 속도 2.5GHz로 계산을 해버린 것이다. 위 그림에서 BUSY의 막대가 2.5GHz 사이클 막대의 90%를 차지하고 있다.

2.5GHz CPU 사이클이 100이라고 가정하고 4.35GHz일때 사이클을 계산해보면 대략 1.74배 사이클이 증가한 것을 알 수 있다

2.5 : 4.35 = 100 : X
4.35 * 100 = 2.5X
(4.35 / 2.5) * 100 = X
X = 174

사이클이 1.74배 증가 하였으니 CPU BUSY도 1.74배 증가 하였을 것이다
그래서 기존 이용율 50에 1.74를 곱하면 87이라는 결과가 나오며 이는 CPU 이용률 90%와도 비슷한 수치이다

EX) CORE 4개 성능 테스트

16개중 4개의 코어만 사용하니까 원래대로라면 25%가 나와야 하지만 47%가 나왔다
다시 계산 해보면 현재 CPU 속도 4.45, 사이클은 1.78배 증가하였다.
25%에 1.78을 곱하면 44.5%가 나온다

테스트

성능 테스트를 할때 처음에는 CPU-Z 프로그램을 사용 하였으나 쓰레드 생성시 특정 코어에만 할당 하는 기능이 없어 8개 쓰레드를 사용하는데 10개의 코어를 사용하는 현상이 발생 하였다. 그래서 단순하게 이용률 계산 하는것이 어려움이 있었다

반면 CPU Stress 도구를 사용하면 각 쓰레드마다 고정된 코어를 할당할 수 있어 8개 코어에 대해서만 스트레스를 줄 수 있었고 단순하게 계산 하는 것이 가능 하였다

결론

  • 작업 관리자의 CPU 사용률은 정확히 어떻게 계산이 되는지 모르며 우리가 생각하는 CPU 이용률과 다르며 비 직관적이다
  • 작업 관리자 CPU 이용률이 100% 찍었다고 실제로 모든 CPU를 사용하는 것은 아니다
  • 게임을 실행하면서 그래픽카드에서 터보 모드(?)를 사용할때 CPU 사용량이 100%로 넘는 경우가 있는데 작업 관리자가 아닌 게임에서 제공하는 성능 모니터링 프로그램을 보면 사용량이 100% 보다 작게 표시를 한다. 작업 관리자의 CPU 사용량을 조사하면서 작업 관리자의 CPU 사용량이 굉장히 부정확하고 오해의 소지가 있다는 글작성을 많이 보았다. 이런 경험으로 보았을때 작업 관리자의 CPU 이용률 보다 각 그래픽카드사에서 제공하는 성능 모니터링 프로그램이 좀더 정확 할 것이라고 생각된다

참고

profile
mohadang

0개의 댓글