CPU隔离主要是为了确保关键进程获得更高的性能,减少干扰。常见的隔离方法有cgroups、taskset、isolcpus内核参数,还有实时内核(PREEMPT RT)配置。还有CPU亲和性、IRQ屏蔽技术。
isolcpus
:在启动内核时隔离某些CPU核心,防止普通进程使用。但需要结合cgroups或taskset来分配进程到隔离核心。nohz_full
:在隔离核心禁用时钟中断(Tickless 模式)。rcu_nocbs
:将 RCU 回调任务移出隔离核心。
修改内核启动参数
主要参数:ioslcpus=? nohz_full=? rcu_nocbs=?
例:
earlycon console=tty console=ttyS0,115200 isolcpus=1,2 nohz_full=1,2 rcu_nocbs=1,2 acpi=off rdinit=/sbin/init rootdelay=5 root=/dev/sda1
通过GRUB配置
|
|
修改完成后更新GRUB配置:sudo update-grub
设置进程CPU亲和性
|
|
IgH EtherCAT驱动设置CPU亲和性
在脚本中添加启动参数run_on_cpu=?
,例:
|
|
设置ECMC线程的CPU亲和性
|
|
进一步的调优可将其他 CPU 密集型线程移动到专用内核,例如:EPICS 线程 cbLow
。
|
|
cbLow
在 iocInit
创建,因此epicsThreadSetAffinity
必须使用afterInit
命令执行。
还可以使用 EPICS 模块 MCoreUtils 中的工具设置CPU亲和性。
参考