测量时间

使用SystemTap进行追踪可以很方便地测量出某个进程所需的时间。但是需要注意的是,不适合用于几微秒以下的时间测量。这是因为,虽然由于脚本的制作和机器的性能而有所不同,但SystemTap自身系统开销的影响是不能忽视的。

在内核内部的处理中,有很多是将非同步的事件作为触发器来推进处理。本节提到的nanosleep()是将计时器的中断事件等作为触发器从休眠状态恢复。这个计时器的中断事件是非同步的事件,这个时刻会受到系统负载情况的影响。另外,将执行了nanosleep()的进程从休眠状态唤醒,重新进行调度也需要花费时间。这样,进程一般就会在比所要求的休眠时间稍晚的时刻从nanosleep()系统调用恢复。本次测量的就是实际休眠的时间。

为了测量实际的休眠时间,将执行了nanosleep()后的时刻和从nanosleep()恢复的时刻的差作为时间差显示。测量的时刻是使用SystemTap提供的gettimeofday_us(),以微秒为单位获取当前时刻。