阿里云 网络性能调优
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