2012-08-17 1 views
5

현재 컴퓨터에 여러 유형의로드를 작성하기 위해 자체 테스트 응용 프로그램을 개발 중이므로 소프트웨어가 어떻게 작동하는지 확인할 수 있습니다. 내가 한 가지 요청에 매달려있다. 사용자가 프로그램을 실행하기 전에 CPU 사용률 (예 : 40 %)을 지정하는 일종의 방법을 만든다. 그러면 CPU가 범위 내에서 계속 유지 될 것이다. 그들이 집어 넣은 것의 10 %. 이전에 프로그램을 보았다고 들었지만, 그렇게하는 것으로 보았던 모든 사람들은 효과가 없었습니다. 평균 사용량을 읽고 스레드가 CPU 사용량이 낮아 지도록 잠자기를 시도하고 있지만 정확하지 않은 것으로 나타났습니다. 또한 CPU가 각각 다른 여러 서버에서 사용되기 때문에 각 서버에서 작동해야하므로 많은 코딩 작업을 수행 할 수 없습니다. 나는 개인적으로 정확하게 그 일을 할 수 있다고 생각하지 않지만, 다른 누군가가 이와 비슷한 소프트웨어를 발견했는지를 알기위한 마지막 시도로 여기에서 묻고 있습니다. 그리고 어떻게 작성 될지 알고 있습니다.C# 테스트 목적으로 지정된 퍼센트 사용률 근처에서 CPU를 유지하십시오.

편집 : 우선 순위가 낮은 스레드를 사용하려고 시도했으며, 유용하지 않다는 말을 들었습니다.하지만이 옵션을 사용하기 전에 테스트를 위해 만들어진 옵션이 있습니다.

+0

나는 당신이 소비 할 수있는 CPU 전력의 양을 제한하는 방법을 알지 못한다. 즉, OS의 임무는 스케줄링을 결정한다. 얼마나 많은 코어를 사용할 수 있는지 제한하는 것 외에는 없습니다. 당신이 할 수있는 일은 프로세스의 우선 순위를 바꾸는 것입니다. 잠자는 것에 대해서도 언급 할 것이지만, 이미 그것이 불완전한 해결책이라고 언급했습니다. –

답변

3

우리는 응용 프로그램 서버를 다시 튜닝하면서 비슷한 것을했습니다. 우리는 전반적인 처리량이 CPU가 약 70 % 일 때 가장 좋은 것으로 나타났습니다. 우리의 솔루션은 원하는 부하에 도달 할 때까지 각각의 스레드 사이에 지연 시간을두고 추가 스레드를 회전시키는 것이 었습니다. CPU가 80 %를 넘으면 실행중인 스레드 수를 줄였습니다 (스레드가 현재 작업을 마친 후 종료 됨). CPU가 60 % 이하로 떨어지면 우리는 새로운 스레드를 시작했습니다.

비슷한 논리를 적용하여 인공적로드를 생성하여 대상 CPU 사용률을 조정할 수 있습니다. 스레드는 미세 조정을 할 수 있도록 CPU와 비 CPU (IO 또는 잠자기)의 균형을 유지해야합니다. 스레드가 CPU를 많이 사용하는 경우 각 스레드는 CPU 코어를 약 100 % 사용합니다.

+0

내가 묻는 것에 신경 쓰지 않는다면, 스레드는 어떻게 생겼을까요? 현재 나는 무한 루프에서 상수를 덧셈과 뺄셈을하고 있으며, 그 자체로 전체 코어를 먹는다. (내가 현재 작업하고있는 머신이 그다지 강력하지는 않지만) – wgallon

+0

@BillyGallon, Infinite CPU 바운드 루프는 어떤 머신에서든 코어의 100 %를 먹을 것입니다 (OS 레벨 스케줄링이 우선 순위 나 다른 한계 (예 : usr에 의해 제안 된 것) 때문에 스케줄을 지정하지 않는 한) –

+0

우리의 경우 스레드는 실제 작업을 수행하여 DB 테이블을 생성 한 다음 계산을 수행합니다. 나는 CPU 집약적 인 계산으로 Thread.Sleep 호출 (잠깐 동안이지만 꽤 짧은 간격 동안 잠들기)이 적당한 CPU 사용률을 평균화하는 스레드를 만들어서 많은 스레드에 의해 생성 된 전반적인 부하를 제어 할 수 있도록해야한다고 생각합니다. . –