鲲鹏性能优化十板斧
鲲鹏性能优化十板斧
相关文章
「鲲鹏软件性能调优基础知识」之「基于硬件特性的性能调优方向」
【转载】主流CPU性能比较(Hygon7280、Intel、AMD、鲲鹏920、飞腾2500)
相关书籍
鲲鹏处理器 NUMA 简介
随着现代社会信息化、智能化的飞速发展,越来越多的设备接入互联网、物联网、车联网,从而催生了庞大的计算需求。但是功耗墙问题以功耗和冷却两大限制极大地影响了单核算力的发展。为了满足智能世界快速增长的算力需求,多核架构成为最重要的演进方向。
传统的多核方案采用的是SMP(Symmetric Multi-Processing)技术,即对称多处理器结构,如图1所示。在对称多处理器架构下,每个处理器的地位都是平等的,对内存的使用权限也相同。任何一个程序或进程、线程都可以分配到任何一个处理器上运行,在操作系统的支持下,可以达到非常好的负载均衡,让整个系统的性能、吞吐量有较大提升。但是,由于多个核使用相同的总线访问内存,随着核数的增长,总线将成为瓶颈,制约系统的扩展性和性能。
图1 对称多处理器SMP架构
鲲鹏处理器支持NUMA (Non-uniform memory access,非统一内存访问)架构,能够很好的解决SMP技术对CPU核数的制约。NUMA架构将多个核结成一个节点(Node),每一个节点相当于是一个对称多处理机(SMP),一块CPU的节点之间通过On-chip Network通讯,不同的CPU之间采用Hydra Interface实现高带宽低时延的片间通讯,如图2所示。在NUMA架构下,整个内存空间在物理上是分布式的,所有这些内存的集合就是整个系统的全局内存。每个核访问内存的时间取决于内存相对于处理器的位置,访问本地内存(本节点内)会更快一些。Linux内核从2.5版本开始支持NUMA架构,现在的操作系统也提供了丰富的工具和接口,帮助我们完成就近访问内存的优化和配置。所以,使用鲲鹏处理器所实现的计算机系统,通过适当的性能调优,既能够达成很好的性能,又能够解决SMP架构下的总线瓶颈问题,提供更强的多核扩展能力,以及更好更灵活的计算能力。
图2 NUMA架构
性能调优五步法
性能优化通常可以通过如表1五个步骤完成。表1 性能优化的通用步骤
| 序号 | 步骤 | 说明 |
| 1 | 建立基准 | 在进行优化或监视之前,建立基准数据和优化目标 是关键。基准包括: - 硬件配置、组网、测试模型 - 系统运行数据(CPU/内存/IO/网络吞吐/响应延时等) 对系统进行全面评估和监控,分析性能瓶颈,观察优化效果变化。 ⚠️ 注意:优化初期容易见效,后期优化难度增加,需找到合理的平衡点。 |
| 2 | 压力测试与监视瓶颈 | 使用 峰值工作负载 或 专业压力测试工具 对系统施压,同时使用性能监视工具观察状态: - 记录 系统和程序运行状态,包括历史数据。 🔍 详细记录 是分析瓶颈和验证优化有效性的重要依据。 |
| 3 | 确定瓶颈 | 压力测试和监视的核心是 找出系统瓶颈,常见表现有: - CPU 过于繁忙 - IO 等待 - 网络等待 ⚠️ 注意:瓶颈分析需覆盖整个测试系统,包括工具、组网、网络带宽等。很多性能问题可能源于被忽视的测试环节。 |
| 4 | 实施优化 | 根据瓶颈分析结果,制定并实施优化措施: - 优化过程需 准备回滚方案,避免因负优化造成不可逆的影响。 - 系统调优是一个反复试验的过程,需慎重执行。 🎯 记住:不是所有优化措施都能产生正面效果,负优化时有发生。 |
| 5 | 确认优化效果 | 优化后 重新启动压力测试,监视系统状态以确认效果: - 负优化:及时回滚并调整方案。 - 正优化:未达目标时重复步骤 2~4,达到目标后: 1. 总结 有效优化措施和参数 2. 归档优化成果,为 后续生产版本发布 做准备。 |
在性能调优经验比较少或者对系统的软硬件并不是非常了解时,可以参考使用五步法的模式逐步展开性能调优的工作。对于有丰富调优经验的工程师,或者对系统的性能瓶颈已经有深入洞察的专家,也可以采用其他方法或过程展开优化工作。
本文档描述鲲鹏芯片常用的性能优化方法和分析工具。文档分别从CPU与内存子系统,网络子系统,磁盘IO子系统和应用程序优化4个方面阐述了常用的性能优化方法和分析工具,主要适用于执行性能优化的研发工程师和技术支持工程师。
文档目录
1 简介
1.1 鲲鹏处理器 NUMA 简介
1.2 性能调优五步法
2 CPU 与内存子系统性能调优
2.1 调优简介
2.2 常用性能监测工具
• 2.2.1
top工具• 2.2.2
perf工具• 2.2.3
numactl工具
2.3 优化方法
• 2.3.1 修改 CPU 的预取开关
• 2.3.2 调整定时器机制,减少不必要的时钟中断
• 2.3.3 调整线程并发数
• 2.3.4 NUMA 优化,减少跨 NUMA 访问内存
• 2.3.5 调整内存页的大小
• 2.3.6 修改内存刷新速率
3 网络子系统性能调优
3.1 调优简介
3.2 常用性能监测工具
• 3.2.1
ethtool工具• 3.2.2
strace工具
3.3 优化方法
• 3.3.1 PCIe Max Payload Size 大小配置
• 3.3.2 网络 NUMA 绑核
• 3.3.3 中断聚合参数调整
• 3.3.4 开启 TSO
• 3.3.5 开启 LRO
• 3.3.6 使用
epoll代替select• 3.3.7 单队列网卡中断散列
• 3.3.8 TCP checksum 优化
• 3.3.9 内核 CRC32 优化
• 3.3.10
tuned配置选择
4 磁盘 IO 子系统性能调优
4.1 调优简介
4.2 常用性能监测工具
• 4.2.1
iostat工具• 4.2.2
blktrace工具
4.3 优化方法
• 4.3.1 调整脏数据刷新策略,减小磁盘的 IO 压力
• 4.3.2 调整磁盘文件预读参数
• 4.3.3 优化磁盘 IO 调度方式
• 4.3.4 文件系统参数优化
• 4.3.5 使用异步文件操作 (
libaio) 提升系统性能
5 应用程序调优
5.1 调优简介
5.2 优化方法
• 5.2.1 优化编译选项,提升程序性能
• 5.2.2 文件缓冲机制选择
• 5.2.3 执行结果缓存
• 5.2.4 减少内存拷贝
• 5.2.5 锁优化
• 5.2.6 使用
jemalloc优化内存分配• 5.2.7 Cacheline 优化
• 5.2.8 原子操作多核场景优化
• 5.2.9 热点函数优化
• 5.2.9.1 NEON 指令加速
• 5.2.9.2 软件预取
• 5.2.9.3 循环优化
• 5.2.9.4 数据布局优化
• 5.2.9.5 内联函数
• 5.2.9.6 OpenMP 并行化
• 5.2.9.7 SHA256 优化
• 5.2.9.8 乘除法优化
• 5.2.9.9 循环不变代码外提
• 5.2.10 毕昇编译选项优化
• 5.2.11 鲲鹏数学库
• 5.2.12 并行 IO
6 JVM 性能调优
6.1 调优简介
6.2 常用性能监测工具
• 6.2.1
jstat工具• 6.2.2
jmap工具
6.3 JVM 原理及配置建议
• 6.3.1 尽量使用高版本 JDK
• 6.3.2 设置 JVM 堆空间大小
• 6.3.3 选择合适的垃圾回收器
6.4 优化调优方法
• 6.4.1 GC 分析优化
• 6.4.2 JVM 线程优化
• 6.4.3 调整线程堆栈大小
附录
• A
libaio实现参考• B 进入 BIOS 界面
• C NEON
lib库应用加速• D Linux 内核态 CRC32 算法优化
• E 操作系统内核源码编译
• F 常用操作系统内存参数说明
• G 修订记录
文档地址
| 类型 | 链接 |
| 在线文档 | https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0002.html |
| PDF 文档 | https://www.hikunpeng.com/doc_center/source/zh/perftuning/tuningtip/%E9%B2%B2%E9%B9%8F%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%8D%81%E6%9D%BF%E6%96%A7.pdf |