王文韜
摘 要 每臺計算機(jī)都有自己的硬件時鐘,并由主板上的電池保證在關(guān)機(jī)情況下也能計時。通常情況下,計算機(jī)每次開機(jī)會從硬件時鐘讀取時間,并且使用自己的時鐘進(jìn)行計時,但是在單個時鐘之間不可避免的會有計時誤差,在長時間使用后,時間誤差會積累到比較大的數(shù)值。這在一般應(yīng)用中不會造成太大的麻煩,但是在某些應(yīng)用中,比如集群服務(wù)、數(shù)據(jù)庫等,則會發(fā)生宕機(jī)、系統(tǒng)無法啟動等嚴(yán)重后果,所以就必須要配置時間服務(wù)器為網(wǎng)絡(luò)提供時間服務(wù),保證整個網(wǎng)絡(luò)中的時間在所有計算機(jī)中都是一致的。
關(guān)鍵詞 計算機(jī);時鐘同步;配置
中圖分類號 TP3 文獻(xiàn)標(biāo)識碼 A 文章編號 1674-6708(2018)214-0133-02
1 Windows下的時間同步
Windows系統(tǒng)下的時間同步由windows time服務(wù)完成,使用SNTP協(xié)議進(jìn)行通信,可以達(dá)到秒級的時間同步精度,能夠滿足對時間精度要求不太高的情況下的需求。SNTP協(xié)議采用客戶端/服務(wù)器工作方式,服務(wù)器接收GPS信號或使用自帶的原子鐘作為系統(tǒng)的時間基準(zhǔn),客戶機(jī)按照預(yù)先設(shè)定的時間間隔定期訪問服務(wù)器,獲得準(zhǔn)確的時間信息,并調(diào)整自己的系統(tǒng)時鐘,來同步自己的時間。一臺服務(wù)器同時也可以是客戶端,從上層的時間服務(wù)器獲得高精度時間,并向自己的客戶端進(jìn)行授時。
windows中的客戶端,平時使用自己的硬件時鐘計時,在訪問服務(wù)器獲得準(zhǔn)確時間后,如果時間偏移較大,會直接調(diào)整系統(tǒng)時間,所以系統(tǒng)時間在同步時會發(fā)生跳變。如果時間偏移較小,會逐漸調(diào)整自己的時鐘,直到與時間源同步,不會發(fā)生大幅度的時間跳變。
Windows時間同步配置可以通過修改注冊表來進(jìn)行,配置服務(wù)器的相關(guān)注冊表項如下。
2 Windows時間服務(wù)器配置
1)H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\Services\W32Time\Config
\AnnounceFlags,將鍵值改為a(十六進(jìn)制)。
該鍵值的參數(shù)含義如下:
0 不作為時間服務(wù)器;
1 始終為時間服務(wù)器;
2 自動為時間服務(wù)器,代表由Windows時間服務(wù)來決定角色;
4 始終為可靠時間服務(wù)器;
8 自動為可靠時間服務(wù)器,代表由Windows時間服務(wù)來決定角色。
鍵值a表示同時選擇了2和8,也是系統(tǒng)的默認(rèn)設(shè)置。
在這個鍵值設(shè)置為a時,如果時間服務(wù)器配置了自己的時間源服務(wù)器,但是又無法從時間源服務(wù)器同步時間,會認(rèn)為自己的時間不可靠而有可能停止授時,所以最好將配置改為5,強(qiáng)制在自己失去時間源的時候仍然進(jìn)行授時服務(wù)
2)H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\services\W32Time\ TimeProviders\NtpServer
將Enabled鍵值改為1,允許服務(wù)器進(jìn)行授時服務(wù)。重啟windows time 服務(wù)后便可開始對客戶端授時。
3 Windows時間服務(wù)客戶端配置
Windows時間同步客戶端在域環(huán)境下,默認(rèn)從域控制器同步時間,同步的“type”配置為“NT5DS”。獨立客戶端,可以打開系統(tǒng)的“日期和時間”,其中有一個“Internet時間”頁簽,更改里面的服務(wù)器地址為自己的授時服務(wù)器地址即可。如果需要設(shè)置的機(jī)器太多,可以將下面的內(nèi)容編輯到注冊表文件中,然后導(dǎo)入注冊表進(jìn)行設(shè)置。
Windows Registry Editor Version 5.00
[ H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\services\W32Time\ Parameters]
"Type"="NTP"
"NtpServer"="time.windows.com,0x9"
Type設(shè)置為NT5DS時,"NtpServer"設(shè)置不起作用。
將上面的time.windows.com替換為自己的授時服務(wù)器ip地址或機(jī)器名即可。該設(shè)置在時間服務(wù)器名稱后必須指定0x9或其它參數(shù),否則本設(shè)置無效。默認(rèn)0x9=SpecialInterval+Client
可選的參數(shù):
0x01 SpecialInterval以SpecialInterval中指定的時間間隔同步時間,不使用MaxPollInterval和MinPollInterval中的配置。0x02 UseAsFallbackOnly 僅作為備用時間源
0x04 SymmatricActive 使用動態(tài)輪詢模式0x08 Client 客戶端模式。
4 Windows緩慢校時
如果滿足一定條件,windows將會采取緩慢校時的策略同步時間,下面是相關(guān)的設(shè)置。
進(jìn)行緩慢校時,需要滿足兩個公式。
1)| C u r r e n t T i m e O f f s e t | < MaxAllowedPhaseOffset
CurrentTimeOffset是本機(jī)和時間源的時差,單位是時鐘周期。在windows中,1ms=10000時鐘周期。MaxAllowedPhaseOffset缺省設(shè)置為300秒。
假設(shè)本機(jī)時間和時間源相差3分鐘。
CurrentTimeOffset=3×60×1000×10000 =1800000000
MaxAllowedPhaseOffset=300×1000×10000 =3000000000
滿足| C u r r e n t T i m e O f f s e t | < MaxAllowedPhaseOffset的條件
2)|CurrentTimeOffset| / (PhaseCorrectRa te*UpdateInterval) < SystemClockRate / 2
SystemClockRate是系統(tǒng)的時鐘周期,可以使用w32tm命令查看本機(jī)的ClockRate,然后算出時鐘周期。
C:\>w32tm /query /status /verbose
ClockRate: 0.0155995s
SystemClockRate=0.0155995×1000×10000 =155995
PhaseCorrectRate默認(rèn)為1
UpdateInterval域成員默認(rèn)為30000帶入公式計算:
1800000000/(1×30000)=60000
155995/2=77998
60000<77998,所以系統(tǒng)會緩慢校時。
4.1 下面是對緩慢校時過程的跟蹤
數(shù)據(jù)分為三列,第一列是本機(jī)的當(dāng)前時間,第二列是本機(jī)時間和時間源之間的誤差,第三列是第二列中相鄰兩次誤差之間的差值,反應(yīng)了本地時鐘和時間源時鐘之間的走時誤差。
10:12:13修改了本地時間,使之和時間源有了222秒的誤差,可以看到現(xiàn)在并未校時。
4.2 Windows和linux之間的時間同步
Windows和linux之間,由于windows使用的windows time服務(wù)采用了SNTP協(xié)議,所以windows可以將linux作為時間源同步時間,卻不能向linux系統(tǒng)授時,如果需要為liunx系統(tǒng)授時,就要通過第三方軟件,比如ntp-4.2.8p10-win32。
軟件安裝后在“C:\Program Files (x86)\ NTP\etc”路徑下會有ntp.conf配置文件,配置完成后重啟服務(wù)即可。如果想要查看NTP同步狀態(tài),需要再安裝ntp-time-server-monitor,之后就可以在軟件中完成查看NTP同步狀態(tài)、調(diào)整配置文件、重啟NTP服務(wù)等工作。
在安裝ntp-4.2.8p10-win32軟件時,安裝軟件會在本地用戶中增加“NTP”用戶,并在系統(tǒng)中安裝“Network Time Protocol Daemon”服務(wù)。windows自己的windows time服務(wù)會被禁用。配置完成后重啟NTP服務(wù),就可以開始向linux系統(tǒng)授時了。
參考文獻(xiàn)
[1]劉曙琴,陳珍萍,黃友銳,等.無線傳感器網(wǎng)絡(luò)中帶延時的一致性時間同步[J].傳感器與微系統(tǒng),2017(1):64-66,74.