From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753824AbdEQQNY (ORCPT ); Wed, 17 May 2017 12:13:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53782 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751704AbdEQQNU (ORCPT ); Wed, 17 May 2017 12:13:20 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 38BF2C04B939 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=mlichvar@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 38BF2C04B939 From: Miroslav Lichvar To: linux-kernel@vger.kernel.org Cc: John Stultz , Prarit Bhargava , Richard Cochran Subject: [PATCH RFC 0/3] Improve stability of system clock Date: Wed, 17 May 2017 18:13:14 +0200 Message-Id: <20170517161317.19557-1-mlichvar@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 17 May 2017 16:13:20 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an attempt to improve stability and accuracy of the system clock with very accurate time sources like the new PTP KVM clock or NTP/PTP using hardware timestamping. It affects mainly kernels running with NOHZ. It requires updating of the old ia64 and powerpc vsyscalls. The main problem is that the error accumulated in the ntp_error register takes too long to correct and this cannot be easily fixed. There are four sources of the error: - rounding of time for old vsyscalls - alignment of frequency adjustments to ticks - iterative correction of the multiplier - limited resolution of the multipler Instead of trying to correct the error faster, the patches remove the first three sources. With the only remaining source the correction logic can be simplified and the frequency of the clock is much more stable and accurate. Simulations of a frequency step in linux-tktest (values are in ppm and nanoseconds): Before: nohz on [1, samples/2] [samples/2 + 1, samples] samples freq dev max freq dev max 10 1.47222 1341.3 2217.8 0.06322 0.2 0.5 30 0.20799 849.5 2448.7 0.06311 0.2 0.6 100 0.04101 492.1 2895.2 0.06311 0.2 0.5 300 0.05660 295.5 3026.1 0.02064 28.3 108.9 1000 0.01994 409.8 2732.1 0.00355 13.7 52.2 3000 0.00477 469.1 3238.9 0.00070 11.0 40.9 10000 0.00081 377.3 3791.6 0.00013 9.4 36.2 30000 0.00016 259.9 4055.7 0.00004 8.9 34.1 100000 0.00003 159.0 4177.2 0.00000 13.7 58.4 nohz off [1, samples/2] [samples/2 + 1, samples] samples freq dev max freq dev max 10 3.55062 6.2 10.8 0.05730 0.0 0.0 30 0.44672 4.5 14.1 0.05724 0.2 0.5 100 0.03649 2.7 17.4 0.05711 0.2 0.5 300 0.05815 1.7 18.7 0.06313 0.2 0.5 1000 0.06270 1.0 19.1 0.06315 0.2 0.5 3000 0.05720 1.9 19.9 0.02065 1.1 4.1 10000 0.01947 13.5 41.0 0.00339 0.5 1.7 30000 0.00448 17.5 75.9 0.00065 0.3 1.0 100000 0.00078 14.2 101.7 0.00012 0.2 0.7 After: nohz on [1, samples/2] [samples/2 + 1, samples] samples freq dev max freq dev max 10 0.01584 9.0 14.2 0.02937 2.7 7.2 30 0.00426 10.9 22.4 0.00481 6.5 19.2 100 0.00077 11.6 26.3 0.00074 9.0 26.9 300 0.00013 12.4 29.9 0.00018 8.7 29.3 1000 0.00003 12.6 31.8 0.00003 8.7 32.1 3000 0.00001 12.6 33.3 0.00001 9.1 33.4 10000 0.00000 12.9 34.0 0.00000 9.0 34.1 30000 0.00000 12.8 34.5 0.00000 9.0 34.5 100000 0.00000 16.5 51.2 0.00000 13.7 58.5 nohz off [1, samples/2] [samples/2 + 1, samples] samples freq dev max freq dev max 10 0.10309 0.1 0.1 0.12717 0.0 0.1 30 0.04269 0.1 0.3 0.02592 0.1 0.4 100 0.00629 0.3 0.5 0.00521 0.2 0.5 300 0.00109 0.3 0.6 0.00099 0.2 0.5 1000 0.00019 0.3 0.6 0.00022 0.2 0.6 3000 0.00002 0.3 0.6 0.00002 0.2 0.6 10000 0.00000 0.3 0.6 0.00000 0.2 0.6 30000 0.00000 0.3 0.6 0.00000 0.2 0.6 100000 0.00000 0.3 0.6 0.00000 0.2 0.6 Miroslav Lichvar (3): timekeeping: Remove support for old vsyscalls timekeeping: Don't align frequency adjustments to ticks timekeeping: Determine multiplier directly from NTP tick length include/linux/timekeeper_internal.h | 9 +- kernel/time/Kconfig | 4 - kernel/time/timekeeping.c | 184 +++++++++--------------------------- 3 files changed, 48 insertions(+), 149 deletions(-) -- 2.9.3