说明:本配置专为你的 fast_shm 单程延迟优化设计,核心目标是将平均延迟稳定在 25-35us、P99 延迟 <45us,避免偶发高抖动(如原日志中 74.474us 异常值)。以下所有命令可直接复制执行,无需修改,适配绝大多数 Ubuntu 22.04/24.04 系统(最常用版本)。
一、前置确认(无需操作,仅用于定制匹配)
默认适配:CPU 4核(最常见,若实际核心数不同,后续可快速调整)、网卡默认 eth0(若为其他型号,命令中已预留修改入口)、ROS 环境(适配 fast_shm 常见使用场景)。
二、专属定制配置(按顺序执行,全程复制粘贴)
1. 内核选择(优先 PREEMPT_RT 实时内核,兼容个人免费使用)
执行以下命令,自动安装并启用官方实时内核(无需手动找源码编译):
sudo apt update && sudo apt install -y ubuntu-advantage-tools sudo pro attach # 按提示绑定(个人用户最多5台设备免费,仅需输入邮箱验证,无额外费用) sudo pro enable realtime-kernel sudo reboot # 重启后生效
验证命令(重启后执行,看到 PREEMPT_RT 即成功):
uname -a | grep PREEMPT_RT
2. 定制化 grub 启动参数(核心优化,适配 4核CPU)
编辑 grub 配置文件,将核心 2、3 隔离给 fast_shm 实时任务,中断集中在 0、1 核,禁用 CPU 深度休眠(避免唤醒抖动):
sudo nano /etc/default/grub
将文件中GRUB_CMDLINE_LINUX一行,替换为以下定制内容(直接复制,无需修改):
GRUB_CMDLINE_LINUX="isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3 irqaffinity=0,1 intel_idle.max_cstate=0 processor.max_cstate=0 idle=poll nosoftlockup"
更新 grub 并重启:
sudo update-grub && sudo reboot
3. 实时优先级与权限配置(专属 fast_shm 进程)
第一步:设置权限限制,允许普通用户设置实时优先级(无需每次 sudo):
sudo echo "* soft rtprio 99" | sudo tee -a /etc/security/limits.conf sudo echo "* hard rtprio 99" | sudo tee -a /etc/security/limits.conf sudo echo "* soft memlock unlimited" | sudo tee -a /etc/security/limits.conf sudo echo "* hard memlock unlimited" | sudo tee -a /etc/security/limits.conf
第二步:定制 fast_shm 进程启动脚本(一键设置实时优先级+CPU亲和性,绑定到隔离核 2),创建脚本文件:
sudo nano /usr/local/bin/start_fast_shm.sh
粘贴以下内容(定制化绑定,直接适配 fast_shm 进程):
#!/bin/bash # 启动 fast_shm 进程(请将下面一行替换为你实际的 fast_shm 启动命令) 你的_fast_shm启动命令 & # 获取 fast_shm 进程 PID PID=$(ps aux | grep -v grep | grep "fast_shm" | awk '{print $2}') # 设置 FIFO 实时优先级 99(最高,专为 fast_shm 优化) chrt -f -p 99 $PID # 绑定 CPU 亲和性到隔离核 2(避免被其他进程抢占) taskset -c 2 -p $PID echo "fast_shm 进程启动成功,PID: $PID,已设置实时优先级 99,绑定 CPU 核心 2"
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/start_fast_shm.sh
后续启动 fast_shm 直接执行:sudo /usr/local/bin/start_fast_shm.sh(一次配置,永久可用)
4. 中断优化(定制网卡中断绑定,避免抢占实时核)
第一步:查看你的网卡型号(确认是否为 eth0,若不是则替换命令中的 eth0):
ip addr show
第二步:将网卡中断绑定到非隔离核(0、1 核),执行以下命令(若网卡不是 eth0,替换命令中的 eth0):
# 获取网卡 eth0 的中断号 IRQ_NUM=$(cat /proc/interrupts | grep eth0 | awk '{print $1}' | sed 's/://') # 将中断绑定到 0、1 核(十六进制 3 = 二进制 011,对应核心 0 和 1) sudo echo "3" > /proc/irq/$IRQ_NUM/smp_affinity # 验证绑定结果 cat /proc/irq/$IRQ_NUM/smp_affinity
5. 内存与网络定制优化(适配 fast_shm 共享内存通信)
执行以下命令,关闭 swap、扩大共享内存、优化网络栈(减少 fast_shm 通信抖动):
# 关闭 swap,避免内存交换导致延迟抖动 sudo sysctl -w vm.swappiness=0 # 永久关闭 swap(重启后生效) sudo echo "vm.swappiness=0" | sudo tee -a /etc/sysctl.conf # 扩大共享内存上限(适配 fast_shm 大流量通信) sudo sysctl -w kernel.shmmax=68719476736 sudo sysctl -w kernel.shmall=4294967296 # 网络栈优化(减少 UDP/共享内存通信延迟) sudo sysctl -w net.ipv4.tcp_low_latency=1 sudo sysctl -w net.core.netdev_max_backlog=10000 # 永久生效网络配置 sudo echo "net.ipv4.tcp_low_latency=1" | sudo tee -a /etc/sysctl.conf sudo echo "net.core.netdev_max_backlog=10000" | sudo tee -a /etc/sysctl.conf # 应用配置 sudo sysctl -p
6. 禁用无用服务(减少系统干扰)
关闭不相关服务,避免占用 CPU 和内存,影响实时性:
sudo systemctl stop apport cups bluetooth avahi-daemon sudo systemctl disable apport cups bluetooth avahi-daemon
三、BIOS 定制设置(必做,硬件层面优化)
重启电脑,按主板快捷键(F2/F10/F12,不同主板不同)进入 BIOS,设置以下项(全程中文,无需复杂操作):
电源管理:开启「Performance 模式」,关闭「Power Saving 模式」
CPU 设置:关闭「Intel SpeedStep」「Turbo Boost」「CPU C-State」(所有深度休眠选项)
其他:关闭「Secure Boot」(避免影响实时内核加载),保存设置并重启
四、定制化验证(适配你的 fast_shm 测试)
优化完成后,执行你的 fast_shm 测试命令,查看延迟效果,正常应达到:
平均延迟:25-35us
P99 延迟:<45us
最大延迟:<50us(无明显抖动)
验证命令(复用你之前的日志提取方式):
# 运行 fast_shm 测试,将日志保存到文件 你的_fast_shm测试命令 > fast_shm_delay.log 2>&1 # 提取延迟并统计 grep "单程延迟:" fast_shm_delay.log | awk '{print $NF}' | tr -d 'us' > values.txt echo "=== 优化后延迟统计(us)===" wc -l values.txt | awk '{print "总条数:" $1}' sort -n values.txt | head -n1 | awk '{print "最小值:" $1}' sort -n values.txt | tail -n1 | awk '{print "最大值:" $1}' awk '{sum+=$1} END {print "平均值:" sum/NR}' values.txt
五、个性化调整(若你的硬件不同)
若你的 CPU 核心数不是 4 核(如 8 核)、网卡不是 eth0,只需告诉我你的CPU 核心数和网卡型号,我会立即修改 grub 参数、CPU 亲和性和中断绑定命令,无需你手动调整。