linux毫秒级时间戳,linux – EXT4上的时间戳精度(亚毫秒)

我在Vala中编写了一些代码,我首先得到系统时间,然后创建一个文件,然后检索该文件的时间戳.时间戳总是早于系统时间,大约在500到1500微秒之间,这是没有意义的.

然后我写了一个简单的shell脚本:

while true; do

touch ~/tmp/fred.txt

stat ~/tmp/fred.txt|grep ^C

done

具有以下结果:

Change: 2013-01-18 16:02:44.290787250 +1100

Change: 2013-01-18 16:02:44.293787250 +1100

Change: 2013-01-18 16:02:44.296787250 +1100

Change: 2013-01-18 16:02:44.298787248 +1100

Change: 2013-01-18 16:02:44.301787248 +1100

Change: 2013-01-18 16:02:44.304787248 +1100

Change: 2013-01-18 16:02:44.306787248 +1100

Change: 2013-01-18 16:02:44.309787248 +1100

Change: 2013-01-18 16:02:44.312787248 +1100

Change: 2013-01-18 16:02:44.315787248 +1100

正如您所看到的那样,小数点后的前3位数(毫秒)似乎正常,因为它们按预期递增,但第4位及以上的数字看起来并不正确.第4到第9位数似乎是慢慢倒数.有没有任何理由,因为我虽然ext4支持高达纳秒级的精度.访问和修改时间戳的行为方式相同.

@H_404_12@

如果inode足够大以支持扩展时间信息(256字节或更大),则ext4文件系统确实支持存储时间的纳秒分辨率.在您的情况下,由于分辨率大于第二,这不是问题.

在内部,ext4文件系统代码调用current_fs_time(),这是当前缓存的内核时间,截断到文件系统超级块中指定的时间粒度,ext4为1ns.

Linux内核中的当前时间被缓存,并且通常仅在定时器中断时更新.因此,如果您的定时器中断以10毫秒运行,则缓存时间将仅每10毫秒更新一次.发生更新时,结果时间的准确性取决于硬件上可用的时钟源.

试试这个,看看你是否也得到了与你的stat调用类似的结果:

while true; do date --rfc-3339=ns; done

在我的机器上(amd64,intel virtualBox),没有量化.

例如

2013-01-18 17:04:21.097211836+11:00

2013-01-18 17:04:21.098354731+11:00

2013-01-18 17:04:21.099282128+11:00

2013-01-18 17:04:21.100276327+11:00

2013-01-18 17:04:21.101348507+11:00

2013-01-18 17:04:21.102516837+11:00

更新:

使用日期的上述检查并未真正显示此情况.这是因为date将调用gettimeofday系统调用,该调用将始终根据缓存的内核时间返回可用的最准确时间,并根据cpu周期时间(如果可用)调整以提供纳秒分辨率.但是,存储在文件系统中的时间戳仅基于缓存的内核时间.即在最后一次计时器中断时计算的时间.

@H_404_12@

@H_404_12@

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值