性能优化

性能优化的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

posted @ 2026-02-12 10:45  ho966  阅读(40)  评论(0)    收藏  举报