* time patches by Roman Zippel
@ 2006-02-14 7:33 Ulrich Windl
2006-02-14 13:21 ` Roman Zippel
2006-02-16 23:21 ` Pavel Machek
0 siblings, 2 replies; 7+ messages in thread
From: Ulrich Windl @ 2006-02-14 7:33 UTC (permalink / raw)
To: linux-kernel
[-- Attachment #1: Mail message body --]
[-- Type: text/plain, Size: 3457 bytes --]
Hello,
Roman had asked me to look at his recent set of time patches. So I did have a
quick look.
Generally I think removing code that proved to work for about 10 years or more
without having a replacement is to be avoided. What Roman did implement is a move
towards the new NTP kernel algorithms, but it's "neither fish nor meat": In part
it changes the semantics of syscalls, and it changes constants in an incompatible
way.
Specifically when considering that there exists a proven kernel code replacement
for some years now (which I'm at integrating to 2.6.15), I wonder whether it's a
wise decision to start hacking the code in such a way.
Roman may know more than I about how to make efficient 64-bit math on 32-bit
archs, but AFAIK he broke a few things:
15_time_offset and 18_time_freq change some well-known constants (like MAXPHASE)
by three orders of magnitude.
the new adjtime() (16_time_adjust, 12_time_adj) changes the semantics: Since about
Linux 0.99, adjtime() had the adjtime_is_accurate property, i.e. on the long term
it behaved like an addition.
Currently, unless I'm wrong, adjtime() for 1µs with HZ == 1024 would correct the
clock by nothing, while an adjtime() for 2µs would correct the clock by 1024ns on
the same system. For HZ == 100 things seem OK however.
My philosophy is "do it correct first, then optimize". Some test with the code
from last weekend (measure the time of an external "Pulse per Second" (plus the
first two derivations of it)) gave results like this (virtual nanosecond
granularity, i.e. get_offset() still has microsecond resolution, ntpd trying to
calibrate the clock):
assert 1120 time 1139767167.000402394 delta 1.000000030 jitter 1535064674
assert 1121 time 1139767168.000402457 delta 1.000000063 jitter 33
assert 1122 time 1139767169.000402521 delta 1.000000064 jitter 1
assert 1123 time 1139767170.000402586 delta 1.000000065 jitter 1
assert 1124 time 1139767171.000402635 delta 1.000000049 jitter -16
assert 1125 time 1139767172.000402667 delta 1.000000032 jitter -17
assert 1126 time 1139767173.000402684 delta 1.000000017 jitter -15
assert 1127 time 1139767174.000402688 delta 1.000000004 jitter -13
assert 1128 time 1139767175.000402684 delta 0.999999996 jitter -8
assert 1129 time 1139767176.000402676 delta 0.999999992 jitter -4
assert 1130 time 1139767177.000402668 delta 0.999999992 jitter 0
assert 1131 time 1139767178.000402660 delta 0.999999992 jitter 0
assert 1132 time 1139767179.000402654 delta 0.999999994 jitter 2
assert 1133 time 1139767180.000402650 delta 0.999999996 jitter 2
assert 1134 time 1139767181.000402648 delta 0.999999998 jitter 2
assert 1135 time 1139767182.000402648 delta 1.000000000 jitter 2
assert 1136 time 1139767183.000402648 delta 1.000000000 jitter 0
(The last released patch snapshot is named "PPSkit-light-alpha-2955m-
2.6.15.1.diff.gz" and can be found in the directory /pub/linux/daemons/ntp/PPS of
your favourite Linux mirror. At the moment there exist two uncommitted change sets
that have to be tested first)
So personally I'd suggest to consider that code base. Options are eiher
1) to optimize/streamline what you think is too ugly
2) make the whole NTP lcok calibration optional if you think it's computationally
too heavy (however, both GNOME and KDE hit the CPU much more than any of these
changes)
Regards,
Ulrich
P.S. I'll attach a longer sample (12kB) of my timing test.
[-- Attachment #2: jitter.log --]
[-- Type: Application/Octet-stream, Size: 13233 bytes --]
(This version has been compiled on Linux 2.6.4
using glibc-2.3. Now running Linux 2.6.15.1PPSAPI)
PPS API capabilities are 0x10f3
assert 1120 time 1139767167.000402394 delta 1.000000030 jitter 1535064674
assert 1121 time 1139767168.000402457 delta 1.000000063 jitter 33
assert 1122 time 1139767169.000402521 delta 1.000000064 jitter 1
assert 1123 time 1139767170.000402586 delta 1.000000065 jitter 1
assert 1124 time 1139767171.000402635 delta 1.000000049 jitter -16
assert 1125 time 1139767172.000402667 delta 1.000000032 jitter -17
assert 1126 time 1139767173.000402684 delta 1.000000017 jitter -15
assert 1127 time 1139767174.000402688 delta 1.000000004 jitter -13
assert 1128 time 1139767175.000402684 delta 0.999999996 jitter -8
assert 1129 time 1139767176.000402676 delta 0.999999992 jitter -4
assert 1130 time 1139767177.000402668 delta 0.999999992 jitter 0
assert 1131 time 1139767178.000402660 delta 0.999999992 jitter 0
assert 1132 time 1139767179.000402654 delta 0.999999994 jitter 2
assert 1133 time 1139767180.000402650 delta 0.999999996 jitter 2
assert 1134 time 1139767181.000402648 delta 0.999999998 jitter 2
assert 1135 time 1139767182.000402648 delta 1.000000000 jitter 2
assert 1136 time 1139767183.000402648 delta 1.000000000 jitter 0
assert 1137 time 1139767184.000402649 delta 1.000000001 jitter 1
assert 1138 time 1139767185.000402650 delta 1.000000001 jitter 0
assert 1139 time 1139767186.000402651 delta 1.000000001 jitter 0
assert 1140 time 1139767187.000402652 delta 1.000000001 jitter 0
assert 1141 time 1139767188.000402653 delta 1.000000001 jitter 0
assert 1142 time 1139767189.000402653 delta 1.000000000 jitter -1
assert 1143 time 1139767190.000402653 delta 1.000000000 jitter 0
assert 1144 time 1139767191.000402653 delta 1.000000000 jitter 0
assert 1145 time 1139767192.000402652 delta 0.999999999 jitter -1
assert 1146 time 1139767193.000402652 delta 1.000000000 jitter 1
assert 1147 time 1139767194.000402652 delta 1.000000000 jitter 0
assert 1148 time 1139767195.000402652 delta 1.000000000 jitter 0
assert 1149 time 1139767196.000402652 delta 1.000000000 jitter 0
assert 1150 time 1139767197.000402652 delta 1.000000000 jitter 0
assert 1151 time 1139767198.000402652 delta 1.000000000 jitter 0
assert 1152 time 1139767199.000402652 delta 1.000000000 jitter 0
assert 1153 time 1139767200.000402652 delta 1.000000000 jitter 0
assert 1154 time 1139767201.000402652 delta 1.000000000 jitter 0
assert 1155 time 1139767202.000402652 delta 1.000000000 jitter 0
assert 1156 time 1139767203.000402652 delta 1.000000000 jitter 0
assert 1157 time 1139767204.000402652 delta 1.000000000 jitter 0
assert 1158 time 1139767205.000402652 delta 1.000000000 jitter 0
assert 1159 time 1139767206.000402652 delta 1.000000000 jitter 0
assert 1160 time 1139767207.000402652 delta 1.000000000 jitter 0
assert 1161 time 1139767208.000402652 delta 1.000000000 jitter 0
assert 1162 time 1139767209.000402652 delta 1.000000000 jitter 0
assert 1163 time 1139767210.000402652 delta 1.000000000 jitter 0
assert 1164 time 1139767211.000402652 delta 1.000000000 jitter 0
assert 1165 time 1139767212.000402652 delta 1.000000000 jitter 0
assert 1166 time 1139767212.990402652 delta 0.990000000 jitter -10000000
assert 1167 time 1139767213.990402652 delta 1.000000000 jitter 10000000
assert 1168 time 1139767214.990427566 delta 1.000024914 jitter 24914
assert 1169 time 1139767215.992902818 delta 1.002475252 jitter 2450338
assert 1170 time 1139767216.994808982 delta 1.001906164 jitter -569088
assert 1171 time 1139767217.996263771 delta 1.001454789 jitter -451375
assert 1172 time 1139767218.997380028 delta 1.001116257 jitter -338532
assert 1173 time 1139767219.998242387 delta 1.000862359 jitter -253898
assert 1174 time 1139767220.998914322 delta 1.000671935 jitter -190424
assert 1175 time 1139767221.999443438 delta 1.000529116 jitter -142819
assert 1176 time 1139767222.999865442 delta 1.000422004 jitter -107112
assert 1177 time 1139767224.000107057 delta 1.000241615 jitter -180389
assert 1178 time 1139767225.000312075 delta 1.000205018 jitter -36597
assert 1179 time 1139767226.000446378 delta 1.000134303 jitter -70715
assert 1180 time 1139767227.000520276 delta 1.000073898 jitter -60405
assert 1181 time 1139767228.000542921 delta 1.000022645 jitter -51253
assert 1182 time 1139767229.000531989 delta 0.999989068 jitter -33577
assert 1183 time 1139767230.000502583 delta 0.999970594 jitter -18474
assert 1184 time 1139767231.000470249 delta 0.999967666 jitter -2928
assert 1185 time 1139767232.000437915 delta 0.999967666 jitter 0
assert 1186 time 1139767233.000412932 delta 0.999975017 jitter 7351
assert 1187 time 1139767234.000396033 delta 0.999983101 jitter 8084
assert 1188 time 1139767235.000387217 delta 0.999991184 jitter 8083
assert 1189 time 1139767236.000384647 delta 0.999997430 jitter 6246
assert 1190 time 1139767237.000386302 delta 1.000001655 jitter 4225
assert 1191 time 1139767238.000390160 delta 1.000003858 jitter 2203
assert 1192 time 1139767239.000394248 delta 1.000004088 jitter 230
assert 1193 time 1139767240.000398335 delta 1.000004087 jitter -1
assert 1194 time 1139767241.000401458 delta 1.000003123 jitter -964
assert 1195 time 1139767242.000403559 delta 1.000002101 jitter -1022
assert 1196 time 1139767243.000404639 delta 1.000001080 jitter -1021
assert 1197 time 1139767244.000404937 delta 1.000000298 jitter -782
assert 1198 time 1139767245.000404710 delta 0.999999773 jitter -525
assert 1199 time 1139767246.000404214 delta 0.999999504 jitter -269
assert 1200 time 1139767247.000403699 delta 0.999999485 jitter -19
assert 1201 time 1139767248.000403185 delta 0.999999486 jitter 1
assert 1202 time 1139767249.000402794 delta 0.999999609 jitter 123
assert 1203 time 1139767250.000402532 delta 0.999999738 jitter 129
assert 1204 time 1139767251.000402399 delta 0.999999867 jitter 129
assert 1205 time 1139767252.000402364 delta 0.999999965 jitter 98
assert 1206 time 1139767253.000402394 delta 1.000000030 jitter 65
assert 1207 time 1139767254.000402457 delta 1.000000063 jitter 33
assert 1208 time 1139767255.000402521 delta 1.000000064 jitter 1
assert 1209 time 1139767256.000402586 delta 1.000000065 jitter 1
assert 1210 time 1139767257.000402635 delta 1.000000049 jitter -16
assert 1211 time 1139767258.000402667 delta 1.000000032 jitter -17
assert 1212 time 1139767259.000402684 delta 1.000000017 jitter -15
assert 1213 time 1139767260.000402688 delta 1.000000004 jitter -13
assert 1214 time 1139767261.000402684 delta 0.999999996 jitter -8
assert 1215 time 1139767262.000402676 delta 0.999999992 jitter -4
assert 1216 time 1139767263.000402668 delta 0.999999992 jitter 0
assert 1217 time 1139767264.000402660 delta 0.999999992 jitter 0
assert 1218 time 1139767265.000402654 delta 0.999999994 jitter 2
assert 1219 time 1139767266.000402650 delta 0.999999996 jitter 2
assert 1220 time 1139767267.000402648 delta 0.999999998 jitter 2
assert 1221 time 1139767268.000402648 delta 1.000000000 jitter 2
assert 1222 time 1139767269.000402648 delta 1.000000000 jitter 0
assert 1223 time 1139767270.000402649 delta 1.000000001 jitter 1
assert 1224 time 1139767271.000402650 delta 1.000000001 jitter 0
assert 1225 time 1139767272.000402651 delta 1.000000001 jitter 0
assert 1226 time 1139767273.000402652 delta 1.000000001 jitter 0
assert 1227 time 1139767274.000402653 delta 1.000000001 jitter 0
assert 1228 time 1139767275.000402653 delta 1.000000000 jitter -1
assert 1229 time 1139767276.000402653 delta 1.000000000 jitter 0
assert 1230 time 1139767277.000402653 delta 1.000000000 jitter 0
assert 1231 time 1139767278.000402652 delta 0.999999999 jitter -1
assert 1232 time 1139767279.000402652 delta 1.000000000 jitter 1
assert 1233 time 1139767280.000402652 delta 1.000000000 jitter 0
assert 1234 time 1139767281.000402652 delta 1.000000000 jitter 0
assert 1235 time 1139767282.000402652 delta 1.000000000 jitter 0
assert 1236 time 1139767283.000402652 delta 1.000000000 jitter 0
assert 1237 time 1139767284.000402652 delta 1.000000000 jitter 0
assert 1238 time 1139767285.000402652 delta 1.000000000 jitter 0
assert 1239 time 1139767286.000402652 delta 1.000000000 jitter 0
assert 1240 time 1139767287.000402652 delta 1.000000000 jitter 0
assert 1241 time 1139767288.000402652 delta 1.000000000 jitter 0
assert 1242 time 1139767289.000402652 delta 1.000000000 jitter 0
assert 1243 time 1139767290.000402652 delta 1.000000000 jitter 0
assert 1244 time 1139767291.000402652 delta 1.000000000 jitter 0
assert 1245 time 1139767292.000402652 delta 1.000000000 jitter 0
assert 1246 time 1139767293.000402652 delta 1.000000000 jitter 0
assert 1247 time 1139767294.000402652 delta 1.000000000 jitter 0
assert 1248 time 1139767295.000402652 delta 1.000000000 jitter 0
assert 1249 time 1139767296.000402652 delta 1.000000000 jitter 0
assert 1250 time 1139767297.000402652 delta 1.000000000 jitter 0
assert 1251 time 1139767297.990402652 delta 0.990000000 jitter -10000000
assert 1252 time 1139767298.990402652 delta 1.000000000 jitter 10000000
assert 1253 time 1139767299.990427566 delta 1.000024914 jitter 24914
assert 1254 time 1139767300.992902818 delta 1.002475252 jitter 2450338
assert 1255 time 1139767301.994808982 delta 1.001906164 jitter -569088
assert 1256 time 1139767302.996263770 delta 1.001454788 jitter -451376
assert 1257 time 1139767303.997380028 delta 1.001116258 jitter -338530
assert 1258 time 1139767304.998242387 delta 1.000862359 jitter -253899
assert 1259 time 1139767305.998914321 delta 1.000671934 jitter -190425
assert 1260 time 1139767306.999443438 delta 1.000529117 jitter -142817
assert 1261 time 1139767307.999865442 delta 1.000422004 jitter -107113
assert 1262 time 1139767309.000107056 delta 1.000241614 jitter -180390
assert 1263 time 1139767310.000312075 delta 1.000205019 jitter -36595
assert 1264 time 1139767311.000446377 delta 1.000134302 jitter -70717
assert 1265 time 1139767312.000520276 delta 1.000073899 jitter -60403
assert 1266 time 1139767313.000542921 delta 1.000022645 jitter -51254
assert 1267 time 1139767314.000531989 delta 0.999989068 jitter -33577
assert 1268 time 1139767315.000502583 delta 0.999970594 jitter -18474
assert 1269 time 1139767316.000470249 delta 0.999967666 jitter -2928
assert 1270 time 1139767317.000437915 delta 0.999967666 jitter 0
assert 1271 time 1139767318.000412932 delta 0.999975017 jitter 7351
assert 1272 time 1139767319.000396033 delta 0.999983101 jitter 8084
assert 1273 time 1139767320.000387217 delta 0.999991184 jitter 8083
assert 1274 time 1139767321.000384647 delta 0.999997430 jitter 6246
assert 1275 time 1139767322.000386302 delta 1.000001655 jitter 4225
assert 1276 time 1139767323.000390161 delta 1.000003859 jitter 2204
assert 1277 time 1139767324.000394248 delta 1.000004087 jitter 228
assert 1278 time 1139767325.000398336 delta 1.000004088 jitter 1
assert 1279 time 1139767326.000401458 delta 1.000003122 jitter -966
assert 1280 time 1139767327.000403559 delta 1.000002101 jitter -1021
assert 1281 time 1139767328.000404638 delta 1.000001079 jitter -1022
assert 1282 time 1139767329.000404937 delta 1.000000299 jitter -780
assert 1283 time 1139767330.000404710 delta 0.999999773 jitter -526
assert 1284 time 1139767331.000404214 delta 0.999999504 jitter -269
assert 1285 time 1139767332.000403699 delta 0.999999485 jitter -19
assert 1286 time 1139767333.000403185 delta 0.999999486 jitter 1
assert 1287 time 1139767334.000402794 delta 0.999999609 jitter 123
assert 1288 time 1139767335.000402532 delta 0.999999738 jitter 129
assert 1289 time 1139767336.000402399 delta 0.999999867 jitter 129
assert 1290 time 1139767337.000402364 delta 0.999999965 jitter 98
assert 1291 time 1139767338.000402394 delta 1.000000030 jitter 65
assert 1292 time 1139767339.000402457 delta 1.000000063 jitter 33
assert 1293 time 1139767340.000402521 delta 1.000000064 jitter 1
assert 1294 time 1139767341.000402586 delta 1.000000065 jitter 1
assert 1295 time 1139767342.000402635 delta 1.000000049 jitter -16
assert 1296 time 1139767343.000402667 delta 1.000000032 jitter -17
assert 1297 time 1139767344.000402684 delta 1.000000017 jitter -15
assert 1298 time 1139767345.000402688 delta 1.000000004 jitter -13
assert 1299 time 1139767346.000402684 delta 0.999999996 jitter -8
assert 1300 time 1139767347.000402676 delta 0.999999992 jitter -4
assert 1301 time 1139767348.000402668 delta 0.999999992 jitter 0
assert 1302 time 1139767349.000402660 delta 0.999999992 jitter 0
assert 1303 time 1139767350.000402654 delta 0.999999994 jitter 2
assert 1304 time 1139767351.000402650 delta 0.999999996 jitter 2
assert 1305 time 1139767352.000402648 delta 0.999999998 jitter 2
assert 1306 time 1139767353.000402648 delta 1.000000000 jitter 2
assert 1307 time 1139767354.000402648 delta 1.000000000 jitter 0
assert 1308 time 1139767355.000402649 delta 1.000000001 jitter 1
assert 1309 time 1139767356.000402650 delta 1.000000001 jitter 0
assert 1310 time 1139767357.000402651 delta 1.000000001 jitter 0
assert 1311 time 1139767358.000402652 delta 1.000000001 jitter 0
assert 1312 time 1139767359.000402653 delta 1.000000001 jitter 0
assert 1313 time 1139767360.000402653 delta 1.000000000 jitter -1
assert 1314 time 1139767361.000402653 delta 1.000000000 jitter 0
assert 1315 time 1139767362.000402653 delta 1.000000000 jitter 0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-14 7:33 time patches by Roman Zippel Ulrich Windl
@ 2006-02-14 13:21 ` Roman Zippel
2006-02-14 14:09 ` Ulrich Windl
2006-02-16 23:21 ` Pavel Machek
1 sibling, 1 reply; 7+ messages in thread
From: Roman Zippel @ 2006-02-14 13:21 UTC (permalink / raw)
To: Ulrich Windl; +Cc: linux-kernel
Hi,
On Tue, 14 Feb 2006, Ulrich Windl wrote:
> 15_time_offset and 18_time_freq change some well-known constants (like MAXPHASE)
> by three orders of magnitude.
>
> the new adjtime() (16_time_adjust, 12_time_adj) changes the semantics: Since about
> Linux 0.99, adjtime() had the adjtime_is_accurate property, i.e. on the long term
> it behaved like an addition.
I disagree, could you please explain how you come to this conclusion?
The patches don't change the behaviour beyond that they increase
resolution and precision. Only the final patch changes the ntp code to
match the behaviour of ntp reference code without including all its mess.
bye, Roman
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-14 13:21 ` Roman Zippel
@ 2006-02-14 14:09 ` Ulrich Windl
2006-02-14 14:33 ` Roman Zippel
0 siblings, 1 reply; 7+ messages in thread
From: Ulrich Windl @ 2006-02-14 14:09 UTC (permalink / raw)
To: Roman Zippel; +Cc: linux-kernel
On 14 Feb 2006 at 14:21, Roman Zippel wrote:
> Hi,
>
> On Tue, 14 Feb 2006, Ulrich Windl wrote:
>
> > 15_time_offset and 18_time_freq change some well-known constants (like MAXPHASE)
> > by three orders of magnitude.
--- linux-2.6-mm.orig/include/linux/timex.h 2005-12-21 12:12:00.000000000 +0100
+++ linux-2.6-mm/include/linux/timex.h 2005-12-21 12:12:08.000000000 +0100
@@ -95,11 +95,11 @@
#define SHIFT_USEC 16 /* frequency offset scale (shift) */
#define FINENSEC (1L << SHIFT_SCALE) /* ~1 ns in phase units */
-#define MAXPHASE 512000L /* max phase error (us) */
+#define MAXPHASE 500000000L /* max phase error (ns) */
#define MAXFREQ (512L << SHIFT_USEC) /* max frequency error (ppm) */
#define MINSEC 16L /* min interval between updates (s) */
#define MAXSEC 1200L /* max interval between updates (s) */
-#define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */
+#define NTP_PHASE_LIMIT ((MAXPHASE / 1000) << 5) /* beyond max. dispersion */
> >
> > the new adjtime() (16_time_adjust, 12_time_adj) changes the semantics: Since about
> > Linux 0.99, adjtime() had the adjtime_is_accurate property, i.e. on the long term
> > it behaved like an addition.
>
> I disagree, could you please explain how you come to this conclusion?
+ tick_nsec_curr += time_adjust * 1000 / HZ;
Assuming 1024Hz interrupt frequency:
(1µs * 1000) / 1024 == 0ns; 0 * 1024 == 0µs, not 1µs
(2µs * 1000) / 1024 == 1ns; 1 * 1024 == 1.024µs, not 2µs
> The patches don't change the behaviour beyond that they increase
> resolution and precision. Only the final patch changes the ntp code to
> match the behaviour of ntp reference code without including all its mess.
It's quite hard to tell: The code is very different what I've ever seen.
Regards,
Ulrich
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-14 14:09 ` Ulrich Windl
@ 2006-02-14 14:33 ` Roman Zippel
2006-02-15 7:26 ` Ulrich Windl
0 siblings, 1 reply; 7+ messages in thread
From: Roman Zippel @ 2006-02-14 14:33 UTC (permalink / raw)
To: Ulrich Windl; +Cc: linux-kernel
[-- Attachment #1: Type: TEXT/PLAIN, Size: 2636 bytes --]
Hi,
On Tue, 14 Feb 2006, Ulrich Windl wrote:
> > > 15_time_offset and 18_time_freq change some well-known constants (like MAXPHASE)
> > > by three orders of magnitude.
>
> --- linux-2.6-mm.orig/include/linux/timex.h 2005-12-21 12:12:00.000000000 +0100
> +++ linux-2.6-mm/include/linux/timex.h 2005-12-21 12:12:08.000000000 +0100
> @@ -95,11 +95,11 @@
> #define SHIFT_USEC 16 /* frequency offset scale (shift) */
> #define FINENSEC (1L << SHIFT_SCALE) /* ~1 ns in phase units */
>
> -#define MAXPHASE 512000L /* max phase error (us) */
> +#define MAXPHASE 500000000L /* max phase error (ns) */
> #define MAXFREQ (512L << SHIFT_USEC) /* max frequency error (ppm) */
> #define MINSEC 16L /* min interval between updates (s) */
> #define MAXSEC 1200L /* max interval between updates (s) */
> -#define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */
> +#define NTP_PHASE_LIMIT ((MAXPHASE / 1000) << 5) /* beyond max. dispersion */
The reference timex.h has the same change for MAXPHASE and NTP_PHASE_LIMIT
is Linux specific. Where is the problem?
> > > the new adjtime() (16_time_adjust, 12_time_adj) changes the semantics: Since about
> > > Linux 0.99, adjtime() had the adjtime_is_accurate property, i.e. on the long term
> > > it behaved like an addition.
> >
> > I disagree, could you please explain how you come to this conclusion?
>
> + tick_nsec_curr += time_adjust * 1000 / HZ;
>
> Assuming 1024Hz interrupt frequency:
> (1µs * 1000) / 1024 == 0ns; 0 * 1024 == 0µs, not 1µs
> (2µs * 1000) / 1024 == 1ns; 1 * 1024 == 1.024µs, not 2µs
Ok, I didn't put much effort into optimizing it for uncommon HZ values.
Why is it so important? It's currently unused on any Linux machine
synchronized via NTP.
> > The patches don't change the behaviour beyond that they increase
> > resolution and precision. Only the final patch changes the ntp code to
> > match the behaviour of ntp reference code without including all its mess.
>
> It's quite hard to tell: The code is very different what I've ever seen.
Actually it's not that hard, under http://www.xs4all.nl/~zippel/ntp/ you
can also find the user space test code I used to verify it.
kernel.tar.Z is the old reference code, which the current Linux code is
based on, under patches-kernel you can find a number of patches to convert
it to the new model and which match the new kernel implementation.
I updated the kern.dat and added a nano.sh script with matching test
parameters for nanokernel, so you can compare the output of both test
programms.
bye, Roman
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-14 14:33 ` Roman Zippel
@ 2006-02-15 7:26 ` Ulrich Windl
2006-02-15 10:58 ` Roman Zippel
0 siblings, 1 reply; 7+ messages in thread
From: Ulrich Windl @ 2006-02-15 7:26 UTC (permalink / raw)
To: Roman Zippel; +Cc: linux-kernel
On 14 Feb 2006 at 15:33, Roman Zippel wrote:
[...]
> > Assuming 1024Hz interrupt frequency:
> > (1µs * 1000) / 1024 == 0ns; 0 * 1024 == 0µs, not 1µs
> > (2µs * 1000) / 1024 == 1ns; 1 * 1024 == 1.024µs, not 2µs
>
> Ok, I didn't put much effort into optimizing it for uncommon HZ values.
> Why is it so important? It's currently unused on any Linux machine
> synchronized via NTP.
Roman,
how do you know? When using "disable kernel", NTP relies on adjtime() to adjust
the time. Some people even prefer that, because the algorithms do floating point
math in user space instead of fixed-point maths in kernel space.
[...]
Regards,
Ulrich
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-15 7:26 ` Ulrich Windl
@ 2006-02-15 10:58 ` Roman Zippel
0 siblings, 0 replies; 7+ messages in thread
From: Roman Zippel @ 2006-02-15 10:58 UTC (permalink / raw)
To: Ulrich Windl; +Cc: linux-kernel
[-- Attachment #1: Type: TEXT/PLAIN, Size: 964 bytes --]
Hi,
On Wed, 15 Feb 2006, Ulrich Windl wrote:
> > > Assuming 1024Hz interrupt frequency:
> > > (1µs * 1000) / 1024 == 0ns; 0 * 1024 == 0µs, not 1µs
> > > (2µs * 1000) / 1024 == 1ns; 1 * 1024 == 1.024µs, not 2µs
> >
> > Ok, I didn't put much effort into optimizing it for uncommon HZ values.
> > Why is it so important? It's currently unused on any Linux machine
> > synchronized via NTP.
>
> Roman,
>
> how do you know? When using "disable kernel", NTP relies on adjtime() to adjust
> the time. Some people even prefer that, because the algorithms do floating point
> math in user space instead of fixed-point maths in kernel space.
This still requires they choose an uncommon HZ value, which is not really
likely. Anyway, it's not really difficult to add the remainder to
time_adj_curr. Since the adjtime() has only a usec resolution and this
rounding error is only 1 usec, I didn't consider it to be that important.
bye, Roman
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: time patches by Roman Zippel
2006-02-14 7:33 time patches by Roman Zippel Ulrich Windl
2006-02-14 13:21 ` Roman Zippel
@ 2006-02-16 23:21 ` Pavel Machek
1 sibling, 0 replies; 7+ messages in thread
From: Pavel Machek @ 2006-02-16 23:21 UTC (permalink / raw)
To: Ulrich Windl; +Cc: linux-kernel
Hi!
> So personally I'd suggest to consider that code base. Options are eiher
> 1) to optimize/streamline what you think is too ugly
> 2) make the whole NTP lcok calibration optional if you think it's computationally
> too heavy (however, both GNOME and KDE hit the CPU much more than any of these
> changes)
Well, being less resource-hungry is similar to be less lethal than loaded gun.
Kernel time keeping should better have <0.1% cpu overhead.
Pavel
--
64 bytes from 195.113.31.123: icmp_seq=28 ttl=51 time=448769.1 ms
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-02-18 12:55 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-14 7:33 time patches by Roman Zippel Ulrich Windl
2006-02-14 13:21 ` Roman Zippel
2006-02-14 14:09 ` Ulrich Windl
2006-02-14 14:33 ` Roman Zippel
2006-02-15 7:26 ` Ulrich Windl
2006-02-15 10:58 ` Roman Zippel
2006-02-16 23:21 ` Pavel Machek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome