阿里云 网络性能调优

2020-03-01 84浏览

  • 1.⺴⽹网络性能调优分享 阿⾥里云核⼼心系统 鸣嵩 weibo @曹伟-鸣嵩
  • 2.⼤大纲 • ⺴⽹网卡硬件 • Linux⺴⽹网络报⽂文处理 • ⼩小报⽂文性能瓶颈分析 • ⼩小报⽂文性能优化技术 • 协程
  • 3.⺴⽹网卡硬件 • 千兆⺴⽹网卡 • bnx2/tg3/igb • MSI/MSI-X • 多队列/多中断 • RSS
  • 4.• 查看⺴⽹网卡型号 # ethtool -i eth0 ! ! • 查看⺴⽹网卡中断 # cat /proc/interrupts grep "CPU\ eth0"
  • 5.Linux系统接收报⽂文流程 • NIC DMA • 中断处理例程 • softirq • 协议栈处理
  • 6.• 查看软中断 # cat /proc/softirqs grep "CPU\ NET" ! ! • 实时看irq/softirq # mpstat -P ALL 1
  • 7.⺴⽹网络性能指标 • 吞吐量 Mb/s • PPS (packet per second) • 丢包率 • 响应时间 • 资源使⽤用率 cpu, memory, bus, etc
  • 8.优化之前测试带宽 • iperf⼯工具
  • 9.检查各⺴⽹网卡pps • watch ifconfig
  • 10.报⽂文性能开销分析 • • 每个报⽂文固有的开销 • 中断/上下⽂文切换 • 报⽂文header 和报⽂文⻓长度相关的开销 • CRC/Checksum计算
  • 11.⼩小报⽂文理论上的瓶颈
  • 12.
  • 13.
  • 14.提⾼高⼩小报⽂文性能 • • Packet polling • 不使⽤用⺴⽹网卡中断 • Linux NAPI • 20-25%性能提升 不使⽤用TCP/UDP,私有协议,2层数据包
  • 15.⺴⽹网络框架层合并⼩小报⽂文 • 应⽤用层传递⼩小报⽂文到框架(异步/协程) • 框架缓存⼩小报⽂文,延迟批量发出 • 框架层I/O线程 • • 与应⽤用层线程的cpu affinity保持⼀一致 • 压缩 LZ4/Snappy Tradeoff 延迟v.s.吞吐量
  • 16.协程 • ucontext实现 • ⼤大量sigprocmask调⽤用 • spin lock in kernel • 多线程下性能较差
  • 17.• setjmp/longjmp • • 构造jmpbuf复杂 • • 没有系统调⽤用和锁,性能⾼高 参考”Portable Multithreading The Signal Stack Trick For User-Space Thread Creation” Trick • 利⽤用ucontext进⼊入协程,setjmp获得jmpbuf
  • 18.Thanks