闰秒对linux的影响分析及解决

来源:互联网 发布:linux rpm怎么安装 编辑:程序博客网 时间:2024/05/16 12:42
大概了解了下闰秒及其如何让linux kernel panic:
闰秒的产生:日常所用时间UTC,是根据地球自转计时,跟精确的原子时钟存在偏差,为了保持一致,每偏差1s就进行1次同步,就产生了闰秒。即如人们所讲的,在今年6月30号出现23:59:60。
开源的NTPD在同步服务器时间时,直接调用系统调用adjtimex到达内核的ntp处理逻辑,内核的do_adjtimex经过一系列处理逻辑,判定在发生闰秒时,调用printk给出打印提示:
printk(KERN_NOTICE
"Clock: inserting leap second 23:59:60 UTC\n");
而此时是对xtime_lock加锁的,printk会尝试唤醒klogd,而调度发生时又会获取系统时间,出现死锁。

参考:http://blog.jobbole.com/22714/,http://coolshell.cn/articles/7804.html

其他影响,对时间比较敏感的业务要注意防止消息事件的乱序。


简要解决方法:在发生闰秒前停掉ntpd服务,闰秒发生后再开启ntpd

根解:放弃使用ntpd,使用简化的sntp协议,同时在实现直接调用settimeofday来完成,不会触发内核的事件调整异常

0 0