《吴晓飞_高性能CC++系统性能优化 从理论到实践.pdf》由会员分享,可在线阅读,更多相关《吴晓飞_高性能CC++系统性能优化 从理论到实践.pdf(44页珍藏版)》请在三个皮匠报告上搜索。
1、高性能高性能C/C+C/C+系统性能优化:从理论到实践系统性能优化:从理论到实践PolarDBPolarDB TPCCTPCC登顶性能优化登顶性能优化阿里云RDS MySQL内核负责人吴晓飞目 录CONTENTS1.性能优化的理论支持2.性能分析的工具支持3.性能优化实战以PolarDB TPCC为例性能优化的理论支持1.学会“抓重点”Amdahl定律(Amdahls Law)系统整体加速受限于不可并行部分的比例S=1 1 +其中 是可并行部分比例,是并行资源数量。a、提升可并行区并行度及并行效率,将资源尽可能充分利用b、降低串行区比例,减少系统瓶颈区性能优化的理论支持1.学会“抓重点”90/
2、10 法则 程序 90%的时间可能花在 10%的代码上。a、应当执行“测量先行,再优化”策略,避免过早优化b、优化应当着眼于“热点(hot)”路径性能优化的理论支持2.清楚硬件的底层逻辑 Memory Hierarchy CPU 缓存 内存 (磁盘/网络)“越靠近 CPU 的存储越快、越小、越贵;越远离 CPU 的存储越慢、越大、越便宜”层级典型延迟(Latency)带宽(Bandwidth)容量对程序优化的影响寄存器(Registers)0 cycles极高几十几百字节编译器自动优化,尽量让热点变量驻留寄存器L1 Cache14 ns(14 cycles 3GHz)150 GB/s64-51
3、2 KB/core数据局部性、对齐、避免 false sharingL2 Cache10 ns50100 GB/s256 KB16 MB/core预取、循环展开、减少跨 cache line 访问L3 Cache(共享)2050 ns4080 GB/s8512 MB(多核共享)多线程数据布局避免争用主存(DRAM)60120 ns2060 GB/s(DDR4/5)GB 级避免频繁分配/释放、使用内存池SSD(NVMe)10100 s18 GB/sTB 级I/O 是瓶颈时,需异步、多线程、批量、提升缓存性能优化的理论支持2.清楚硬件的底层逻辑 Memory Hierarchy CPU 缓存 内存
4、 (磁盘/网络)每个核心有有限寄存器(如 x86-64 有 16 个通用寄存器)。指令流水线(Pipeline)、超标量(Superscalar)、乱序执行(OoO)提升吞吐。批量指令向量化(SIMD)执行小循环、简单计算更容易被完全寄存器化。避免过多局部变量或复杂控制流阻碍寄存器分配。大部分依赖编译器、优化器进行底层优化(Compiler、LTO、PGO)性能优化的理论支持2.清楚硬件的底层逻辑 Memory Hierarchy CPU 缓存 内存 (磁盘/网络)缓存行(Cache Line):常 64 字节,一次加载整 cache line。缓存未命中(Miss)类型:Cold Miss(
5、首次访问)Capacity Miss(容量不足)Conflict Miss(映射冲突)写策略:Write-Through vs Write-Back(常见)。伪共享(False Sharing):不同线程修改同一 cache line 中不同变量 频繁无效化 性能下降。多线程性能优化的核心战场,提升局部性、降低冲突性、结构体优化等等。性能优化的理论支持2.清楚硬件的底层逻辑 Memory Hierarchy CPU 缓存 内存 (磁盘/网络)DRAM 访问非均匀(NUMA 架构下,远程内存更慢)。内存带宽有限,带宽瓶颈常出现在大数据拷贝场景。有效带宽受访问模式影响(顺序 随机)避免不必要的内存
6、拷贝(使用 move 语义、span/view)。使用内存池(Memory Pool)减少 new/delete 开销和碎片。NUMA 感知分配(如 numactl 或 libnuma)。内存通道交错并联,提升吞吐利用率。性能优化的理论支持2.清楚硬件的底层逻辑 Memory Hierarchy CPU 缓存 内存 (磁盘/网络)延迟 vs 吞吐:磁盘/网络以延迟为主导(尤其是小I/O)。SSD 随机读写远优于 HDD,但仍比内存慢数百倍以上。大规模 raid 阵列下吞吐极限高,单不易实现IO 的充分利用和异步化使用异步逻辑,避免在热路径中进行请求。批量多线程处理、考虑压缩、缓存中间结果等。性