-
Notifications
You must be signed in to change notification settings - Fork 4
/
README.ru
192 lines (135 loc) · 6.97 KB
/
README.ru
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
ADJTIMEX
Я буду считать, что вы уже прочитали страничку man по adjtimex :-)
ВВЕДЕНИЕ
Возможно, вы уже знаете, что в вашем компьютере имеются двое часов -
"часы реального времени" (RTC - Real Time Clock), которые идут все время,
и системные часы, которые идут только при включенном компьютере. Точность
выше у системных часов (примерно 1 uсек), но у RTC, возможно, лучше
стабильность на длительном промежутке (long-term stability). adjtimex
предназначен для приблизительной коррекции ухода системных часов.
RTC являются удобными опорными часами
adjtimex --compare
показывает время, разницу между двумя часами, первое различие (как сильно
спешат или отстают системные часы по сравнению с последней сверкой с RTC),
и два временных параметра ядра: tick и сдвиг частоты. После первых двух
сравнений он также выводит рекомендуемые значения тиков и сдвига частоты,
которые подрегулируют системные часы с приблизительным значением RTC.
Конечно, RTC могут имеют собственную систематическую ошибку. clock(8) или
hwclock(8) используют файл /etc/adjtime для записи коэффициента ухода
(drift rate) и времени после последней установки RTC. adjtimex также
сверяется с этим файлом и использует коррекцию ко времени RTC.
Кроме того, adjtimex может записывать время обоих часов и дополнительное
опорное (reference) время, в лог. Затем это сравнивается с записанным
временем и рассчитываются величины ухода (drift rates).
УСТАНОВКА
Для конфигурирования наберите "./configure", для компиляции - "make",
затем "make install" для копирования бинарника в /usr/local/bin, а
страницы man в /usr/local/man/man8. Если вы хотите установить программу
в /usr вместо /usr/local, начните с "./configure --prefix=/usr".
КРОМЕ ТОГО
Для выполнения большинства нижеследующих действий вы должны войти как root.
Стандартное ядро не будет трогать RTC, пока не будет устанавливаться один
из временных параметров (например, с помощью adjtimex). Затем, предполагая,
что ntpd регулирует системное время, запускает "коррекцию" RTC примерно
каждые одиннадцать минут. adjtimex предотвращает это установкой времени
после изменения любого параметра. В действительности время не изменится.
ИСПОЛЬЗОВАНИЕ
Создайте /etc/adjtime, который используется clock(8) и hwclock(8) для
коррекции систематической ошибки в RTC. Установите его, как описано в
странице man, для каждой программы. clock включается (вместе с множеством
других полезных утилит) в коллекцию Рика Фэйта (Rik Faith):
sunsite.unc.edu:pub/Linux/system/Misc/util-linux-1.10.tar.gz Если ваш RTC
уже достаточно точен для вас, просто создайте файл /etc/adjtime, содержащий
только одну первую строчку: '0.0 0 0.0'.
Сначала я объясню ручную процедуру.
Скомпилируйте и запустите adjtimex с ключом --compare.
Ожидаемые результаты примерно такие:
# adjtimex --compare
794625929 -0.597638 -0.597638 ...
794625939 -0.602050 -0.004412 ...
^^^^^^^^^
Это число сообщает, что системные часы отстают более чем на 4 миллисекунды
за 10 секунд по сравнению с RTC, или 4 части на 10000. Следовательно,
мы увеличиваем параметр tick до 10004 и повторяем сравнение:
# adjtimex --tick 10004
# adjtimex --compare
794626037 -0.644860 -0.644860 ...
794626047 -0.645259 -0.000399 ...
Теперь системные часы отстают примерно на 39.9 частей на миллион. Для
коррекции этого мы можем изменить сдвиг частоты (frequency offset).
Вспомните, что сдвиг частоты - это в частях на миллион, с точкой деления
в центре (по 16 бит с каждой стороны). Следовательно, мы устанавливаем
сдвиг в 39.9*65536 = 2614886:
# adjtimex --frequency 2614886
# adjtimex --compare
794626313 -0.652147 -0.652147 ...
794626323 -0.652247 -0.000100 ...
Видно, что есть еще разница около 10 ppm, поэтому мы увеличим сдвиг на
10*65536, до 3270246:
# adjtimex --frequency 3270246
# adjtimex --compare
794627233 -0.795221 -0.795221 ...
794627243 -0.795231 -0.000009 ...
Таким же образом высчитываются значения в колонке "suggested" ("Рекомедновано").
Применение ключа --adjust автоматизирует процесс - периодически устанавливая
"рекомендуемые" значения.
Кстати, использование опций --offset или --singleshot кажется имеют
длительное действие на часы. Я рекомендую вам определить значения tick и
частоты до применения других опций.
У вас уже может быть запись, подобная этой, в /etc/rc.d/rc.S, /etc/init.d/boot
или одном из других стартовых файлов:
# Adjust CMOS clock based on /etc/adjtime, then set system clock.
# Add -u switch if your system keeps GMT.
if [ -x /sbin/clock ]; then
/sbin/clock -a
fi
Просто добавьте запись типа этой:
# Regulate the sytem clock
if [ -x /sbin/adjtimex ]; then
/sbin/adjtimex --tick 10004 --frequency 3270246
fi
ПРОДОЛЖИТЕЛЬНЫЕ СРАВНЕНИЯ
adjtimex можно использовать для записи значений времени CMOS и системы,
и дополнительного опорного (reference) времени, чтобы можно было определить
коэффициент ухода за длительные периоды. Для ручного ввода опорного
времени используйте
# adjtimex --log --watch
adjtimex попросит вас нажать клавишу, когда вы знаете время, затем
спросит время и приблизительную точность. Затем спросит был ли сбой каких
либо часов с момента последней записи в логе. Время вы можете взять с
точных часов, радиомаяка времени типа WWV или CHU и т.д.
Если у вас установлен ntpdate (часть пакета xntp) и компьютер подключен
к сети, используйте
# adjtimex --log --host www.xxx.yyy.zzz
и adjtimex будет использовать ntpdate для запроса времени с указанного
хоста. (Уточните у своего провайдера, имеет ли он сервер времени NTP,
или какой он может предложить.)
После того, как вы сделаете несколько записей в log, вы можете заставить
adjtimex просмотреть лог с помощью
# adjtimex --review
Он возьмет каждую пару записей лога в цикле и вычислит для них коэффициент
ошибки в частях на миллион (ppm) с заданной точностью. Также будут найдены
усредненные ошибки и предложены значения параметров для корректировки ухода.
Проверьте согласованность результата. Одна неправильная запись опорного
времени может погубить все вычисления.
ДАЛЬНЕЙШАЯ ИНФОРМАЦИЯ
Авторитетную документацию по программе времени ядра смотрите сдесь,
все написано David L. Mills <[email protected]>:
[MIL92a] Mills, D.L. Network Time Protocol (Version 3) specification,
implementation and analysis, RFC 1305, University of Delaware, March
1992, 113 pp.
[MIL92c] Mills, D.L. Simple Network Time Protocol (SNTP), RFC 1361,
University of Delaware, August 1992, 10 pp.
[MIL94a] Mills, D.L. A kernel model for precision timekeeping. ARPA
Network Working Group Report RFC-1589, University of Delaware, March
1994. 31 pp.
README.kern, который можно найти на louie.udel.edu:/pub/ntp/kernel.tar.Z.
БЛАГОДАРНОСТИ
Дэвиду Миллсу (David Mills) за код сохранения времени ядра, и Стивену
Дику (Steven Dick) <[email protected]> за первоначальное написание
adjtimex. (Я сильно изменил код. Любые проблемы - моя ответственность.)
Благодарность также Микаэлю Мескесу (Michael Meskes) <[email protected]>,
чей инсталляционный скрипт в Debian вдохновил на опции "--compare" и
"--adjust".
Наслаждайтесь!
- Jim Van Zandt <jrv at comcast.net>