chiark / gitweb /
main: allow setting of timer slack for PID 1
authorLennart Poettering <lennart@poettering.net>
Thu, 31 May 2012 02:36:08 +0000 (04:36 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 31 May 2012 02:36:08 +0000 (04:36 +0200)
man/systemd.conf.xml
src/core/main.c
src/core/system.conf

index 2659f9ab7bbbcf0cf8ce19f3d83b48414fe6a3a0..92942f1a93797c714ff892ba1e7e86b0ebd5a344 100644 (file)
                                 are lost for good.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><varname>TimerSlackNSec=</varname></term>
+
+                                <listitem><para>Sets the timer slack
+                                in nanoseconds for PID 1 which is then
+                                inherited to all executed processes,
+                                unless overriden individually, for
+                                example with the
+                                <varname>TimerSlackNSec=</varname>
+                                setting in service units (for details
+                                see
+                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>). The
+                                timer slack controls the accuracy of
+                                wake-ups triggered by timers. See
+                                <citerefentry><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+                                for more information. Note that in
+                                contrast to most other time span
+                                definitions this parameter takes an
+                                integer value in nano-seconds if no
+                                unit is specified. The usual time
+                                units are understood
+                                too.</para></listitem>
+                        </varlistentry>
+
                         <varlistentry>
                                 <term><varname>DefaultLimitCPU=</varname></term>
                                 <term><varname>DefaultLimitFSIZE=</varname></term>
index 4c3ee7d5a2e240cd1ad42f1612a271f5dfa1146d..5cd012e9571bd5d6f7afa3a2217b8687be71a4b8 100644 (file)
@@ -90,6 +90,7 @@ static usec_t arg_runtime_watchdog = 0;
 static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
 static struct rlimit *arg_default_rlimit[RLIMIT_NLIMITS] = {};
 static uint64_t arg_capability_bounding_set_drop = 0;
+static nsec_t arg_timer_slack_nsec = (nsec_t) -1;
 
 static FILE* serialization = NULL;
 
@@ -681,6 +682,7 @@ static int parse_config_file(void) {
                 { "Manager", "RuntimeWatchdogSec",    config_parse_usec,         0, &arg_runtime_watchdog    },
                 { "Manager", "ShutdownWatchdogSec",   config_parse_usec,         0, &arg_shutdown_watchdog   },
                 { "Manager", "CapabilityBoundingSet", config_parse_bounding_set, 0, &arg_capability_bounding_set_drop },
+                { "Manager", "TimerSlackNSec",        config_parse_nsec,         0, &arg_timer_slack_nsec    },
                 { "Manager", "DefaultLimitCPU",       config_parse_limit,        0, &arg_default_rlimit[RLIMIT_CPU]},
                 { "Manager", "DefaultLimitFSIZE",     config_parse_limit,        0, &arg_default_rlimit[RLIMIT_FSIZE]},
                 { "Manager", "DefaultLimitDATA",      config_parse_limit,        0, &arg_default_rlimit[RLIMIT_DATA]},
@@ -1487,6 +1489,10 @@ int main(int argc, char *argv[]) {
         if (arg_running_as == MANAGER_SYSTEM && arg_runtime_watchdog > 0)
                 watchdog_set_timeout(&arg_runtime_watchdog);
 
+        if (arg_timer_slack_nsec != (nsec_t) -1)
+                if (prctl(PR_SET_TIMERSLACK, arg_timer_slack_nsec) < 0)
+                        log_error("Failed to adjust timer slack: %m");
+
         if (arg_capability_bounding_set_drop) {
                 r = capability_bounding_set_drop(arg_capability_bounding_set_drop, true);
                 if (r < 0) {
index 7b9171b8031c9aa87b6fb373b935328e0ca8bf14..c6ba95c212399f69efc2c4eb78d7b8ff0ccc2deb 100644 (file)
@@ -25,6 +25,7 @@
 #RuntimeWatchdogSec=0
 #ShutdownWatchdogSec=10min
 #CapabilityBoundingSet=
+#TimerSlackNSec=
 #DefaultLimitCPU=
 #DefaultLimitFSIZE=
 #DefaultLimitDATA=