有什么方法可以通过更改Linux中的任何OS参数来减慢C ++程序的运行速度?这样,我想模拟一下,如果该特定程序恰好在速度较慢的计算机上运行,将会发生什么情况。
换句话说,对于该特定程序,速度更快的计算机应表现为速度较慢的计算机。
nice
是降低调度优先级的命令。变化古老,相对粗糙。您可以查看调度优先级,但是如果计算机不忙于做其他事情,您的程序仍将快速运行。因此,它可能不会提供足够的帮助。
有什么方法可以通过更改Linux中的任何OS参数来减慢C ++程序的运行速度?这样,我想模拟一下,如果该特定程序恰好在速度较慢的计算机上运行,将会发生什么情况。
换句话说,对于该特定程序,速度更快的计算机应表现为速度较慢的计算机。
nice
是降低调度优先级的命令。变化古老,相对粗糙。您可以查看调度优先级,但是如果计算机不忙于做其他事情,您的程序仍将快速运行。因此,它可能不会提供足够的帮助。
Answers:
nice
(和/或renice
)降低优先级。您也可以使用nice()
系统调用以编程方式进行操作。这本身不会降低执行速度,但是会使Linux调度程序分配更少(可能更短)的执行时间帧,更频繁地抢占,等等。有关调度的更多详细信息,请参见了解Linux内核的进程调度(第10章)。。cpufreq-set
命令控制(减速,加速)CPU 。sched_yield()
,这将在程序的性能关键部分(需要代码更改)产生其他进程的数量。malloc()
,free()
,clock_gettime()
使用等LD_PRELOAD,并做一些愚蠢的东西一样烧了几百万的CPU周期rep; hop;
,插入记忆障碍等,这将减缓为确保程序。(请参阅此答案以获取有关如何执行其中某些操作的示例)。-O0
启用断言(即-DDEBUG
))重新编译二进制文件,可以实现一定程度的速度降低。希望能帮助到你。
-ggdb3
)并没有减慢二进制文件的执行。它只是使其变得更大。
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调度程序的大多数解决方案都会出现此问题。 有一种来自Intel afair的线程分析器。我看到了Vtune发行说明。这是Vtune,但我很确定还有另一种分析线程竞争的工具。 请参阅:Intel Thread Checker,它可以检查某些线程竞争情况。但是我们不知道该应用程序是否是多线程的吗?
用途cpulimit
:
Cpulimit是一种工具,用于限制进程的CPU使用率(以百分比表示,而不是以CPU时间表示)。当您不希望批处理作业占用过多的CPU周期时,控制批处理作业很有用。目的是防止进程运行超过指定的时间比率。它不会更改nice值或其他调度优先级设置,但会更改实际的CPU使用率。而且,它能够动态,快速地适应整个系统的负载。
通过将SIGSTOP和SIGCONT POSIX信号发送到进程来完成对已使用cpu量的控制。
所有子进程和指定进程的线程将共享相同百分比的CPU。
在Ubuntu仓库中。只是
apt-get install cpulimit
以下是一些有关如何在已运行的程序上使用它的示例:
通过可执行文件名将进程“ bigloop”限制为40%CPU:
cpulimit --exe bigloop --limit 40 cpulimit --exe /usr/local/bin/bigloop --limit 40
通过PID将进程限制为55%CPU:
cpulimit --pid 2960 --limit 55