C#将CPU保持在/接近指定的百分比用量以进行测试

时间:2012-08-17 19:16:59

标签: c# testing cpu throttling

我目前正在开发一个小型内部测试应用程序,以便在计算机上创建多种类型的负载,以便我们可以看到我们的软件在负载下如何工作。我在一个请求上被挂起,因为我在用户运行程序之前用某种方式指定CPU的使用百分比(比如说40%),这有望保持cpu在一个范围内+ - 他们投入的比例是他们的10%。我被告知他们以前见过程序,但是我所看到的每一个声称这样做都没有用。我试图读取平均使用情况并让线程运行以便CPU使用率降低,但我发现这不准确。它也将用于多个服务器,每个服务器都有不同的CPU,所以我不能做很多硬编码,因为它需要在每个服务器上工作。我个人认为不可能准确地做到这一点,但我在这里要求最后努力看看是否有其他人遇到过与此类似的软件,并且知道它是如何编写的。

编辑:我试图使用优先级较低的线程,并且还被告知对他们没有用处(虽然我在创建之前只是为了测试而创建的选项)。

2 个答案:

答案 0 :(得分:3)

我们在调整应用服务器的过程中做了类似的事情。我们发现当CPU约为70%时,我们的整体吞吐量最佳。我们的解决方案是启动额外的线程,每个线程之间有一个延迟,直到达到所需的负载。如果CPU超过80%,我们减少了运行线程的数量(发信号通知线程完成当前工作然后终止)。如果CPU降到60%以下,我们就开了一个新线程。

您可以应用类似的逻辑来创建可以调整到目标CPU利用率的人工负载。您的线程需要平衡CPU和非CPU(IO,或只是睡眠)才能进行微调。如果您的线程非常占用CPU,则每个线程将消耗1个CPU核心到大约100%。

答案 1 :(得分:2)

从Windows 8开始,您可以制作操作系统调度程序cap the CPU usage using Windows Jobs