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<stdio.h>
#include<stdlib.h>
#include<time.h>
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左右。

(0)

相关推荐

  • Linux下使用函数获取用户空间ns级时间

    在进行Linux系统操作的时候,因为测试程序性能的需要,必须将获得的时间精确到ns级,那么具体要如何实现呢?下面小编就教你如何使用函数实现Linux用户空间ns级时间的获取,一起来学习下吧。 一、引言 ...

  • FreeBSD中使用QUOTA(磁盘配额)来限制用户空间

    虚拟主机中经常要限制用户空间的大小和文件的数量。这些限制在linux和FreeBSD中都是用QUOTA来实现的。这里我说下在FreeBSD下实现的方法; 开启QUOTA支持 首先需要修改内核加入对qu ...

  • Linux交换空间的管理与技巧详解

    本文详细介绍了Linux交换空间的管理与技巧,有助于读者深入了解Linux交换空间的原理与使用,具体详情如下: 一、UNIX如何使用交换空间 所有 UNIX 操作系统都支持某种虚拟内存 (VM) 系统 ...

  • Linux用户进程是如何释放内存的

    Linux用户进程是如何释放内存的 Linux进程使用内存的基本流程: 从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是g ...

  • 修改linux用户密码

    对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: R ...

  • LINUX 用户信息如何复制

    LINUX 用户复制基本上把这几个文件迁移过去就可以: 1. /etc/passwd 2. /etc/shadow 3. /etc/group 4. /etc/samba/smbpasswd 然后把/ ...

  • Adobe Reader因不再吸引Linux用户决定退出Linux系统

    Adobe Reader已经不再吸引Linux用户,因此Adobe决定,将Linux从Reader的支持系统列表中删除。 这不是Adobe的首款产品放弃对Linux的支持,之前,Adobe Air就放 ...

  • 如何查看Linux磁盘空间大小

    操作方法 01 如何查看Linux磁盘空间大小 一.df命令: df是来自于coreutils软件包,系统安装时,就自带的:我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置: 举例: [ ...

  • linux用户管理和组管理使用详解(图解linux创建用户和组)

    linux下有三类用户: 1、超级用户 :root 具有操作系通的一切权限 uid 0 2、普通用户:普通用户具有操作系统有限的权限 uid 500-6000 3、伪用户 :是为了方便系统管理,满足相 ...