Re: [chrony-dev] [PATCH] MacOS X - Increase priority of chronyd process |
[ Thread Index |
Date Index
| More chrony.tuxfamily.org/chrony-dev Archives
]
Are you sure that there is a 1us offset? How do you measure that? Remember
that anything in the computer has latency and 1us is not that long a time.
Ie, it takes a bit of work to measure that offset to that accuracy.
Note that the only time critical item is the reading of the system clock when
the interrupt comes in. And I have doubts that the interrupt handling software
is up to much less than 1us standard.
William G. Unruh | Canadian Institute for| Tel: +1(604)822-3273
Physics&Astronomy | Advanced Research | Fax: +1(604)822-5324
UBC, Vancouver,BC | Program in Cosmology | unruh@xxxxxxxxxxxxxx
Canada V6T 1Z1 | and Gravity | www.theory.physics.ubc.ca/
On Mon, 24 Aug 2015, Bryan Christianson wrote:
Run chronyd with a 'nice' value of -15. Also run chronyd as a near real time process to prevent pre-empting of timing calculations and adjustments. This patch has the effect of removing an observed 1usec bias from the mean 'System time' offset.
---
.../org.tuxfamily.chronyd.plist | 2 +
sys_macosx.c | 45 ++++++++++++++++++++++
2 files changed, 47 insertions(+)
diff --git a/contrib/bryan_christianson_1/org.tuxfamily.chronyd.plist b/contrib/bryan_christianson_1/org.tuxfamily.chronyd.plist
index 2bf42aa..58132fa 100644
--- a/contrib/bryan_christianson_1/org.tuxfamily.chronyd.plist
+++ b/contrib/bryan_christianson_1/org.tuxfamily.chronyd.plist
@@ -13,6 +13,8 @@
<string>-f</string>
<string>/private/etc/chrony.d/chrony.conf</string>
</array>
+ <key>Nice</key>
+ <integer>-15</integer>
<key>KeepAlive</key>
<true/>
</dict>
diff --git a/sys_macosx.c b/sys_macosx.c
index 33da60d..f76f80c 100644
--- a/sys_macosx.c
+++ b/sys_macosx.c
@@ -42,6 +42,10 @@
#include <stdio.h>
#include <signal.h>
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#include <pthread.h>
+
#include "sys_macosx.h"
#include "localp.h"
#include "sched.h"
@@ -85,6 +89,8 @@ static struct timeval Tdrift;
/* minimum resolution of current_frequency */
#define FREQUENCY_RES (1.0e-9)
+#define NANOS_PER_MSEC (1000000ULL)
+
/* ================================================== */
static void
@@ -335,6 +341,43 @@ drift_removal_timeout(SCH_ArbitraryArgument not_used)
}
/* ================================================== */
+/*
+ Give chronyd real time priority so that time critical calculations
+ are not pre-empted by the kernel.
+*/
+
+static int
+set_realtime(void)
+{
+ /* https://developer.apple.com/library/ios/technotes/tn2169/_index.html */
+
+ mach_timebase_info_data_t timebase_info;
+ double clock2abs;
+ thread_time_constraint_policy_data_t policy;
+ int kr;
+
+ mach_timebase_info(&timebase_info);
+ clock2abs = ((double)timebase_info.denom / (double)timebase_info.numer) * NANOS_PER_MSEC;
+
+ policy.period = 0;
+ policy.computation = (uint32_t)(5 * clock2abs); /* 5 ms of work */
+ policy.constraint = (uint32_t)(10 * clock2abs);
+ policy.preemptible = 0;
+
+ kr = thread_policy_set(
+ pthread_mach_thread_np(pthread_self()),
+ THREAD_TIME_CONSTRAINT_POLICY,
+ (thread_policy_t)&policy,
+ THREAD_TIME_CONSTRAINT_POLICY_COUNT);
+
+ if (kr != KERN_SUCCESS) {
+ LOG(LOGS_WARN, LOGF_SysMacOSX, "Cannot set real-time priority: %d", kr);
+ return -1;
+ }
+ return 0;
+}
+
+/* ================================================== */
void
SYS_MacOSX_Initialise(void)
@@ -350,6 +393,8 @@ SYS_MacOSX_Initialise(void)
drift_removal_id = SCH_AddTimeoutByDelay(drift_removal_interval, drift_removal_timeout, NULL);
drift_removal_running = 1;
+
+ set_realtime();
}
/* ================================================== */
--
2.3.2 (Apple Git-55)
--
To unsubscribe email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "unsubscribe" in the subject.
For help email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "help" in the subject.
Trouble? Email listmaster@xxxxxxxxxxxxxxxxxxxx.
--
To unsubscribe email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "unsubscribe" in the subject.
For help email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "help" in the subject.
Trouble? Email listmaster@xxxxxxxxxxxxxxxxxxxx.