Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux can';t将性能时间戳与系统历元时间对齐_Linux_Performance_Perf - Fatal编程技术网

Linux can';t将性能时间戳与系统历元时间对齐

Linux can';t将性能时间戳与系统历元时间对齐,linux,performance,perf,Linux,Performance,Perf,我正在使用perf做一些优化工作。通过使用perf script显示我的perf记录并获得如下结果: MyServer 13631 [015] 2611179.755027: probe_app:stat_timer: (52bbe0) ...... 我编写了一个脚本来分析结果,需要将时间戳更改为历元时间戳(至少精确到秒) 为此,我首先获取主机启动时间戳 $ date -d "`uptime -s`" +%s 1562557105 并通过添加正常运行时间进行验证

我正在使用perf做一些优化工作。通过使用
perf script
显示我的perf记录并获得如下结果:

   MyServer 13631 [015] 2611179.755027: probe_app:stat_timer: (52bbe0)
   ......
我编写了一个脚本来分析结果,需要将时间戳更改为历元时间戳(至少精确到秒)

为此,我首先获取主机启动时间戳

    $ date -d "`uptime -s`" +%s
    1562557105
并通过添加正常运行时间进行验证

    $ cat /proc/uptime
    2612552.50 36615651.34
起始历元时间戳正确


但我发现perf时间戳211179.755027并不是系统启动后经过的秒数,正如文档中所说,在100s+时有一些错误。如何在执行“perf record”时获得准确的时间戳?我尝试了“-T”,但它似乎不起作用。

性能所使用的默认时钟(或底层的
perf_event_open
)实际上没有文档记录,因此我不必依赖它作为任何特定时钟。幸运的是,
perf
允许您使用
-k
选项选择特定的时钟。通常支持
CLOCK\u MONOTONIC
CLOCK\u MONOTONIC\u RAW
。根据事件和版本,其他时钟可能可用


如果您选择一个特定的时钟,则可以使用来获取匹配的时间戳。我不知道有什么简单的方法可以做到这一点,但C程序就可以了。

请在您的问题中包括
perf
/
内核
版本。谢谢@Zulan提供信息。我尝试过CLOCK_MONOTONIC,并编写了一个简单的测试代码来检查它:“CLOCK_gettime(CLOCK_MONOTONIC,&ts);printf(“sec=%d nsec=%d\n”,ts.tv_sec,ts.tv_nsec);”,CLOCK_MONOTONIC time的值与/proc/uptime相同,性能时间戳仍然比CLOCK_gettime结果有大约100秒以上的错误。看起来“-k CLOCK_单调”不适合我的情况。好奇。。。在我的系统(Arch的Linux/perf 5.2.5)上,
/proc/uptime
时钟单调*
之间有很大的差异(几十秒)。两个
时钟之间的微小差异是单调的*
(数百毫秒)。我所做的是:运行“sudo perf record sleep 1;/test”,/test是我的测试应用程序,以获得时钟的单调性,然后运行“sudo pref script”来检查性能时间戳,我从/test获得了“sec=2626411 nsec=206691096”,从perf script获得了2626311.114567。我的系统(Linux版本3.10.0-514.26.1.el7.x86_64,CentOS Linux版本7.6.1810,性能3.10.0)恐怕6年前的Linux版本不支持
perf
时钟ID。这是在Linux 4.1(2015)中引入的。我无法评论这些定制的古老Linux内核的后端口