首页 > 解决方案 > 如何在不使用 grub 的情况下设置 Linux init 进程关联?

问题描述

我们的应用程序可以在 ramfs 机器上运行在各种架构上。它需要为极快的处理设置核心隔离和亲和性。根据架构,它可能需要固定到 numa 0 或 numa 1 上的超线程。在机器启动之前,我们无法做出假设。

由于这种多样性,我们无法在 grub 中设置隔离参数。配置 grub 后重新启动也无济于事,因为这是一台 ramfs 机器。

我们如何在启动期间对 systemd 产生的所有用户态进程进行任务设置?我知道我可以在调用 systemd 时自行设置任务,但我找不到发生这种情况的位置。

标签: linuxsystemdaffinity

解决方案


我终于让事情正常工作了。方法如下:

  1. 在您所在位置的路径上创建一个脚本。我命名为 mine set-system-affinity.sh。其内容应包括:

    #!/bin/bash
    sed -i '/CPUAffinity/c\CPUAffinity=<whatever cpus should be configured>' /etc/systemd/system.conf
    systemctl daemon-reexec
    
  2. /etc/systemd/system. 我命名为 mine set-affinity.service

  3. 配置服务如下:

    [Unit]
    Before=systemd-sysctl.service
    DefaultDependencies=no
    
    [Service]
    Type=oneshot
    ExecStart=/the/path/to/your/script/set-system-affinity.sh
    
    [Install]
    WantedBy=sysinit.target
    
  4. 执行sudo systemctl enable set-affinity.service

如果您像我一样运行 ramfs 系统,则需要将这些脚本作为引导期间加载的映像的一部分,并在映像中以某种方式启用该服务。

如何使用 SYSTEMD 尽早启动服务


推荐阅读