之前一直使用 cprof 来分析 c/c++ 程序的性能瓶颈,可惜在 2.6 内核 + 多线程的情况下, cprof 貌似不工作了。无奈之下,使用 gettimeofday 来人肉分析。为了方便,写了这样一个类
class SP_NKClock {
struct timeval mBornTime;
struct timeval mPrevTime;
};
SP_NKClock :: SP_NKClock()
{
spnk_gettimeofday ( &mBornTime, NULL );
spnk_gettimeofday ( &mPrevTime, NULL );
}
long SP_NKClock :: getAge()
{
struct timeval now;
spnk_gettimeofday ( &now, NULL );
return (long)( ( 1000000.0 * ( now.tv_sec - mBornTime.tv_sec )
+ ( now.tv_usec - mBornTime.tv_usec ) ) / 1000.0 );
}
long SP_NKClock :: getInterval()
{
struct timeval now;
spnk_gettimeofday ( &now, NULL );
long ret = long( ( 1000000.0 * ( now.tv_sec - mPrevTime.tv_sec )
+ ( now.tv_usec - mPrevTime.tv_usec ) ) / 1000.0 );
mPrevTime = now;
return ret;
}
getInterval 和 getAge 都返回以毫秒为单位的时间间隔。
用这个类来分析下面这一段代码
void doSth( ... )
{
int load = 0, process = 0, save = 0, total = 0;
SP_NKClock clock;
load_from_file( ...... );
load = clock.getInterval();
logic_process( ...... );
process = clock.getInterval();
save_to_file( ...... );
save = clock.getInterval();
total = clock.getAge();
printf( "load %d, process %d, save %d, total %d\n",
load, process, save, total );
}
最后打印出来的结果,有点出乎意外,就是 load + process + save != total 。
仔细想了一下,发现问题就出现 getInterval 和 getAge 返回的是毫秒,而 gettimeofday 是精确到百万分之一秒的。上面的代码中,如果各个步骤的执行时间不超过 1 毫秒,那么用 getInterval 得到的就是 0 。但是 3 个步骤加起来之后,如果超过 1 毫秒的,那么 total 的值就是 1 毫秒。
分享到:
相关推荐
在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙,下面一起来看看
系统自带的ping命令当它接送完所有ICMP报文后,会对所有发送和所有接收的ICMP报文进行统计,从而计算ICMP报文丢失的比率。为达此目的,定义两个全局变量:接收计数器和发送计数器,用于记录ICMP报文接受和发送数目。...
gettimeofday 取得目前的时间例子
在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中。此函数接收两个结构体参数,分别为timeval、timezone. 两个结构体的声明如下: struct timeval { time_t tv_sec;...
计算系统运行一个thread需要多长时间
1,gettimeofday xtime使用总结 2,含有自测代码程序
该函数用通过调用gettimeofday分类统计了机器的指令周期反应时间。精度到微秒。
主要介绍了php使用gettimeofday函数返回当前时间并存放在关联数组里的方法,涉及php中gettimeofday函数的使用技巧,需要的朋友可以参考下
C语言settimeofday()函数:设置当前时间戳 头文件: #include <sys> #include ...注意,在Linux下,只有root 权限才能使用此函数修改时间。 返回值:成功则返回0,失败返回-1,错误代码存于errno
操作系统实验,压缩包中包括Linux和windows进程控制源代码及实验报告。 进程控制实验题目: 设计并实现Unix的“time”命令。...• 调用gettimeofday()来获取时间 mytime的用法: $ mytime.exe program1
设计并实现Unix的"time”命令。"mytime”命令通过命令行参数...调用gettimeofday()来获取时间 mytime的用法: $ mytime.exe program1 $ mytime.exe program2 t t为时间参数 显示结果: **小时**分**秒**毫秒**微秒
----------------------------------------------- ---------------------------------------------- 此模型使用 Raspberry Pi 库块来切换 LED 并执行自定义编写的 S-Function 以访问目标系统时间进行比较到运行模拟...
下面小编就为大家带来一篇inux下gettimeofday函数windows替换方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的...• 调用gettimeofday()来获取时间 mytime的用法: $ mytime.exe program1
下面小编就为大家带来一篇关于win32 gettimeofday替代方案。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
操作系统实验,压缩包中包括Linux和windows进程控制源代码及实验报告。 进程控制实验题目: 设计并实现Unix的“time”命令。...• 调用gettimeofday()来获取时间 mytime的用法: $ mytime.exe program1
SQL语句的性能监控从监控工具来说大致可分为由高级语言提供和由Oracle本身提供,高级语言以典型的应用C语言和WEB开发语言PHP为例, C语言中可以用 gettimeofday 函数来在某一数据库操作之前和之后分别获取一个时间值,...