加入收藏 | 设为首页 | 会员中心 | 我要投稿 52站长网 (https://www.52zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

两种软硬件的时间的计算方法

发布时间:2022-11-16 16:10:37 所属栏目:Unix 来源:互联网
导读: 在性能领域中,时间的精确计算是非常重要的unix系统时间,最直接的就是延迟的测量。几乎所有的benchmark工具都涉及到时间的计算问题。那么如何得到精确的时间呢,Denis Bakhalov在他的著作

在性能领域中,时间的精确计算是非常重要的unix系统时间,最直接的就是延迟的测量。几乎所有的benchmark工具都涉及到时间的计算问题。那么如何得到精确的时间呢,Denis Bakhalov在他的著作"Performanceanalysis and tuning on modern CPU“中有提到分别有基于硬件和软件的2种方式。今天就来讲一下这两种时间计算的区别。

1 软件方式

软件方式叫做:System-wide high-resolution time。

这个时间也叫系统时间,是基于一个给定的起始时间(epoch),在这个起始时间上进行增加。例如在Unix系统里面,epoch就是1970年的00:00:00时开始。这也是为啥数据库系统在记录当前日期的空值或者异常值选择1970 00:00:00的原因。系统时间的增加的单位是纳秒(nano-seconds)。

系统时间适用于测量微秒(microsecond)以上的时间精度,在所有CPU上是保持一致性的,并且和CPU的频率是无关的。在OS中可以通过system call来获取系统时间。

但如果要获取更高精度的时间,那么就需要调用一些特殊的函数,以Linux为例可以调用clock_gettime函数。另外,还可以用ptherad_getcpuclockid函数来从不同的thread获取CPU的时间。

本书中也给出了一个C++的计时例子如下所示:

unix系统的缺点_unix系统时间_aix属于类unix系统

示例代码引用了chrono类,分别获取一个开始和结束时间,并计算时间差值。

2 硬件方式

硬件方式叫做:Time Stamp Counter(TSC),这种方式以硬件为基础实现的。

TSC所不同的是每个CPU拥有自己的TSC, 但也同样不用考虑CPU的频率问题,其计算是CPU所消耗的参考周期(reference cycle)的数量。TSC适用于测量纳秒或者更高精度以上的消耗时间。

这里补充说明:reference cycle(也叫external clock)并不是core的clock cycles。clock cycles的计算是根据clock frequency得出的,如下图所示两者结果的不同。

aix属于类unix系统_unix系统时间_unix系统的缺点

以下代码示例给出了编译器内置的RDTSC汇编指令以获取TSC时间。

unix系统时间_aix属于类unix系统_unix系统的缺点

3 如何选择?

选择哪种时间计算的方式取决于需要测量的精度,TSC可以给到更加精确的时间精度(比如需要精确到cycle级别),但如果应用程序的执行是以小时为基本单位,那么完全没有必要使用TSC,使用系统时间就可以了

另一个需要注意的是,系统时间通常比TSC有更高的延迟。而使用clock_gettime的方法可以比RDTSC指令慢10倍,通常需要达到20个CPU cycles。

总结:本文总结了2种时间获取和计算的方法,分别是软件和硬件的方式。了解这些方式的差异有助于在应用中实现更精确的时间测量。

(编辑:52站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!