我正在尝试以编程方式从 Ubuntu 10.10 机器上的多个来源收集有关程序性能的数据。对于我所有的其他来源,我已经能够使用 RDTSC x86 指令收集它们,然后使用 gettimeofday 缩放它们以转换为绝对时间的秒数。但是,当我开始尝试将这些数据源与在 /sys/kernel/debug/tracing 中执行 sched_switch 跟踪的输出进行协调时,我遇到了一个问题,因为我看到的输出是从某个未知时间开始以秒和微秒为单位的。
我已经完成的步骤:
1.我确定Linux内核内部也使用RDTSC,但添加了一些它收集的偏移量,但我似乎没有能力检索。它也是在每个核心的基础上执行此操作的,这意味着我必须尝试所有四个核心并确定最好的一个,这似乎是解决这个问题的一个糟糕的解决方案。
2. 我尝试在打开日志记录时转换 RDTSC 时间,以查看至少转换本身是否一致(即一些恒定偏移),但规模似乎在整个运行过程中并没有保持不变。
3. clock_gettime(CLOCK_MONOTONIC, ...) 似乎有一个非常相似的值,但总是偏离一个无法例外的量(大约半秒),而且似乎也不完全一致。
如果我能够将其他数据源收集时间的方式更改为所需的时间(假设它不是性能密集型的),我应该如何收集时间以便在跟踪时间和我收集的时间之间进行协调?是否有某种方法可以将输出更改为 RDTSC,这样我就可以使用它,或者是否可以进行系统调用来获得与要跟踪的输出相同的时间?提前感谢您的帮助。