【问题标题】:C# Keep CPU at/near designated percent usage for testing purposesC# 将 CPU 保持在/接近指定百分比使用率以进行测试
【发布时间】:2012-08-14 06:17:37
【问题描述】:

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

编辑:我曾尝试使用较低优先级的线程,但也被告知这对他们没有用处(尽管在要求我这样做之前,我已经创建了仅用于测试目的的选项)。

【问题讨论】:

  • 我不知道有什么方法可以限制您可以消耗多少 CPU 功率,即操作系统的任务,确定调度;除了限制它可以使用的核心数量。你可以做的是改变进程的优先级,我也打算提到休眠它,但你已经注意到这是一个不完美的解决方案。

标签: c# testing cpu throttling


【解决方案1】:

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

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

【讨论】:

  • 如果你不介意我问,你的主题是什么样的?目前我只是让我在一个无限循环中不断地做加法和减法,这会自己吃掉整个核心(尽管我目前正在使用的机器不是很强大)
  • @BillyGallon,无限 CPU 绑定循环将占用任何机器上 100% 的内核(除非操作系统级别的调度由于优先级或其他限制,即如 usr 所建议的那样不会调度该线程)跨度>
  • 我们案例中的线程执行实际工作,从数据库表中选择数据,然后对其执行计算。我怀疑在 CPU 密集型计算中穿插 Thread.Sleep 调用(随机但相当短的时间间隔睡眠)应该允许您创建一个平均 CPU 利用率适中的线程,以便您有合理的能力控制由多个线程产生的总体负载.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2022-01-26
    • 1970-01-01
    • 2022-08-17
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多