转自:https://www.cnblogs.com/kekukele/p/3662816.html

一、引言

我们在测试程序的性能的时候往往需要获得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("end time %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
end time 1397395863s,973633297 ns
duration:0s 14624ns

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

linux 用户空间获得纳秒级时间ns【转】的更多相关文章

  1. linux 用户空间获得纳秒级时间ns

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

  2. nanosleep纳秒级延迟

    //函数原型 int nanosleep(struct timespec *req, struct timespec *rem) //参数列表: // req:要求的睡眠时间 // rem:剩余的睡眠 ...

  3. linux用户空间和内核空间(内核高端内存)_转

    转自:Linux用户空间与内核空间(理解高端内存) 参考: 1. 进程内核栈.用户栈 2. 解惑-Linux内核空间 3. linux kernel学习笔记-5 内存管理   Linux 操作系统和驱 ...

  4. 新一代纳秒级高带宽仿真工具平台——HAC Express

          HAC Express是基于FPGA的模型仿真开发环境,专注于高精度建模和超高速实时仿真,弥补了传统仿真工具平台无法进行纳秒级仿真的短板.         HAC系列自推出以来,经历了从v ...

  5. 罗德与施瓦茨公司和TSN Systems公司为车载以太网提供纳秒级精度延时测量

    前言 随着毫米波雷达.激光雷达和摄像头等传感器的大量出现,并要求海量的传感器数据在几毫秒内传输完成并处理,使得网络延迟问题变得越发重要.测试和测量的专家Rohde&Schwarz(以下简称R& ...

  6. Linux用户空间与内核空间(理解高端内存)

    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...

  7. Linux用户空间与内核空间

    源:http://blog.csdn.net/f22jay/article/details/7925531 Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针 ...

  8. linux 用户空间与内核空间——高端内存详解

    摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对 ...

  9. Linux用户空间与内核空间(理解高端内存)【转】

    转自:http://www.cnblogs.com/wuchanming/p/4360277.html Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递 ...

随机推荐

  1. springboot中通用mapper结合mybatis generator的使用

    通用mapper就是指的是  tk.mybatis  包下的.这个是通用mapper就是说自动生成的dao层需要继承这个框架提供的mapper类.而我们之前用的org.mybatis这个最开始是普通的 ...

  2. linux下使用sftp【转】

    . 本文完全引用自: http://www.cnblogs.com/kaituorensheng/p/5797753.html 何为sftp sftp是Secure File Transfer Pro ...

  3. 阅读:ECMAScript 6 入门(3)

    参考 ECMAScript 6 入门 ES6新特性概览 ES6 全套教程 ECMAScript6 (原著:阮一峰) JavaScript 教程 重新介绍 JavaScript(JS 教程) 字符串的扩 ...

  4. bzoj千题计划310:bzoj5285: [Hnoi2018]寻宝游戏(思维题+哈希)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 |0 和 &1 没有影响 若填‘|’,记为0,若填‘&’,记为1 先只考虑最 ...

  5. Mac Office 2016 破解

    官方最新版本office 是2016.15.38 此版本主要是修复了Excel内存损害漏洞. 官方下载的版本大小是1.67G,因为其他途径下载的版本,不确保是最新版本且为完整的版本.不知道我说的这个大 ...

  6. Set接口HashSet实现类

    java.util.Set接口 extends Collection接口 Set特点: 1.不允许有重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for遍历 java.util.Hash ...

  7. StringBuilder类

    java.lang.StringBuilder String类代表字符串,他的底层是一个被final修饰的数组,不能改变,字符串是常量,它们的值一旦被创建之后就不能改变,但是字符串缓冲区(String ...

  8. 魔改版BBR

    魔改版bbr加速: wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSp ...

  9. vue2.0 子组件 父组件之间的传值

    常用的子组件给父组件传值/调父组件方法 //子组件let val = "";//可以是任意类型this.$emit('fatherFun', val); //父组件<fath ...

  10. IL 学习笔记

    先上几篇博客链接: 一步步教你读懂NET中IL(图文详解) C#基础之IL 详解.NET IL代码 C# IL DASM 使用 你必须知道的.NET <C# to IL>.<Expe ...