]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pid1: add new kernel cmdline arg systemd.cpu_affinity=
authorLennart Poettering <lennart@poettering.net>
Tue, 26 Nov 2019 08:46:00 +0000 (09:46 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 4 Dec 2019 09:28:43 +0000 (10:28 +0100)
Let's allow configuration of the CPU affinity via the kernel cmdline,
overriding CPUAffinity= in /etc/systemd/system.conf

Prompted by:

https://lists.freedesktop.org/archives/systemd-devel/2019-November/043754.html

man/kernel-command-line.xml
src/core/main.c

index 848f5ec4435e36c68e2797335b728081bd13cb4b..40a23218604d50f76bb271102841c74dd88ea175 100644 (file)
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>systemd.cpu_affinity=</varname></term>
+
+        <listitem>
+          <para>Overrides the CPU affinity mask for the service manager and the default for all child
+          processes it forks. This takes precedence over <varname>CPUAffinity=</varname>, see
+          <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+          for details.</para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>modules_load=</varname></term>
         <term><varname>rd.modules_load=</varname></term>
index c24b696b1663951232e614be1300ae338a191b44..b0a55f8cb8e3daf00db9f633e53d5bdcc432f887 100644 (file)
@@ -475,6 +475,15 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (arg_default_timeout_start_usec <= 0)
                         arg_default_timeout_start_usec = USEC_INFINITY;
 
+        } else if (proc_cmdline_key_streq(key, "systemd.cpu_affinity")) {
+
+                if (proc_cmdline_value_missing(key, value))
+                        return 0;
+
+                r = parse_cpu_set(value, &arg_cpu_affinity);
+                if (r < 0)
+                        log_warning_errno(r, "Faile to parse CPU affinity mask '%s', ignoring: %m", value);
+
         } else if (proc_cmdline_key_streq(key, "systemd.watchdog_device")) {
 
                 if (proc_cmdline_value_missing(key, value))