gpt4 book ai didi

linux - 用于分析功能延迟的 SystemTap 脚本

转载 作者:太空狗 更新时间:2023-10-29 12:29:40 24 4
gpt4 key购买 nike

我的目标是分析内核模块中每个函数的执行时间。使用我在网上看到的示例脚本,我想出了以下脚本来满足我的需要。但偶尔我会得到计算延迟的负值。虽然,它们很少发生,但我想这表明我的脚本有问题。谁能帮我解决这个问题?

probe module(@1).function(@2).call { 
begin = gettimeofday_ns()
}

probe module(@1).function(@2).return {
if (begin>0)
stats <<< gettimeofday_ns() - begin
}

probe end {
if (begin == 0) {
printf("No samples observed so far.\n");

} else {
printf("Distribution of %s latencies (in nanoseconds) for %d samples\n", @2, @count(stats))
printf("max/avg/min: %d/%d/%d\n", @max(stats), @avg(stats), @min(stats))
print(@hist_log(stats))
}
}


global begin, stats

最佳答案

gettimeofday_*() 函数只能近似挂钟时间。跨 CPU 或跨时间调整时刻,值可能不会按照您期望的方式单调移动。 get_cycles() 在给定 CPU 上更加单调,并且可以使用其他一些与时钟相关的函数。

此外,您的 begin 变量是一个简单的标量。如果从多个线程/cpus 调用相同的函数,或者发生递归怎么办?它会被覆盖。这应该足够了(并且从嵌套/并发的角度来看可以正常工作):

// no probe FOO.call
probe module(@1).function(@2).return {
stats <<< gettimeofday_ns() - @entry(gettimeofday_ns())
}

关于linux - 用于分析功能延迟的 SystemTap 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31463066/

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