小知识:linux用户空间获得ns纳秒级时间示例

一、引言

我们在测试程序的性能的时候往往需要获得ns级的精确时间去衡量一个程序的性能,下面介绍下linux用户空间获得ns级时间的方法

二、用户空间获得ns级时间

使用clock_gettime函数,函数原型如下:

long sys_clock_gettime (clockid_t which_clock, struct timespec *tp);

1.which_clock参数解释

CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变

CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响

CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间

CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间

2.struct timespec结构

复制代码

代码如下:

struct timespec

{

time_t tv_sec;

long int tv_nsec;

};

使用范例代码如下:

复制代码

代码如下:

#include

#include

#include

int main(void)

{

struct timespec time_start={0, 0},time_end={0, 0};

clock_gettime(CLOCK_REALTIME, &time_start);

printf(“start time %llus,%llu ns\n”, time_start.tv_sec, time_start.tv_nsec);

clock_gettime(CLOCK_REALTIME, &time_end);

printf(“endtime %llus,%llu ns\n”, time_end.tv_sec, time_end.tv_nsec);

printf(“duration:%llus %lluns\n”, time_end.tv_sec-time_start.tv_sec, time_end.tv_nsec-time_start.tv_nsec);

return 0;

}

编译命令:

复制代码

代码如下:

gcc test.c -o test -lrt

运行结果:

复制代码

代码如下:

./test

start time 1397395863s,973618673 ns

endtime 1397395863s,973633297 ns

duration:0s 14624ns

从运行结果可以看出 调用printf()函数一次需要15us左右。

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:linux配置java环境变量详细步骤

2023-6-10 4:44:52

建站知识

小知识:linux系统下openmp多线程编程示例

2023-6-10 5:01:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索