• 少资源
  • 高吞吐
  • 低延迟

在具体网络转发性能优化过程中对性能优化有以下几点体会与总结:

软硬结合

软件灵活,硬件高效,软硬结合就像双剑合壁,威力巨大;具体在网络设备中交换机就是一个很好的例子:通常由CPU完成协议的处理,下发转发表项到芯片,由芯片完成报文的转发,在这种思路下才会cisco,H3C,Huawei的大容量的交换机;如果完全交给CPU来处理成本很高,而且在现有技术下很难完成那么大的交换容量(1T以上)。在这种情况对于软件上来说基本不需要优化,本文后面的优化是针对软转的优化;

分离与分解

控制与转发分离 由控制平面维护转发表项,转发平面根据表项完成转发

针对性优化

性能优化一定要指定优化场景,例如对于收包优化针对不同的接入方式,不同报文类型;

快慢结合,先慢后快

对于交换机与路由机这种网络转发设备,通过首包建流,后续报文匹配流实现快慢结合提高报文转发效率;

缓存

缓存大法好,在现在各种系统与应用中缓存无处不在,硬件上看,有硬盘缓存,RAID卡缓存,存储缓存,主存,NUMA特性,CPU cache;软件架构上看,有全局数据缓存,私有数据缓存,连接池,应用服务器缓存,WEB服务器缓存,CDN缓存,客户端文件缓存,客户端内存缓存等等。

do more with less

性能优化大体就是开源与节流,do more with less需要考虑如何提高cpu,存储,网络的利用效率

预处理

兵马未动粮草先行 例如在报文发送针对不同流准备相应的链路层头,避免发送报文再逐字段填充,作到一次性完成报文贴头处理;其实很多应用系统的线程池,内存池,连接池等也是类似思想

二八原则

主要体现如下:

  1. 对于优化的代码,集中精力优化是关键20%的代码
  2. 在具体的系统性能优化过程刚开始投入20%可以使取得整个优化成果的80%,而最后的20%需要花费80%的时间来完成,而且涉及的挑战会更多,更有难度,所以优化过程越到后面越难,需要良好的心态与意志

无profile,不优化

If you can’t measure it, you can’t improve it。若无度量,则无提高。优化一定要有一套profile方法,profile以下几个方面的作用:

  1. profile建立一个性能基线,有利于优化过程中比较与参考
  2. profile查找系统的瓶颈,在一个大型的系统查找到性能瓶颈是一件很有挑战的事情,通过profile有利于快速定位瓶颈
  3. profile评估优化结果,对每一个优化点有一个数字化清晰的记录
  4. profile指导优化的方向

避免过度优化

在性能优化过程中切忌一味追求性能,忽略了业务,没有关注优化对系统带来的哪些不好影响,例如:

  1. 优化使系统变得更复杂,不利于维护
  2. 优化影响了其他业务
  3. 优化忽略了业务功能(功能正确性,功能可扩展性等等)
  4. 优化只是特定环境下数据提升并不适用具体应用

减少状态的改变

在报文处理与协议处理过程中设计更精简的状态机,避免过多的状态变化处理的开销。

避免代码的黑盒

避免代码的黑盒,主要有下面几点:

1.优化过程忽略部分代码,导致这一部分代码未能出现优化对象中

2.虽然考虑了所有该关注的代码,但是没有理解代码,特别这一部分代码涉及跨团队,个人经验:这一部分代码需要重点关注,往往有意想不到的收获

总之,性能优化需要充分理解业务,根据数据,实现硬件,系统,业务三者最佳协同。