首頁 美術繪圖 | 美術設計 | 熱門標籤 | 首選 | 首頁宣傳 | 近期作品 論壇: 發表 | 美術工作 | 美術比賽 | 展覽活動 | 美術相關 | 一般討論 | 美術同好 CG 討論 :: Photoshop | Painter | 3D 行動 | AMP

【 立即註冊 】 : 更改個人資料 : : 登入

會員名稱: 登入密碼: 保持登入

閏秒 (leap second) 對於 Windows & Linux 系統的影響

發表新主題 回覆主題 討論區 Windows, Linux, Perl, PHP, C/C++, Driver, Web 理論、應用、硬體、軟體

| 1頁, 共1
人氣點閱:16867 發表人
閏秒 (leap second) 對於 Windows & Linux 系統的影響 2015-01-12 16:26
/ / /

閏秒 (leap second) 對於 Windows Server, Windows 7 & Linux 系統的影響




「閏秒」的英文:



=> 閏秒英文 leap second (自轉造成)
=> 閏年英文 leap year (公轉造成)


閏秒的原理


=> 地球自轉並不穩定,會受月球潮汐之摩擦力及季節性等因素影響,國際上是以基態銫原子躍遷為準之「國際原子時」(International Atomic Time, TAI)為標準時間尺度。
為使一般民眾生活習慣之世界時能與國際原子時相符合,科學家將國際原子時加上閏秒,稱為世界協調時(Coordinated Universal Time, UTC),作為最終之國際時間標準和原子鐘計時的誤差等因素。
需要每隔幾年「根據實驗數據人為調整(通常是增加)」,沒有一定公式可以判斷。

通常最近幾年都是 +1 秒。

Ref: 經濟部標準檢驗局 (2012年): http://www.bsmi.gov.tw/bsmiGIP/wSite/ct?xItem=42611&ctNode=4052&mp=1



最近的閏秒調整 2012/2015



通常在 6/30 or 12/31 的 23:59:59 時調整(UTC+0000),59 秒後,下一秒是「神奇的」 60 秒,最後才是 00:00:00

2012 年是在 06/30 23:59:59 調整
2015 年是在 06/30 23:59:59 調整

對於 +8000 的台灣、香港、中國大陸,以及 +9000 日本、韓國來說


就會是 2015/07/01 早上七點五十九分、八點五十九分調整:
e.g.
(GMT+8) 07:59:59 -> 07:59:60 -> 08:00:00
(GMT+9) 08:59:59 -> 08:59:60 -> 09:00:00


閏秒造成的系統問題:舉例一「收費系統」



代碼:


# cat php_leap_second.php

假設程式是這樣寫的
這段程式 or PHP API 本身沒有處理好閏秒,
可能要想辦法用  EPOCH UNIT timestamp 避開此問題,而非使用 Wallclock string

<?PHP

$t1 = new DateTime('2012-06-30T23:59:59UTC');
$t2 = new DateTime('2012-06-30T23:59:60UTC');
$t3 = new DateTime('2012-07-01T00:00:00UTC');
$t4 = new DateTime('2012-07-01T00:00:01UTC');

print_r( $t2->diff($t1) );
print_r( $t3->diff($t1) );
print_r( $t3->diff($t2) );
print_r( $t4->diff($t2) );

?>

# php --version

PHP 5.5.9-1ubuntu4.5 (cli) (built: Oct 29 2014 11:59:10)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

# php php_leap_second.php

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 1
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 0
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 1
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 0
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 0      <---------- !!!!!!!! NO DIFF !!!!!!!!!!
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 0
    [days] => 0
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 1
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 0
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)




閏秒造成的系統問題:舉例二「Log Parser/Analytics」



你的 Log Parser/Analytics 可能沒辦法處理閏秒,因為這一天是 86401 秒
導致 report 產生、平均或標準化的計算等,發生問題。
不過這應該還好。



Linux 對於閏秒的作法




理論上 Linux kernel 3.3 以前的有這個 bug(系統有跑 NTP client),
59:60 會直接造成 kernel stall 或其他症狀
但 2012 年就應該已經修復完畢。

=> http://serverfault.com/questions/403732/anyone-else-experiencing-high-rates-of-linux-server-crashes-during-a-leap-second



如果你的 Linux 系統沒有升級,或者你有擔心的話,
可在 2015/6/30 日,把系統的 NTP client 關閉,
改成吃系統的 RTC,等到 2015/07/01 中午 12:00 之後再改回來。

或者,
選擇 NTP Server 會餵你 59:59 --> 59:59 --> 00:00 的 (e.g. 下列提到的 Google)



微軟 Windows 7, Vista, Server 2008/2003 的 Time Service的作法



=> http://support.microsoft.com/kb/909614/en-us

微軟 Windows 7/Vista/Server 2003/2008 的作法比較直接類似 workaorund ,
Client 端不管 NTP 給你的 59:60 ,就直接快一秒(或者慢一秒)給你;
也就是沒有 59:60,
直接給你 00:00(==59:60) & 00:01(==00:00) 等到下次 time sync 再校正



3. Google NTP Server 對於閏秒的作法: Leap Smear




=> http://googleblog.blogspot.tw/2011/09/time-technology-and-leaping-seconds.html

Google 的作法類似微軟也是 workaround bypass 59:60,但更為「溫和漸進一點」

Google 是透過一個公式,緩慢的把要加入的這一秒(或要扣除的這一秒)慢慢放到 NTP server 上:
@ 在 6/30 or 12/31 這一天,
透過緩慢的「塗抹 Smear + 欺騙 Lie」,把這一秒數切割成 ms 慢慢加上去(或者減掉)
最後 59:59 的時候,這一秒就加完(扣完)。

公式如下
代碼:


lie(t) = (1.0 - cos(pi * t / w)) / 2.0


leap-second-085960-jp.jpg
leap-second-085960-jp.jpg



________________

美術插畫設計案子報價系統 v0.1 Beta
爪哇禾雀
Type



繪圖畫廊設計藝廊
攝影相簿留言板
最愛收藏分類標籤
暱稱: Type
註冊: 2002-11-30
發表: 11174
來自: vovo2000.com
V幣: 901763
Re: 閏秒 (leap second) 對於 Windows & Linux 系統的影響 2016-11-30 20:46
/ / /

NTP leap seconds patched backported 2.6.32 kernel (RHEL)
kernel-backport_NTP_leap_second_patched.jpg
kernel-backport_NTP_leap_second_patched.jpg



________________

美術插畫設計案子報價系統 v0.1 Beta
爪哇禾雀
Type



繪圖畫廊設計藝廊
攝影相簿留言板
最愛收藏分類標籤
暱稱: Type
註冊: 2002-11-30
發表: 11174
來自: vovo2000.com
V幣: 901763
/ / /














資訊相關理論、技術、管理、應用、產品等
發表新主題 回覆主題