【kernel内核时间函数】

一、 kernel中获取系统时间API:
函数实现:
kernel/time/timekeeping.c 中实现了几个常用API:

void ktime_get_ts64(struct timespec64 *ts)//CLOCK_MONOTONIC
void ktime_get_real_ts64(struct timespec64 *)//CLOCK_REALTIME
void ktime_get_boottime_ts64(struct timespec64 *)//CLOCK_BOOTTIME
void ktime_get_raw_ts64(struct timespec64 *)//CLOCK_MONOTONIC_RAW 

以上 4 个 API 实际上表明 Linux 提供了 4 种时间:

  • CLOCK_REALTIME:以 1970年1月1日… 为起点,随 time-of-day 被修改的时候而改变(例如,NTP网络时间协议)
  • CLOCK_MONOTONIC:从某个时间点开始的绝对逝去时间,不受任何系统time-of-day时钟修改的影响,在没有机器重启的情况下,若你想计算出两个事件发生的间隔时间的话,那么它将是最好的选择。但是 CLOCK_MONOTONIC 在系统 suspend 时并不会增长。
  • CLOCK_BOOTTIME:以系统启动时间为起点,在系统suspend的时候时钟依然增长。
  • CLOCK_MONOTONIC_RAW:与 CLOCK_MONOTONIC 相似,虽然 CLOCK_MONOTONIC 不受 NTP 的影响,但是随着 NTP 了解本地振荡器和上游服务器之间存在错误时,它的频率确实会发生变化,而 CLOCK_MONOTONIC_RAW 完全取决于本地振荡器。

结构体 struct timespec64 定义在 include/linux/time64.h 文件:

struct timespec64 {
        time64_t        tv_sec;     /* seconds */
        long            tv_nsec;    /* nanoseconds */
};

该文件还包含一些对struct timespec64类型结构体变量的处理API:如下
timespec64_sub 计算时间差,返回同样类型的结构体变量
timespec64_to_ns 用于将转换成ns值,返回值为u64类型

二、 测量某段代码执行时间

#include <linux/timex.h> 

struct timespec64 ts_start, ts_end;
struct timespec64 ts_delta;

ktime_get_boottime_ts64(&ts_start);
// ...要计算执行时间的函数逻辑
ktime_get_boottime_ts64(&ts_end);

// 计算时间差
ts_delta = timespec64_sub(ts_end, ts_start);

pr_notice("[DB] time consumed: %lld (ns)\n",timespec64_to_ns(&ts_delta));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值