我们的应用程序可以在ramfs机器上的各种体系结构上运行。 它需要设置核心隔离度和亲和力,以实现极快的处理。 根据体系结构的不同,可能需要将其固定到numa 0或numa 1上的超线程。在机器启动之前,我们无法做任何假设。
由于这种多样性,我们无法在grub中设置隔离参数。配置grub后重新引导也无济于事,因为这是ramfs计算机。
如何在启动过程中任务集systemd生成的所有用户级进程?我知道我可以在调用taskd systemd本身时对它进行任务集设置,但是我找不到发生这种情况的地方。
答案 0 :(得分:0)
如何在启动过程中任务集systemd生成的所有用户级进程?
用于服务,套接字,安装点和交换设备的单元配置文件共享配置选项的子集,这些选项定义了生成的进程的执行环境。
CPUAffinity =
控制已执行进程的CPU关联性。获取由空格或逗号分隔的CPU索引或范围的列表。 CPU范围由下限和上限CPU索引指定,并用短划线分隔。可以多次指定此选项,在这种情况下,将合并指定的CPU亲和力掩码。如果分配了空字符串,则掩码将被重置,在此之前的所有分配都将无效
或者,创建一个systemd单元来创建您的拓扑配置文件并终止。使其他服务单元依赖于该服务单元,以便它们在创建拓扑配置之后启动。然后,使您的服务读取拓扑文件,并在启动时相应地设置cpuset和关联(可以通过包装脚本来完成)。
答案 1 :(得分:0)
我终于让一切正常。方法如下:
在您所在位置的路径上创建脚本。我命名为set-system-affinity.sh
。其内容应包括:
#!/bin/bash
sed -i '/CPUAffinity/c\CPUAffinity=<whatever cpus should be configured>' /etc/systemd/system.conf
systemctl daemon-reexec
在/etc/systemd/system
上创建服务文件。我命名为set-affinity.service
。
按如下方式配置服务:
[Unit]
Before=systemd-sysctl.service
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/the/path/to/your/script/set-system-affinity.sh
[Install]
WantedBy=sysinit.target
执行sudo systemctl enable set-affinity.service
如果您正在像我一样运行ramfs系统,则需要将这些脚本作为引导过程中加载的映像的一部分,并以某种方式在该映像中启用该服务。