性能优化
性能优化的3个大致方向:
1、cpu软中断过高
2、系统调用耗时过长
3、锁竞争
处理流程:
1、使用pref对整个系统进行概要分析
# 实时查看系统级性能概览,持续5秒
perf top -g -p $(pidof <你的转发进程名>) # 如果知道特定进程,用-p指定
# 或者监控整个系统
perf top -g
# 录制一段时间(例如10秒)的系统全局性能数据
perf record -g -F 99 -p <PID> -- sleep 10
perf report --stdio
在 perf report 中重点关注:
net_rx_action, net_tx_action, napi_poll: 这些是网络软中断处理函数。如果它们的占比异常高(例如超过20-30%的CPU时间),说明瓶颈可能在内核网络栈的收发包处理上,CPU大部分时间都在处理中断,而不是运行你的业务逻辑。
__softirq_entry: 软中断的总入口。高占比也指向软中断问题。
copy_user_generic_string, memcpy, skb_copy_datagram_iter: 这些是数据拷贝函数。如果占比高,说明大量的CPU时间花在了数据拷贝上,可能是零拷贝优化没做好。
spin_lock, _raw_spin_lock: 如果锁相关的函数占比很高,说明内核中可能存在激烈的锁竞争,限制了多核扩展性
火焰图的生成:
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg
针对系统调用或特性函数,使用perf trace 替代 strace,性能开销更小,专门看系统调用
perf trace -p $(pidof <你的转发进程名>) -T --sleep 5
针对内核锁竞争:
# 使用 perf 分析锁事件(需要内核支持锁事件探测)
sudo perf lock record -a -- sleep 10
sudo perf lock report
# 或者使用动态追踪点
sudo perf record -g -a -e lock:lock_acquire -F 99 -- sleep 5

浙公网安备 33010602011771号