第 7 章 RHEL for Real Time 中的关联性
实时,系统中的每个线程和中断源都具有处理器关联属性。操作系统调度程序使用此信息来确定要在哪个 CPU 上运行哪些线程和中断。
实时中的 Affinity 代表位掩码,掩码中的每个位代表一个 CPU 内核。如果位设置为 1,则线程或中断可在该内核上运行;如果 0,则线程或中断不包括在内核上运行。关联性位掩码的默认值是所有的,这意味着线程或中断可以在系统中的任何内核上运行。
默认情况下,进程可以在任何 CPU 上运行。但是,可以通过更改进程的关联性来指示在预先选择的 CPU 上运行进程。子进程继承其父进程的 CPU 相关性。
一些更典型的关联性设置包括:
- 为所有系统进程保留一个 CPU 内核,并允许应用程序在剩余内核中运行。
-
允许同一 CPU 上的线程应用程序和给定内核线程(如网络
softirq
或驱动程序线程)。 - 每个 CPU 上的对制作者和消费者线程。
关联性设置必须与 程序一起设计,才能实现良好的行为。
7.1. 处理器关联性 复制链接链接已复制到粘贴板!
默认情况下,进程可以实时运行任意 CPU。但是,您可以通过更改进程的关联性,将进程配置为在预先确定的 CPU 上运行。子进程继承其父进程的 CPU 相关性。
在系统中调优操作的实际情况是确定运行应用程序所需的内核数量,然后隔离这些内核。这可以通过 Tuna 工具来实现,也可以使用 shell 脚本修改位掩码值。
taskset
命令可用于更改进程的关联性,并修改 /proc/
filesystem 条目会更改中断的关联性。使用带有 -p
或 --pid
选项的 taskset
命令和进程的进程标识符(PID)检查进程的关联性。
-c
或 --cpu-list
选项显示内核的数字列表,而不是位掩码。可以通过指定要绑定特定进程的 CPU 数量来设置关联性。例如,对于之前使用 CPU 0 或 CPU 1 的进程,您可以更改关联性,使其只能在 CPU 1 上运行。除了 taskset
命令外,您还可以使用 sched_setaffinity ()
系统调用来设置处理器关联性。