NS_TO_JIFFIES

本文介绍了一个用于将时间从纳秒单位转换到时钟滴答数的宏定义NS_TO_JIFFIES。该宏定义适用于Linux内核中,其中HZ定义为1000,意味着每秒1000个滴答。文章通过一个具体例子解释了如何使用这个宏进行转换。
NS_TO_JIFFIES 将TIME(单位为纳秒)转换为时钟滴答数(1毫秒为一个滴答)

#define NS_TO_JIFFIES(TIME) ((TIME) / (1000 000 000 / HZ))
#define HZ                  1000

例如:
TIME = 600ms
NS_TO_JIFFIES = 600ticks
600ms = 600 000 000ns
600 000 000 / 1000 000 000 / 1000 = 600(ticks)
#include <linux/module.h> #include <linux/kernel.h> #include <linux/time.h> #include <linux/jiffies.h> #include <linux/kernel_stat.h> static struct timer_list cpu_monitor_timer; static u64 prev_idle_nsecs; static u64 prev_total_jiffies; void cpu_timer_callback(struct timer_list *t) { int cpu_usage = 0; u64 diff_idle_nsecs = kcpustat_cpu(0).cpustat[CPUTIME_IDLE] - prev_idle_nsecs; u64 diff_total_jiffies = get_jiffies_64() - prev_total_jiffies; if (diff_total_jiffies > 0) { cpu_usage = (int)(100 - (nsecs_to_jiffies64(diff_idle_nsecs) * 100 / diff_total_jiffies)); printk(KERN_INFO "CPU usage: %d%%\n", cpu_usage); } prev_idle_nsecs = kcpustat_cpu(0).cpustat[CPUTIME_IDLE]; prev_total_jiffies = get_jiffies_64(); mod_timer(&cpu_monitor_timer, jiffies + HZ); } static int __init cpu_monitor_init(void) { printk(KERN_INFO "cpu monitor init\n"); timer_setup(&cpu_monitor_timer, cpu_timer_callback, 0); prev_idle_nsecs = kcpustat_cpu(0).cpustat[CPUTIME_IDLE]; prev_total_jiffies = get_jiffies_64(); mod_timer(&cpu_monitor_timer, jiffies + HZ); return 0; } static void __exit cpu_monitor_exit(void) { printk(KERN_INFO "cpu monitor exit\n"); del_timer(&cpu_monitor_timer); } module_init(cpu_monitor_init); module_exit(cpu_monitor_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Cly"); MODULE_DESCRIPTION("CPU usage monitor");[11336.943709] cpu monitor init [11337.961938] CPU usage: 0% [11338.985803] CPU usage: 0% [11340.009704] CPU usage: 4% [11341.033620] CPU usage: 3% [11342.057503] CPU usage: 3% [11343.081404] CPU usage: 29% [11344.105298] CPU usage: 6% [11345.129221] CPU usage: 24% [11346.153139] CPU usage: -16% [11347.176990] CPU usage: 63% [11348.200915] CPU usage: 26% [11349.224816] CPU usage: 40% [11350.248713] CPU usage: 66% [11351.272609] CPU usage: 32% [11352.296456] CPU usage: -1% [11353.320373] CPU usage: 13% [11354.344264] CPU usage: 15% [11355.368156] CPU usage: -5% [11356.392071] CPU usage: 15%
最新发布
09-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值