我试图通过一个linux内核模块以非常高的精度测量linux内核中的一些代码所花费的时间。

为此,我尝试了rdtscl(),它给出了代码中使用的时钟节拍数,如下所示:unsigned long ini, end;

rdtscl(ini);

//some code...

rdtscl(end);

printk("time taken=%lu ticks",end-ini);

正如我提到的http://en.wikipedia.org/wiki/Time_Stamp_Counter表示tsc是自奔腾以来所有x86处理器上都存在的64位寄存器。所以,如果我有双核处理器,这个计数器会出现在两个内核中,还是只有一个,因为它只有一个处理器,但双核?

第二个问题是:我有英特尔至强i3处理器,它有4个处理器,每个处理器有2个内核。然后,测量时钟节拍,会给出单处理器的节拍还是全部4个处理器的节拍相加?

最佳答案:

如果你没有时钟信号,那么你的代码就有严重的问题。你是自己写的还是从不好的地方复制的?]

顺便说一句,现代英特尔(和AMD)处理器很可能有“恒定TSC”,所以一个暂停、休眠、运行较慢等的处理器仍将以与其他处理器相同的速度运行——它可能仍不同步,但这是另一回事。

尝试只运行一个从计数器中打印值的循环—只是RDTSC指令本身应该需要大约30-50个时钟周期,所以您应该看到它在移动。

编辑:这是我的RDTSC函数:void rdtscl(unsigned long long *ll)

{

unsigned int lo, hi;

__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));

*ll = ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );

}

作为返回值的函数:

unsigned long long rdtscl(void)

{

unsigned int lo, hi;

__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));

return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );

}

我注意到您的代码没有传递无符号long的指针,这使我怀疑您实际上并没有将时间戳计数器传递回调用者,而是只保留它碰巧具有的任何值—这两个值很可能相同。

linux 时间戳计数器,使用TSC(时间戳计数器)进行时间计算相关推荐

  1. linux cfs时间,Linux调度的实现(CFS)——虚拟时间计算

    公平调度(CFS)基本概念与性质 公平调度:每个进程能获得1/n的处理器时间,n指可运行的进程的数量: (允许每个进程运行一段时间,循环轮转,选择运行最少的进程作为下一个运行进程.) 每个进程都按照它 ...

  2. linux 时间戳计数器,使用TSC(时间戳计数器)计算时间

    如果没有时钟滴答,那么你的代码就会出现严重问题.您是否编写了自己的rdtscl [或从某个不是很好的来源复制它?] 顺便说一句,现代英特尔(和AMD)处理器可能具有"恒定的TSC" ...

  3. 【Linux 内核 内存管理】Linux 内核堆内存管理 ③ ( CPU 计数器瓶颈 | per-CPU 计数器 | Linux 内核 percpu_counter 结构体源码 )

    文章目录 一.CPU 计数器瓶颈 二.per-CPU 计数器及 percpu_counter 结构体源码 一.CPU 计数器瓶颈 如果 操作系统 中有 多个 CPU , 假设只有一个 CPU 计数器工 ...

  4. linux执行命令带时间戳,Linux查看History记录加时间戳的小技巧

    Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...

  5. linux shell取得秒级时间戳

    什么是时间戳 在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数.这个整数就是时间戳.在我们写脚本的时候经常使用到一些时间统计的工作, ...

  6. hive linux时间戳转换,Hive 中 时间戳,字符串转换

    13位时间戳装换为日期格式的字符串 select from_unixtime( cast(1597651229344/1000 as int),'yyyy-MM-dd HH:mm:ss') 时间字符串 ...

  7. linux输入命令怎么显示时间戳,linux时间戳查看:stat命令

    1.关于时间戳 每一个文件都有三种时间(称为时间戳timestamps),对这三种时间,很多时候容易混淆不清,因此这里要说明下: Access time(atime):是指取用文件的时间,所谓取用,常 ...

  8. php mysql日期戳转时间戳_php日期转时间戳,指定日期转换成时间戳

    写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但 是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么 ...

  9. java filter加时间戳_java filter加时间戳

    java filter加时间戳 [2021-01-31 18:31:52]  简介: java时间戳转php时间戳的方法:首先将java时间戳转成字符串,代码为[$utStr = $javaUt . ...

  10. mysql获取时间戳_mysql 获取当前时间戳

    mysql 获取当前时间为select now() 运行结果: 2012-09-05 17:24:15 mysql 获取当前时间戳为select unix_timestamp(now()) 运行结果: ...

最新文章

  1. Linux -- ***检测系统(IDS)介绍及应用(1)
  2. 不同页面之间实现参数传递的几种方式
  3. 现代软件工程讲义 9 测试 QA 的角色和分工
  4. Gensee SDK RoleType详解
  5. 重新标注 ImageNet:多标签,全面提升模型性能
  6. Android OpenGL ES 应用(二) 纹理
  7. python ggplot为什么不能取代matplotlib_为什么geom_bar()不会像python ggplot中那样更改填充颜色?...
  8. 解决Android SDK Manager更新、下载速度慢
  9. LayaAir UI 组件 # HSlider,VSlider(水平/垂直滑动条)
  10. KDD18 DIN Deep Interest Network for Click-Through Rate Prediction
  11. TextMesh Pro不能显示中文的解决办法是创建字贴图,常用汉字3500+特殊字符
  12. matlab 函数pdf怎么用_怎么将Word转换成PDF?Word转PDF就得用这个工具
  13. 算法学习:LeetCode-592. 分数加减运算
  14. pdf如何转化成word文档?
  15. canvas实现5张图片合成一张图片
  16. 【果壳笔记】生物信息学——王秀杰老师部分
  17. mac蓝牙键盘工具分享——通过mac键盘给iPhone、iPad打字
  18. 【0基础入门Pytorch】Pytorch的简介与安装(Windows)
  19. git获取ssh密钥
  20. CVPR2019 Oral论文《Side Window Filtering》解读及算法 Python 实现

热门文章

  1. wine 的使用方法
  2. eclipse.exe 已停止工作
  3. 互联网热门词汇:媒体以及大牛们口中常说的各种X2X指的是什么
  4. 51单片机LCD1602液晶屏显示字符,字符串,(有)无符号整数,十六进制数,二进制数等
  5. 计算机基础知识理论试题
  6. 彗星撞地球 - 怀念下Warez组织的经典力作(15G动画压缩成64Kb的那个)
  7. 移动CRM风起云涌 千亿级市场显现
  8. 初学者必读 ASP运行环境的搭建
  9. ONVIF PTZ控制海康云台相机
  10. Apollo开源软件ROS定制版差异化分析