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