有没有办法通过更改 Linux 中的任何操作系统参数来降低 C++ 程序的运行速度?通过这种方式,我想模拟如果该特定程序碰巧在一台真正速度较慢的机器上运行会发生什么。
换句话说,对于该特定程序,较快的机器应该表现为较慢的机器。
原文由 RoboAlex 发布,翻译遵循 CC BY-SA 4.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?您对您要查找的错误 类别 有所了解吗?这是竞争条件,还是代码在客户站点上表现不佳?
编辑: 您还可以使用 STOP 和 CONT 等信号来启动和停止程序。调试器也可以做到这一点。问题是代码 全速运行 然后停止。大多数使用 Linux 调度程序的解决方案都会有这个问题。有某种来自英特尔的线程分析器。我看到 了 Vtune 发行说明。这是 Vtune,但我很确定还有另一个工具可以分析线程竞争。请参阅: 英特尔线程检查器,它可以检查某些线程竞争条件。但是我们不知道应用程序是否是多线程的?
原文由 artless noise 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
nice
(和/或renice
)降低优先级。您也可以使用nice()
系统调用以编程方式进行。这本身不会减慢执行速度,但会使 Linux 调度程序分配更少(并且可能更短)的执行时间帧,更频繁地抢占等。有关调度的更多详细信息,请参阅 了解 Linux 内核的进程调度(第 10 章) .cpufreq-set
命令控制(减慢、加快)CPU。sched_yield()
,这将在程序的性能关键部分(需要更改代码)中为其他进程产生量子。malloc()
、free()
、rep; hop;
clock_gettime()
等常见功能,并使用 LD_PRELOAD 做一些愚蠢的事情,比如烧掉几百万个 CPU---
,插入内存屏障等。这肯定会减慢程序的速度。 (有关如何做这些事情的示例,请参阅 此答案)。-O0
并启用断言(即-DDEBUG
)重新编译二进制文件可以实现一些缓慢。希望能帮助到你。