다음 시나리오를 고려해보세요.
- 내 컴퓨터에는 하나의 프로세스만 실행되고 있으며 top과 같은 리소스는 100% CPU 사용량을 제공하므로 괜찮습니다. CPU를 효율적으로 사용하고 있어요.
- 두 개의 프로세스가 있는데 각각 CPU의 50%를 차지합니다. 전체가 100%이므로 여전히 CPU를 효율적으로 사용하고 있습니다.
- 내 컴퓨터에는 N(상대적으로 많은 수) 프로세스가 실행되고 있습니다. CPU가 너무 바쁘기 때문입니다. 내 프로세스가 CPU 사용률 100%에 도달하지 못할 수도 있지만 프로세서도 사용량이 많기 때문에 여전히 의미가 있습니다.
- 이제 머신에 프로세스가 하나만 있지만 CPU 사용량이 여전히 CPU 100%에 도달하지 않는다고 가정합니다. 원인이 프로그램 오류(IO가 너무 많거나 프로그램이 전혀 작동하지 않음) 때문이라고 가정합니다.
사례 4를 감지하는 방법은 무엇입니까? 로드 평균은 다양한 시간에 걸쳐 평균을 계산하므로 좋은 측정항목이 아닙니다.
내 프로그램이 무부하 조건과 전체 부하 조건에서 CPU를 얼마나 효율적으로 사용하는지 수량화하는 데 사용할 수 있는 측정 기준이나 방법이 있습니까?
답변1
"효율성"은 아마도 "최소한의 자원을 사용하여 가장 유용한 결과를 생성하는 것"으로 가장 잘 설명될 것입니다.
프로그램의 목적이 파일 간 데이터를 처리하는 것이라면 "IO가 너무 많다"는 것은 비효율성의 척도가 아니라 해당 특정 프로그램의 전체 목적입니다.
마찬가지로 "100% CPU 사용량"은 전혀 좋지 않을 수도 있습니다. 이는 단지 심각하게 비효율적인 알고리즘의 증상일 수도 있습니다. 해결 중인 문제를 더 잘 이해하거나 동일한 알고리즘을 다른 언어로 다시 작성하면 단 5% 더 많은 CPU로 동일한 작업을 수행할 수 있습니다.
IIRC, 로드 평균은 CPU 사용량과 거의 관련이 없습니다. 기본적으로 실행할 준비가 된 스케줄러의 작업 대기열 길이를 측정합니다. 그러나 이러한 작업을 완료하는 데 10마이크로초 또는 10초의 CPU 시간이 필요한지 여부는 알 수 없습니다.
전반적인 프로그램 성과는 일반적으로 개별적으로 측정되고 분석되어 기대에 부응하도록 개선됩니다. 실시간 실행의 목표는 함께 잘 작동하는 프로세스의 혼합을 달성하고 서로 과도하게 간섭하기 시작하는 지점을 결정하는 것입니다(스케줄러는 대부분의 작업 부하에 대해 꽤 좋은 작업을 수행합니다). 이는 요구 사항 관리로 이어지고 궁극적으로는 더 큰 상자를 정당화하기 위한 비용/이익 분석으로 이어집니다.
한때 Windows 유휴 프로세스가 CPU의 약 97%를 소비하고 있다는 점을 매우 우려하는 관리자가 있었습니다. 그들은 실제로 효율성을 향상시키기 위한 프로그램 설정을 제안했습니다. 나는 방을 나가면서 웃음을 참아야 했다.