假设我有一个.c 和.cpp 文件,它们运行一些代码来计算某个过程的持续时间;
基本上,我会获取某个方法之间的微秒数,然后计算该方法需要多少秒。但我想知道是否有任何其他过程(例如更新后面的某些内容)会影响这些微秒数,我想知道如何防止其他过程影响此计算。
简而言之,请向我解释如何阻止其他进程以便准确测量我对 .c 文件的方法调用。
你能帮帮我吗?谢谢
答案1
作为 root,您可以通过设置较低的优先级值来启动具有更高调度优先级的应用程序。这可以使用以下命令完成nice
,例如:
sudo nice -n -20 your_command
-20 是您可以给出的最高优先级,0 是默认值,19 是最低优先级。请参阅man nice
以了解更多信息。
如果两个进程都已准备好运行并请求 CPU 时间,这将使 CPU 调度程序优先考虑您的进程。当您的进程未使用 100% 的 CPU 时间时,它不会阻止其他进程运行,而这无论如何也是您不希望的。
但请注意,这也会以 root 身份运行您的命令,并且为消耗所有 CPU 时间的进程设置高优先级可能会导致您的系统无响应。
除此之外,正如评论中提到的,要测量命令的运行时间,请让它在相同条件下运行几次(输入和环境相同,因此在理想情况下,该过程将 100% 执行完全相同的操作),并将最短的时间作为实际测量值。环境因素可能会减慢应用程序的速度,但不会真正加快速度,因此最快的运行是受外部影响最小的运行。
您不仅应该考虑 CPU 使用率,而且磁盘读/写性能也是一个相当重要的因素。为了进行精确且可重复的测量,您不应执行任何实际的硬盘操作,而应仅在 RAM 中操作,从那里读取应用程序和数据,并且仅对 RAM 执行任何写入操作。您可以/mnt
使用以下方法将 RAM 磁盘安装到例如(或任何其他地方),使其像普通文件系统一样运行:
sudo mount -t tmpfs none /mnt