acm-header
登录

ACM通信

实践

一秒钟的战争


《一秒战争》插图

信贷:加里尼尔

回到顶部

多亏了一个秘密的阴谋在公众的眼皮底下运作,你的死亡时间可能比预期的要晚一分钟。但别指望能活得更久,除非你恰好负责一个大型计算机网络的时间同步,在这种情况下,这种妙招每隔一年左右就会降低你的压力水平。

我们说的是废除闰秒,这是40年前加入的一个粗糙的hack,用来掩盖一个事实:与量子力学现象相比,行星制造的时钟很糟糕。

计时曾经是天文学家的工作,它带来的麻烦非常学术。对于农村人口来说,日出、正午和日落对于所有相关的目的来说都是非常精确的。

只有当船只开始在看不见陆地的地方航行时,对非天文学家来说,计时才成为一个问题。找到你的纬度很容易:测量正午太阳在地平线上的高度,看看你的年历表,就完成了。只有当你精确地知道一天的时间,才能找到你的经度,而太阳不会告诉你,除非你知道经度。

然而,如果你知道经度,太阳会非常精确地告诉你时间。利用这个时间,你可以制作其他非太阳天文事件的表格,例如,木星卫星的凌日,然后可以用这个经度来估计时间。

因此,英国的格林尼治天文台和美国的海军天文台都是由各自的海军军官资助的。大英帝国在这个问题上押了一些钱,虽然天文学家在肮脏的游戏中获胜,但观众更喜欢约翰·哈里森的天文钟,因为你不需要看到木星的卫星凌日就能知道时间。哈里森的天文钟告诉你了,你想知道就知道。4

从那以后,天文学家就失去了“时间领主”的地位。

由于横贯大陆的铁路,必要的时区使得必要的天文台数量减少到几乎为零。以前,每个体面的城市,不管有没有大学,都有专人负责计算正当时间。有了时区和电报,你就可以从海军天文台为整个美国服务。

第二个损失是每秒的长度,天文学家将其定义为“1900年回归年的1/ 31,556,925.9747”,这既不是一个非常实际的定义,也不是一个非常可复制的定义。

路易斯·埃森(Louis Essen)的原子钟赢得了这场战斗,国际单位制(SI)秒变成了铯133原子的9192,631,770个超精细辐射周期。一个新的时间刻度被创建来计算这些秒。

民用时间仍然使用不同的一秒长度,这取决于天文学家每年测量的地球自转速度。

变长秒对任何人都不起作用,甚至对天文学家也不起作用,所以在1970年决定使用SI秒,并从1972年1月1日开始进行全秒级调整。2实际上,天文学家每年向世界其他地方发送两次电报,告诉我们6月和12月的最后一分钟有多长:59秒、60秒或61秒。

