让程序运行缓慢

新手上路,请多包涵

有没有办法通过更改 Linux 中的任何操作系统参数来降低 C++ 程序的运行速度?通过这种方式,我想模拟如果该特定程序碰巧在一台真正速度较慢的机器上运行会发生什么。

换句话说,对于该特定程序,较快的机器应该表现为较慢的机器。

原文由 RoboAlex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 431
2 个回答
  • 使用 nice (和/或 renice )降低优先级。您也可以使用 nice() 系统调用以编程方式进行。这本身不会减慢执行速度,但会使 Linux 调度程序分配更少(并且可能更短)的执行时间帧,更频繁地抢占等。有关调度的更多详细信息,请参阅 了解 Linux 内核的进程调度(第 10 章) .
  • 你可能想 增加定时器中断频率 来增加内核的负载,这反过来会减慢一切。这需要内核重建。
  • 您可以使用 CPU 频率缩放 机制(需要内核模块)并使用 cpufreq-set 命令控制(减慢、加快)CPU。
  • 另一种可能性是调用 sched_yield() ,这将在程序的性能关键部分(需要更改代码)中为其他进程产生量子。
  • 您可以使用 LD_PRELOAD 挂钩诸如 malloc()free()rep; hop; clock_gettime() 等常见功能,并使用 LD_PRELOAD 做一些愚蠢的事情,比如烧掉几百万个 CPU --- ,插入内存屏障等。这肯定会减慢程序的速度。 (有关如何做这些事情的示例,请参阅 此答案)。
  • 正如@Bill 所提到的,您始终可以在虚拟化软件中运行 Linux,该软件允许您限制分配的 CPU 资源、内存等的数量。
  • 如果你真的希望你的程序变慢,可以在 Valgrind 下运行它(也可以帮助你发现应用程序中的一些问题,如内存泄漏、错误的内存引用等)。
  • 通过禁用优化(即 -O0 并启用断言(即 -DDEBUG )重新编译二进制文件可以实现一些缓慢。
  • 您总是可以购买一台旧 PC 或便宜的上网本(例如 每个孩子一台笔记本电脑,完成测试后不要忘记将它捐赠给孩子)并运行您的程序。

希望能帮助到你。

原文由 user405725 发布,翻译遵循 CC BY-SA 3.0 许可协议

QEMU 是 Linux 的 CPU 模拟器。 Debian 有它的软件包(我想大多数 发行版 都会)。您可以在模拟器中运行程序,其中大多数应该支持减慢速度。例如, Miroslav Novak 有补丁可以减慢 QEMU。

或者,您可以交叉编译到另一个 CPU-linux(arm-none-gnueabi-linux 等),然后让 QEMU 翻译该代码以运行。

好的 建议很简单,如果你将它与另一个会消耗 cpu 的进程结合起来,它可能会起作用。

 nice -19 test &
while [ 1 ] ; do sha1sum /boot/vmlinuz*; done;

您没有说您是否需要图形、文件和/或网络 I/O?您对您要查找的错误 类别 有所了解吗?这是竞争条件,还是代码在客户站点上表现不佳?

编辑: 您还可以使用 STOPCONT 等信号来启动和停止程序。调试器也可以做到这一点。问题是代码 全速运行 然后停止。大多数使用 Linux 调度程序的解决方案都会有这个问题。有某种来自英特尔的线程分析器。我看到 了 Vtune 发行说明。这是 Vtune,但我很确定还有另一个工具可以分析线程竞争。请参阅: 英特尔线程检查器,它可以检查某些线程竞争条件。但是我们不知道应用程序是否是多线程的?

原文由 artless noise 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题