测试实时性内核参数配置
关键内核配置选项
在内核配置中(通过make menuconfig
或make nconfig
),需调整以下选项:
通用实时性配置
-
CONFIG_PREEMPT_RT
启用实时抢占(Real-Time)模式(打补丁后才会出现此选项)。 -
CONFIG_PREEMPT
替换为完全实时抢占模式:-
CONFIG_PREEMPT_NONE
→ 无抢占(服务器场景)。 -
CONFIG_PREEMPT_VOLUNTARY
→ 自愿抢占(桌面场景)。 -
CONFIG_PREEMPT
→ 完全抢占(实时性基础)。
-
-
CONFIG_HZ_1000
将系统时钟频率(HZ)设为1000Hz,降低调度延迟。 -
CONFIG_NO_HZ_FULL
启用自适应无滴答模式(减少CPU干扰)。
中断和锁配置
-
CONFIG_IRQ_FORCED_THREADING
强制中断线程化(关键选项,允许大部分中断作为内核线程运行)。 -
CONFIG_PREEMPT_RCU
RCU(Read-Copy-Update)启用抢占支持。 -
CONFIG_HIGH_RES_TIMERS
高精度定时器(必需选项)。
调试与性能权衡
-
CONFIG_LATENCYTOP
跟踪系统延迟来源(调试用)。 -
CONFIG_DEBUG_PREEMPT
抢占调试(可能增加开销)。 -
CONFIG_SCHEDSTATS
调度器统计信息(性能分析)。
可选优化
-
CONFIG_MIGRATION_DISABLE
禁用任务迁移(减少CPU切换开销)。 -
CONFIG_SLAB
→CONFIG_SLUB
使用更高效的内存分配器。
1. 进入关键子菜单
在配置界面中,用方向键导航到以下子菜单:
(1)General setup → Kernel Features
-
路径:
General setup
→Kernel Features
-
需修改的选项:
-
Preemption Model
选择Fully Preemptible Kernel (RT)
(打上RT补丁后才会出现此选项)。
替代原选项(如Voluntary
或No Forced Preemption
)。
-
(2)Processor type and features
-
路径:
System Type
→Processor type and features
(具体路径可能因ARM架构略有不同) -
需修改的选项:
-
High Resolution Timer Support
启用CONFIG_HIGH_RES_TIMERS=y
(高精度定时器,必需)。 -
Timer frequency
设置为 1000 Hz(CONFIG_HZ_1000=y
),降低调度延迟。
-
(3)Power management options
-
路径:
Power management options
-
需修改的选项:
-
CPU Frequency scaling
→ 禁用或设为Performance
模式(避免频率切换引入延迟)。 -
Suspend to RAM
→ 建议禁用(CONFIG_SUSPEND=n
,实时系统通常不需休眠)。
-
(4)Kernel Features
-
路径:
Kernel Features
-
需修改的选项:
-
Thread Softirqs
(打RT补丁后出现)
启用CONFIG_PREEMPT_SOFTIRQS=y
(将软中断线程化)。 -
Force threaded interrupts
启用CONFIG_IRQ_FORCED_THREADING=y
(强制中断线程化,关键选项)。
-
2. 其他必要选项
-
搜索功能:
按/
键搜索以下选项并启用:-
CONFIG_PREEMPT_RCU=y
(抢占式RCU) -
CONFIG_NO_HZ_FULL=y
(自适应无滴答模式) -
CONFIG_SLAB=y
→ 改为CONFIG_SLUB=y
(更高效的内存分配器)。
-
3. 验证配置
-
在退出配置前,检查以下选项是否已正确设置:
plaintext
-
CONFIG_PREEMPT_RT=yCONFIG_PREEMPT=yCONFIG_HZ_1000=yCONFIG_IRQ_FORCED_THREADING=yCONFIG_HIGH_RES_TIMERS=y
-
保存配置后,编译内核并测试实时性。
手动编辑配置文件(替代方案)
如果图形界面仍不显示,可直接编辑内核配置文件:
bash
# 在内核源码目录中:make menuconfig # 先保存一次当前配置(生成 .config)nano .config
手动添加以下行:
plaintext
CONFIG_PM_QOS=yCONFIG_PM_QOS_DEFAULT=yCONFIG_CPU_IDLE=n