当前位置: 首页 > 面试题库 >

Linux中微秒的准确(或更好)处理时间

赫连彬炳
2023-03-14
问题内容

我需要一种非常准确的方式来计时程序的各个部分。我可以为此使用常规的高分辨率时钟,但这将返回挂钟时间,这不是我所需要的:我只需要花时间运行我的进程。

我清楚地记得看到过一个Linux内核补丁,该补丁可以使我将进程的时间定为纳秒级,但我忘了给它加上书签,也忘了补丁的名称了:(。

我记得它是如何工作的:

在每个上下文切换上,它将读取高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的处理时间中。这样可以对过程的实际过程时间产生高分辨率的准确视图。

我使用常规时钟来保持常规处理时间,我相信这是毫秒精确的(1000Hz),对于我的目的来说太大了。

有人知道我在说什么内核补丁吗?我还记得它像一个单词之前或之后的字母-诸如“ rtimer”之类的东西,但我记不清了。

(也欢迎其他建议)

Marko建议的“完全公平的调度程序”不是我想要的,但看起来很有希望。我遇到的问题是,我可以用来获取处理时间的调用仍未返回足够细的值。

  • times()返回值21、22(以毫秒为单位)。
  • clock()返回的值21000、22000,相同的粒度。
  • getrusage()返回的值如210002、22001(等等),它们看起来具有更好的准确性,但这些值看起来明显相同。

因此,现在我可能遇到的问题是内核具有所需的信息,我只是不知道会返回该信息的系统调用。


问题答案:

如果您正在寻找这种级别的时序分辨率,则可能正在尝试进行一些微优化。如果是这样,您应该查看PAPI。它不仅提供时钟信息和虚拟(仅用于处理)时序信息,还提供对CPU事件计数器的访问,这在尝试提高性能时必不可少。

http://icl.cs.utk.edu/papi/



 类似资料:
  • 问题内容: 我使用Scala将PostgreSQL表导入到spark作为数据框。数据框看起来像 我正在将此数据帧转换为log_dt的数据格式为。为此,我使用了以下代码,使用函数将log_dt转换为时间戳格式。 当我使用命令打印以打印tablereader1数据帧时,得到以下结果 如何保留微秒作为时间戳的一部分?任何建议表示赞赏。 问题答案: 毫秒 您可以使用接受Java SimpleDateFor

  • 问题内容: 我在Vala中编写一些代码,在那里我将首先获取系统时间,然后创建一个文件,然后检索该文件的时间戳。时间戳记总是早于系统时间,介于500到1500微秒之间,这没有任何意义。 然后,我编写了一个简单的shell脚本: 结果如下: 如您所见,小数点后的前3位(毫秒)似乎可以正常显示,因为它们正在按预期的顺序递增,但是第4位及其后的数字看起来不正确。倒数第4至9位似乎在变慢。我有什么理由吗,尽

  • 问题内容: JavaScript中是否有具有微秒分辨率的计时功能? 我知道Chrome的timer.js,希望能够为其他友好的浏览器提供解决方案,例如Firefox,Safari,Opera,Epiphany,Konqueror等。我对支持任何IE均不感兴趣,但可以提供包括 IE 在内的_ 答案受欢迎的。 (鉴于JS中毫秒级计时的准确性很差,因此我不屏息!) 更新:timer.js宣传微秒分辨率,

  • 本文向大家介绍在8085微处理器中模拟秒表的程序,包括了在8085微处理器中模拟秒表的程序的使用技巧和注意事项,需要的朋友参考一下 我们编写8085汇编语言程序只是为了模拟一个秒表,以在地址字段中显示分钟和秒。提供了停止秒表的功能,以及用于继续显示秒表的时间,以显示恰好在停止命令之前的时间。

  • 问题内容: 我研究了Linux内核,发现对于x86_64体系结构,中断不适用于调用系统调用1。 对于i386体系结构(32位x86用户空间),更可取的是:或者为什么? 我使用Linux内核版本3.4。 脚注1:在某些情况下确实可以在64位代码中工作,但是从不建议这样做。 问题答案: 是在上进入内核模式的默认方法。该指令 在Intel处理器的 32位操作模式下不可用。 是最常用于以32位操作模式调用

  • 问题内容: 我的系统需要至少10毫秒的计时器精度。 我选择了timerfd,因为它非常适合我,但是发现即使在长达15毫秒的时间内,它也不是完全准确的,或者是我不理解它是如何工作的。 在一个10毫秒的计时器上,我测量的时间高达21毫秒。 我已经进行了一次快速测试,以显示我的问题。 这里是一个测试: 像这样执行: 即使假设有些可能的延迟,对我来说15毫秒的延迟听起来也太多了。 问题答案: 尝试按以下方