83 lines
4.6 KiB
Plaintext
83 lines
4.6 KiB
Plaintext
vsntp 讀我說明
|
||
|
||
請參閱 INSTALL 檔案,以取得安裝執行的相關說明。
|
||
|
||
想知道 vsntp 的最新消息,下載最新版本,請參閱:
|
||
|
||
http://vsntp.sourceforge.net/
|
||
http://sourceforge.net/projects/vsntp
|
||
http://www.imacat.idv.tw/tech/vsntp.html
|
||
ftp://ftp.imacat.idv.tw/pub/vsntp/
|
||
|
||
作者的 PGP Public Key 可在下列網址下載:
|
||
|
||
http://www.imacat.idv.tw/me/pgpkey.txt
|
||
|
||
簡介:
|
||
|
||
vsntp 是 SNTP 客戶端服務程式,專為時間不正常的系統設計。 vsntp
|
||
的意思是 SNTP for Virtual PC ,原先是我為了在 Connectix Virtual PC
|
||
上跑 GNU/Linux 系統而寫。 vsntp 依 RFC 1769 SNTP 標準,連線到 SNTP 伺
|
||
服器上的 UDP 埠 123 以校時。
|
||
|
||
若沒有裝 Virtual PC Additions , Virtual PC 的時間很亂。 Virtual
|
||
PC 的 RTC ( Real Time Clock, 或稱 CMOS 時鐘、硬體時鐘)是用軟體模擬
|
||
出來的,往往根本沒有在跑。 GNU/Linux 核心勉強維持一個大概的時間。正常
|
||
情況下,平均一分鐘會快四秒,一天快一個半小時。這實在是太誇張了,用眼
|
||
睛都分辨得出時鐘速度有問題。
|
||
|
||
David L. Mills 的 ntp 校時伺服器在此完全失靈。 ntp 先測出系統時間
|
||
速度偏移,用 adjtimex() 來調整系統時鐘速度,用這個方法漸近式調整,系
|
||
統本身和相關應用程式比較不會出問題。這個方法有一個前提:時間速度本身
|
||
恆定不變。可是 Virtual PC 不講這一套。 Virtual PC 的時間純粹是軟體模
|
||
擬出來的,受主電腦負荷與其它因素影響,時快時慢。沒有固定的時間速度,
|
||
也就沒有時間速度偏移值。怎麼測都是枉然。
|
||
|
||
David L. Mills 的 ntp 程式裏,附了一 sntp 客戶端程式,可以放在
|
||
crontab 裏定期對時,對時完結束程式。問題是, crontab 最小單位為分,
|
||
頂多一分鐘跑一次,可是 Virtual PC 的時間一分鐘慢四秒。一分鐘退回四秒
|
||
,大多數應用程式都受不了。一分鐘跑一次,對系統的負荷也很大。
|
||
|
||
vsntp 是為此而寫的。它以 daemon 來執行,以免每次對時都對系統造成
|
||
嚴重負荷。它用 settimeofday() 來調整時間,校時頻率可任意設定,儘可能
|
||
把系統時鐘誤差,維持在一秒以內。
|
||
|
||
vsntp 的做法有下列缺陷:頻繁校時時,網路流量很大,頻寬的負荷不小
|
||
,對對方 NTP 伺服器也會造成很大的負擔。妳最好自己在區網內,架一台自
|
||
己的 NTP 伺服器。同時因 settimeofday() 強制時間設定太頻繁了,系統的
|
||
高精度計時功能會出問題。
|
||
|
||
vsntp 用 sleep() 呼叫來定時校時。在某些系統上 sleep() 可能不大正
|
||
常。若 vsntp 校時一段時間後就不動了,系統上的 sleep() 呼叫不正常時,
|
||
可以改用 -a 選項換成 alarm() 計時器試看看。
|
||
|
||
若碰到任何問題,請參閱妳系統的上的 syslog 記錄。 vsntp 把詳細偵錯
|
||
訊息,都以 LOG_DEBUG 層次, LOG_DAEMON 類別記錄到 syslog 中。妳可以在
|
||
/etc/syslog.conf 中加上這一行,寫入偵錯訊息:
|
||
|
||
daemon.debug /var/log/debug
|
||
|
||
並查閱 /var/log/debug 中的偵錯訊息。記得在偵錯結束後關閉。偵錯訊息流
|
||
量很大,很快就會塞爆硬碟。就算沒塞爆,大量資料寫入硬碟,對系統效能的
|
||
影響也很大。
|
||
|
||
vsntp 原是為 GNU/Linux 系統上執行而寫。 vsntp 用的都是 POSIX 相
|
||
容的系統呼叫,在 POSIX 相容系統上應該都可以執行。不過目前為止我只有
|
||
Cygwin ,只在 Cygwin 上測試過。 Cygwin 上可以執行。若妳可以成功在其它
|
||
系統上執行,請來信告知。若需要任何原始程式的修正,亦請一併附給我。我
|
||
知道因為 PID 檔路徑處理方式,所以無法在 MSWin32 上執行。
|
||
|
||
vsntp 只在 GNU/Linux 系統上測試執行過。 vsntp 用的都是 POSIX 相容
|
||
的系統呼叫,在 POSIX 相容系統上應該都可以執行。不過我沒有其它系統,無
|
||
從測試起。若妳可以成功在其它系統上執行,請來信告知。若需要任何原始程式
|
||
的修正,亦請一併附給我。我知道因為 PID 檔路徑處理方式,所以無法在
|
||
MSWin32 上執行。但在 Cygwin 上說不定可以執行。
|
||
|
||
若妳可以在其它虛擬機器上執行 vsntp ,例如 VMWare ,請來信告知。
|
||
|
||
基本上,若妳在用 vsntp ,請一定要來信告訴我。我很想知道 vsntp 是
|
||
不是真的有人在用,對世界和平有幫助 *^_^* 或只是自己寫好玩的而已。 :p
|
||
|
||
vsntp 是我寫的第一個 daemon ,我寫的第一個 socket 程式,也是我第
|
||
一個公開發行的 C 程式。請多多指教~ ^_*'
|