gpt4 book ai didi

linux - 纪元时间/时间戳 wireshark vs perf trace

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:18 24 4
gpt4 key购买 nike

我正在尝试调试我的 Linux 服务器上的一些问题:

每 2 分钟我就会有一些 igmp 查询,我想找到它的来源。

从 Wireshark 捕获中我看到了查询的执行时间:

**1488124556.773784** IP 0.0.0.0 > all-systems.mcast.net: igmp query v2

这次我可以毫无问题地转换为实时:

**[root@server ~]# date -d @1488124556.773784: -> 
Sun Feb 26 10:55:56 EST 2017**

但是当我尝试使用 perf 命令跟踪 linux 进程时:

perf trace -a -T -o trace.out 

trace.out中:

**15471296674.961** ( 0.023 ms): qemu-kvm/6621 ioctl(fd: 12<anon_inode:kvm-vcpu>, cmd: 0xae80                        ) = 0

**15471296674.979** ( 0.011 ms): qemu-kvm/6621 ioctl(fd: 12<anon_inode:kvm-vcpu>, cmd: 0xae80
) = 0

**15471296674.986** ( 0.004 ms): qemu-kvm/6621 ioctl(fd: 6<anon_inode:kvm-vm>, cmd: 0xc008ae67, arg: 0x7fbba66bf9d0


15471296674.990 ( 0.002 ms): qemu-kvm/6621 ioctl(fd: 6<anon_inode:kvm-vm>, cmd: 0xc008ae67, arg: 0x7fbba66bf9f0 ) = 0

**15471296675.002** ( 0.010 ms): qemu-kvm/6621 ioctl(fd: 12<anon_inode:kvm-vcpu>, cmd: 0xae80

**15471296675.009** ( 0.003 ms): qemu-kvm/6621 ioctl(fd: 6<anon_inode:kvm-vm>, cmd: 0xc008ae67, arg: 0x7fbba66bf9f0


**15471296675.021** ( 0.010 ms): qemu-kvm/6621 ioctl(fd: 12<anon_inode:kvm-vcpu>, cmd: 0xae80 ) = 0

我发现时间不是纪元格式:

从我找到的perf page的手册

-T --time Print full timestamp rather time relative to first sample.

我的问题:

是否可以在 Wireshark 和性能跟踪工具中找到相同的时间戳格式或类型?

谢谢。

最佳答案

简答

不幸的是,从内核 4.4 开始,无法将 perf-trace 时间戳精确转换为 unix 时间。您可以粗略地将它们与/proc/uptime 中看到的时间相匹配,但它们自启动后就开始漂移,差异以秒甚至分钟为单位。

长答案

perf 依赖于 sched_clock(),它与启动后的纳秒数相关。出于某种原因,perf 将小数点放在了错误的位置,因此您看到的是秒数乘以 1000。

问题是,sched_clock() 报告的数字实际上不能从用户空间访问。它们不同于 CLOCK_MONOTONIC(可以在/proc/uptime 中看到)和 CLOCK_MONOTONIC_RAW(可以通过 clock_gettime 系统调用获取)。

至少提出了两个补丁来添加将 sched_clock() 暴露到用户空间的内核接口(interface),不幸的是都被拒绝了。从那以后我不知道有任何成功的尝试。

被拒绝的内核补丁:

关于linux - 纪元时间/时间戳 wireshark vs perf trace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com