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 程式。请多多指教~ ^_*'
|