0x01 缘由
引自:“一个重要的性能优化经验是:绝不应该相信你的“哪些部分会比较慢”直觉,而是应该在实际环境中测量API的真实性能概况,然后把优化精力集中在影响最大的部分。进一步说是,没必要一开始就实现最高效的API:先用一种简单的方式实现,在一切正常工作后,再找出需要优化的部分。”--《C++ API设计》。
在整个3-6月从产品的简单设计,到产品的快速开发,到产品性能的优化,再到模块的规范和代码的规范上。虽然每个环节存在一些不规范的情况,至少在领导高压情况下完成了一个版本的开发,也达到了预期的性能指标。
0x02 优化场景
场景不同,优化手段不同,优化要求也不同。我们的场景如下: 高效的数据包捕获和协议还原(类型xplico,博文其他有介绍)。
处理性能:800Mbps 内存占用: 1G CPU高负载下: 占用不超过30% I/O性能;
0x03 采取的手段
a.valgrid性能热点图;
b.gperftool性能占比图;
c.关键函数消耗时间;
d.top/htop工具情况;
e.python脚本统计;
f.关键函数代码走查优化;
g.查看i/o处占用;
h.队列解耦、缓存;
i.多核编程处理,线程逻辑核绑定;
j.内存池技术处理;
k.tcmalloc优化内存申请、分配;
l.高效的AC匹配算法;
m.自研一些包构造工具;
n.大量的埋点统计;
o.外场实时场景流量分析;
n.大量的埋点统计;
o.外场实时场景流量分析;
0x04 总结
整个过程没有富有经验的同事,都是同事们想方设法,讨论查资料。踩过无数坑,但收获满满。