具有一定讽刺意味的是,UTC (通用时间坐标(时间刻度取决于银河系不太时髦的西部某个特定岩石的旋转。我很确定,如果人类在其他岩石上定居,闰秒不会在行李里。

回到顶部

闰秒是如何成为问题的

在大型同步计算机网络出现之前,闰秒并没有困扰到任何人。许多计算机使用电网的频率来计算时间,大多数计算机的初始时间都是从某人的腕表设置的。全世界真正关心这个问题的人可能不到24人。

因此,Unix不需要考虑闰秒。在时间_ t从Unix定义,所有的分钟有60秒,所有的小时有3600秒,所有的天有86400秒。这一定义延续到了Posix和The Open Group,在那里它被认为是永远镀金的。

然后有东西在地表下的深处移动了。我们只能猜测它可能是什么,但从1998年底到2005年底,连续7年都不需要闰秒。这或多或少是互联网出现的时代,每个人都买了装有Windows的个人电脑。大多数利用Perl实现。com革命的人从未听说过闰秒。

以下是微软对闰秒的看法:“[…闰秒之后,运行Windows Time服务的NTP(网络时间协议)客户端会比实际时间快一秒。”3.

运行NTP的Unix系统将掩盖闰秒,但没有标准说明应该如何做到这一点。您的系统可能执行附图中所示的场景之一。或者它可能会做一些完全不同的事情。一些系统在闰秒之前的最后一个小时将时钟减慢1/3600,希望没有人注意到秒突然变成了277微秒。

这是理论上。实际上,这取决于系统是否注意到闰秒并按预期处理它。在这种背景下系统也是其他计算机获取时间的NTP服务器:在2008年闰秒时,超过七分之一的公共NTP池服务器都出错了。

回到顶部

“修复”闰秒的努力

到2005年初,当7年来的第一次闰秒终于开始看起来有可能出现时,一些人开始担心出现“轻千年”事件。美国军工集团内部的一些聪明人认为,“等一下,为什么我们需要闰秒?”并向ITU-R(国际电信联盟,无线电通信部门)提议,最好在2005年12月之前废除闰秒。

不错的尝试,但人们永远不应该低估联合国机构中的纸老虎。

2005年12月闰秒到来了,但世界末日并没有到来,但每个关注闰秒的人都痛苦地意识到,在闰秒不会造成麻烦之前,有大量的软件需要修复。甚至连瑞士时间参考系统的HBG时间信号都出错了。

另一次闰秒发生在2008年12月,当时情况并没有发生任何可衡量的变化,但至少瑞士人这次做对了。

从那以后,这个被内部人士称为TF.460-7的提议就成为了“7A研究组”“进一步研究”的主题,从美国科学协会到CCTF,各种秘密的科学兄弟会都有机会参与进来。很多人有,但很少有人有明确的立场。

回到顶部

闰秒的问题是什么?

问题是更多的系统关心第二层的时间。

空中交通管制系统每秒钟进行多次防碰撞测试,因为飞机每秒钟移动300米。在一个主要机场周围拥挤的空域,雷达输入数据的一秒钟停顿不是小事。

医疗产品和半导体在复杂的连续生产设施中进行时间关键的生产过程。2010年12月8日,东芝闪存芯片制造工厂发生了70毫秒的电源故障,原定于2011年1月和2月发货的产品中有20%不得不被废弃。东芝发言人山崎博子说:“一旦生产线停止,我们就无法恢复生产。”5

从技术上讲,闰秒没有我们IT专业人员不能容忍的问题。我们只需要确保所有的计算机都知道闰秒,所有的程序、操作系统和应用程序都知道如何处理闰秒。

这个问题的第一部分是我们只有六个月的时间告诉所有的计算机和软件闰秒,因为这是我们从天文学家那里得到的所有警告。实际上,我们通常会提前10个月通知;例如,我们在2月2日被告知,今年12月将不会有闰秒。1

不幸的是,这种优势被一些时间信号抵消了,例如,来自德国的DCF77信号,只提前一小时宣布闰秒。

问题的另一部分是改变时间_ t了解闰秒会带来糟糕的结果:时间突然不再是一个固定的基数量了。有多少代码找到了当前的一天d = t / 86400或者测试两个事件是否相隔超过一分钟如果(tl >= t2 + 60)?没有人知道。如果我们更改时间_ t定义呢?没有人知道。

千年虫的经验表明,要找出答案是非常昂贵的,因为相对于千年虫,这些问题比“2位数或4位数”要难得多。

我们如何判断代码是否这样做+ = 3600意思是“一小时后”还是“同一时间,下个小时”?最初的程序员没有想到会有任何不同,所以文档不会告诉我们。

回到顶部

不确定性的代价

下一次公报C告诉我们插入闰秒的时候,可能是在2012年,很多人将不得不付诸行动。任何自2008年12月以来安装的关键比特,以及任何比这更老的比特在2008年12月闰秒时未能“做正确的事情”的比特,都需要仔细考虑,并制定一个应对方案:测试、修复、希望或关闭。

不出所料,许多工厂和系统只是放弃尝试预测他们的多供应商异构系统在闰秒内会做什么,他们通过移动或安排计划的维护停机时间来覆盖闰秒来回避这个问题。对他们来说,这是最便宜的方法,以确保没有机械臂与装配线不同步,航天飞机的电脑在太空中不会打嗝。

我从通常可靠的消息来源得知,美国整个核威慑力量处于“特殊模式”,每隔一闰秒,就有一小时的时间,成本高达“两位数美元”。

回到顶部

但是闰秒到底有什么作用呢?

闰秒通过调整正午发生时太阳在参考位置的正南,以确保太阳在中午是正南的。这项非常重要的工作由国际地球自转服务局(IERS)负责。

闰秒并不是一个可行的长期解决方案,因为地球的自转不是恒定的:潮汐和内摩擦会导致地球失去动量,减慢自转速度,导致地球自转和原子时间之间的二次差。下个世纪,我们将每年需要一闰秒,通常是每年两次;2500年后我们每个月都需要一闰秒。

另一方面,如果我们不再在我们的时间刻度中插入闰秒,那么大约3000年后,时钟上的中午将变成天空中的午夜,除非我们通过调整时区来解决这个问题。


闰秒没有我们IT专业人员不能容忍的问题。我们只需要确保所有的计算机都知道闰秒,所有的程序、操作系统和应用程序都知道如何处理闰秒。


事实上,太阳在中午的时候并不是正南的,当然也不会精确到一秒钟,因为有很多人可能完全没有意识到这一点。我们的一小时时区系统意味着,只有那些恰好生活在经度可被15整除的地方的人才有机会,前提是他们的政府没有把他们放在不同的时区。例如,整个中国都是一个时区,尽管经度跨度为75120E。

在剩下的少数幸运者中,许多人在政府决定实行日光节约时间的那一段时间里运气不佳——尽管这可能会让那些在第一项标准上失败的少数人在那一段时间里运气回升。最后,由于有趣的轨道和地球物理原因,太阳恰好位于正南的情况一年只有几次。

真正关心UTC时间与地球自转同步的人是那些使用UTC时间作为地球自转估计值的人:那些把地球上的东西指向天空中的东西的人,换句话说,就是天文学家和他们的望远镜,卫星操作员和他们的天线。实际上,更准确地说应该是一些他们中的许多人早就放弃使用UTC作为地球旋转估计,因为+/-1秒的公差不足以满足他们的需求。相反,他们从IERS FTP服务器上获取公告A或B,以微秒精度给出每日值。

回到顶部

成本效益方程

在“废除闰秒”这一方的辩论中,大多数人声称一个成本效益方程,其本质是:“修复所有计算机以正确处理闰秒的成本=无穷大”,而不是“闰秒的好处=几乎为零”。QED:案例关闭。

“保护闰秒”运动(不要与“实时运动”混淆)的直言领袖对这个等式有不同的看法:“将民用时间与地球自转分离的未知后果的代价=[很多……“过去”的程序员应该免费修复他们过去的错误。QED:案例关闭。

这两种观点没有太多共同点,也没有太多数据支持这两种观点,尽管Y2K经验以及资本主义经济的原则表明,让程序员正确处理闰秒将是昂贵的。

回到顶部

一个可能的妥协?

沃纳·洛什(Warner Losh)是一个时间和计算机书呆子,我和他都有大量在关键系统中处理闰秒的实际经验,我们试图就闰秒提出一个折衷方案,这将大大降低相关成本和风险:将这些烦人的事情提前20年而不是只提前6个月安排。

如果我们提前20年知道闰秒什么时候会发生,我们就可以把它们编码到我们操作系统的表中,突然间99.9%的计算机在闰秒发生时都会做正确的事情,因为它们知道闰秒什么时候会发生。剩下的0.1%的系统,包括货架上的现成冷备用设备、南极的自动计算机和类似系统,有20年的时间更新存储表,而不是6个月。

这一建议在天文学上的反面是,地球自转和国际协调时间之间的差异可能会超过目前的一秒容忍极限,至少在地球物理学家对目前尚不了解的地球自转波动有更好的了解之前是这样。

IT的另一面是,我们仍然有一个可变的基数时间尺度:大多数分钟将是60秒,但少数会是61秒,真正关心时间间隔的代码必须做正确的事情,而不是每天增加86,400秒。

到目前为止,没有人尝试过,或者即使他们尝试了,也未能将这一想法注入ITU-R的官方标准过程中。我不清楚是否有可能引入这一想法,除非一个国家政府在国际电联全体大会上正式提出,并得到另一个国家的支持。

回到顶部

接下来会发生什么?

关于废除闰秒的TF-460-7提案将于2012年1月提交ITU-R全体投票,如果经修正后获得70%的绝对多数选票,闰秒将于大约2018年开始停止。

如果该提案未能获得70%的选票,那么闰秒将继续,我们最好开始修理电脑,使其正确处理,或者至少更可预见地处理它们。

根据我对ITU-R投票规则的理解,只有国家代表可以投票,每个国家一票。如果以我的经验为依据的话,随便询问的公民可能不会立刻发现谁代表你的国家投票以及他们打算如何投票。

回到顶部

哲学的问题

我的一个犹太朋友向我解释说,犹太人必须遵守的所有规则都是没有意义的;他们的目的是让生活变得如此艰难,以至于你从不认为这是理所当然的。基于同样的精神,Van Halen使用棕色m&m豆来测试注意力的缺乏,而我使用闰秒:如果一个系统没有记录和测试闰秒发生了什么,我也不相信它能做对任何事情。

但是Linus Torvalds观察到的“95%的程序员认为他们是前5%,其余的肯定是高于平均水平”不应该被掉以轻心:很少有程序员知道“挂钟时间”和“间隔时间”之间的区别,闰秒对他们来说是远远超出火箭科学的。(例如,Posix只定义了aPthread _ cond _ timedwait()它占用的是挂钟时间,而不是通话的间隔时间。)

当世界经济的很大一部分是由糟糕的程序员创造的,当嵌入式系统越来越有能力杀死人,我们是提高标准,要求程序员关注像闰秒这样毫无意义的细节,还是我们要删除闰秒?

作为IT行业的一名资深人士,我坚定地支持第一种选择:我们应该总是努力把事情做得更好,并把它们做对,而无意义的细节则是好的复选框。然而,作为一名经常使用由最低出价公司制造的技术奇迹的用户,第二种选择也并非没有吸引力,特别是当飞行员告诉我们,他们“必须在启动所有发动机之前把整架飞机的开关重新打开。”

作为一个时间狂人,一个认为在地下室运行原子钟是美好生活的必要条件的小而疯狂的兄弟会(如果你需要我在闰秒期间录制的400GB欧洲VLF频谱的拷贝,请告诉我……),我会错过闰秒。它们既古怪又有趣,目前每隔几年就有一个,这为用物理学和地球物理学的奇迹故事激励年轻的书呆子们提供了绝佳的机会。

但每两年一次的频率远远不足以确保IT系统正确地处理它们。

我希望我们能在明年1月把20年期限的妥协方案摆到桌面上,但如果做不到这一点,如果只在保留闰秒或废除闰秒之间做出选择,那么在糟糕的标准编写和糟糕的编程杀死某人之前,他们将不得不放弃。

ACM队列的q戳相关文章
queue.acm.org

因特网上的鲁棒定时原理
Julien Ridoux, Darryl Veitch
http://queue.acm.org/detail.cfm?id=1773943

你对网络性能一无所知
凯文·福尔,史蒂夫·麦卡恩
http://queue.acm.org/detail.cfm?id=1066069

战斗物理学:一场艰难的战斗
乔纳森·m·史密斯
http://queue.acm.org/detail.cfm?id=1530063

回到顶部

参考文献

1.国际地球自转和参考系统服务。UTC-TAI信息;http://data.iers.org/products/16/14433/orig/bulletinc-041.txt

2.国际地球自转和参考系统服务。TAI与UTC的关系http://hpiers.obspm.fr/eop-pc/earthor/utc/TAI-UTC_tab.html

3.微软。Windows Time服务如何处理闰秒(2006)。(11月1日);http://support.microsoft.com/kb/909614

4.索贝尔,D。经度。沃克公司,2005年。

5.东芝闪存生产线出现电源故障。《计算机世界》(2010年12月);http://www.computerworld.com/s/article/9200738/Power_glitch_hits_Toshiba_s_flash_memory_production_line

回到顶部

作者

Poul-Henning坎普phk@FreeBSD.org他有26年的电脑编程经验,也是bikeshed.org网站的灵感来源。他的软件在开源和商业产品中作为“底层”构建块被广泛采用。他最近的项目是Varnish HTTP加速器,用于加速大型网站,如Facebook。

回到顶部

脚注

DOI:http://doi.acm.org/10.1145/1941487.1941505

回到顶部

UT1表格闰秒中的灵敏度。

回到顶部


©2011 acm 0001-0782/11/0500 $10.00

允许为个人或课堂使用部分或全部作品制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。除ACM外,本作品的其他组件的版权必须受到尊重。允许有信用的文摘。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,都需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org传真(212)869-0481。

数字图书馆是由计算机协会出版的。版权所有©2011 ACM, Inc.


评论


匿名

曾几何时,书面语言在计算机中是由字符数组表示的。在这种模式下操作非英语用户内容是一种巨大的痛苦。今天,处理书面语言的有效软件使用UTF-8字符和Grapheme抽象。这个问题通过分离以前合并的字节、字符和字元概念得到了解决。

显然,由于一天的长度是可变的,因此对“流逝时间”和“一天的时间”使用相同的抽象是无效的。用一个值表示两个概念会导致本文中描述的问题。这些概念应该被分离,并创建一个新的抽象概念:地球位置(Earth Position, EP)。

关于一天的时间、一周的哪一天或一年的阴历月份的陈述实际上是关于地球相对于其他实体的位置的陈述:在大多数情况下是太阳,但在阴历日期的情况下有时是月亮。

考虑到“Unix时间”被广泛理解为“自1970年1月1日以来所经过的秒数”,让它只表示elapsed time并根据elapsed time定义地球位置值是很方便的。

闰秒概念应该只影响对地球位置查询(一天中的时间等)感兴趣的应用程序,在Elapsed time级别上没有任何表示。

——杰森Benterou


匿名

获得正确的闰秒是很困难的——计算闰秒通常在不频繁的代码路径上,因此这些路径不一定得到系统其他部分所具有的测试。戴夫·琼斯也在他的博客http://codemonkey.org.uk/tag/leap-second/上写过这方面的文章


匿名

有趣的文章和一些好的观点。
这里有一个关于闰秒的截然不同的网站:http://www.ucolick.org/~sla/leapsecs/


匿名

我以为你无法提前20年预测时间,比如日本地震将“时间”改变了1.8微秒。


匿名

我以为你不能提前20年预测到时间呢

减速的平均速度是非常清楚的,所以它会非常接近,但不保证像现在这样在1秒内。


匿名

第二节第5段:第二秒将延长277微秒。不是277微秒长。从技术上讲,秒实际上是277又7/9微秒。接近278微秒。确切地说,是2500/9微秒。如果最后一小时的秒只有277微秒长,那么最后一小时只会持续一秒钟。就像看了三集《英雄联盟》一样。你知道这是一个小时,但感觉就像一秒钟。或者这些系统会播放一秒钟的《吉尔莫女孩》,让我们以为一个小时已经过去了?现在我糊涂了。


匿名

对于装配线和飞机控制,我猜我们应该使用时间间隔而不是挂钟时间。对吧?

与其试图将“正午”与世界各地的正午同步,为什么不让它们慢慢分离呢?“互联网时间”是一种营销策略,但也是一个好主意。


匿名

首先,让我们精确地使用我们的术语:时间不需要预测,地球方向需要。是的,我们可以提前20年预测它,但是不确定性将会比现在的1秒公差大。/ Poul-Henning


匿名

也许闰秒的问题之一是它们发生的频率太低,以至于开发人员从来没有被强迫去考虑它们。

另一个建议是:每天晚上实现一闰秒。

通常情况下,这些数据会在59秒和61秒之间来回反弹,偶尔(每年两次)出现分歧。每晚闰秒可以确保出错的软件被发现得更早,并且仍然可以确保时间与“正确”值的距离不超过两秒。


匿名

作为一名程序员,我喜欢上面提到的每天/晚上交替闰秒的建议。如果一个“事件”每年只发生一次或两次,那么调试代码就是一件很痛苦的事情。但我可以等24小时。

说真的,我们为什么要在电脑上使用儒略历呢?60秒到一分钟是从哪里来的?一天24小时太…随意了。它不是2的幂,这使得在计算机上为它编写代码成为一个巨大的、不必要的痛苦。我们真的需要在宇宙空间坐标系中重新思考时间,就像《星际迷航》所做的那样。我们现在就应该这样做,这样当我们离开这个星球去其他世界的时候,在银河系的其他人看来,我们就不会像白痴一样了。


查看更多评论

Baidu
map