linux - 如何在不使用 grub 的情况下设置 Linux init 进程关联?
问题描述
我们的应用程序可以在 ramfs 机器上运行在各种架构上。它需要为极快的处理设置核心隔离和亲和性。根据架构,它可能需要固定到 numa 0 或 numa 1 上的超线程。在机器启动之前,我们无法做出假设。
由于这种多样性,我们无法在 grub 中设置隔离参数。配置 grub 后重新启动也无济于事,因为这是一台 ramfs 机器。
我们如何在启动期间对 systemd 产生的所有用户态进程进行任务设置?我知道我可以在调用 systemd 时自行设置任务,但我找不到发生这种情况的位置。
解决方案
我终于让事情正常工作了。方法如下:
在您所在位置的路径上创建一个脚本。我命名为 mine
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
. 我命名为 mineset-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 系统,则需要将这些脚本作为引导期间加载的映像的一部分,并在映像中以某种方式启用该服务。
推荐阅读
- javascript - JavaScript 将 namedNodeMap 转换为字符串
- docker - 如何从主机访问 Docker 容器的内部 IP 地址?
- ios - GeoFirestore 返回太多结果
- dart - 我将如何抵消 24 小时的时间范围以从当前时间开始并在 24 小时后结束
- node.js - Gulp-sass 在我的编辑器保存 2 或 3 次后给出错误
- angular - Angular 5 - 自定义管道“找不到”错误
- javascript - 如何在javascript中填充多维数组?
- c++ - 如果每个线程都有自己的只读数组副本,线程会更快吗
- java - java8 中 java.util.stream 包的不完整文档
- graphql - 如何为事件、团队和成员的关系定义架构