基于硬件特性的性能调优

举报
XueMian 发表于 2020/10/26 12:28:01 2020/10/26
【摘要】 性能优化四个方向:CPU/内存&网卡&磁盘&应用 编译器性能优化: 指令布局优化:拆分函数代码,按照冷热指令重新排布,提升指令cache命中率内存布局优化:按照内存数据访问频率,组合热数据区域,提升数据cache命中率循环优化:分析循环迭代间数据访存依赖关系,据自动矢量化计算,加速程序运行 JDK性能优化: JIT编译优化,GC内存回收管理优化提升内存管理性能JVM循环、向量化、...

image.png

性能优化四个方向:CPU/内存&网卡&磁盘&应用

image.png

编译器性能优化:

  • 指令布局优化:拆分函数代码,按照冷热指令重新排布,提升指令cache命中率

  • 内存布局优化:按照内存数据访问频率,组合热数据区域,提升数据cache命中率

  • 循环优化:分析循环迭代间数据访存依赖关系,据自动矢量化计算,加速程序运行

JDK性能优化:

  • JIT编译优化,GC内存回收管理优化提升内存管理性能

  • JVM循环、向量化、序列化技术

Nginx绑核优化举例

将Nginx进程分布到各个NUMA node之内,让系统整体的负载比较均衡,按照中断号将中断服务和Nginx绑定在一个NUMA中。性能将会非常明显的提升

image.png

NUMA指的是:非统一内存访问架构

三种NUMA绑核配置方法:

1、使用系统工具numactl设置

Numactl -C 0-15 process name

-C : Core scope

2、在代码中调用亲和性设置参数

Int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t*mask)

3、多数开源软件中提供了配置接口

Nginx.conf文件中worker_cpu_affinity

  • 基于鲲鹏压缩加速库:

    • Gzip

    • Zlib

    • ZSTD

    • Snappy

  • 加解密加速

    • openssl

  • 多媒体加速

    • X.256

    • Ffmpeg

    • HMPP

  • 基础加速

    • Glibc

    • Hyperscan

image.png

加速使能

  • 业务和基础软件库加速使能

  • 内核态硬件加速件使能

针对性性能调优

  • CPU/RAM

    • 调整内存页大小

    • CPU预取

    • 修改线程调度策略

  • 硬盘

    • 脏数据刷新

    • 异步文件操作

    • 文件系统参数

  • 网卡

    • 网卡多队列

    • 开启网卡TSO

    • 开启网卡CSUM

  • 应用

    • 优化编译选项

    • 文件缓存机制

    • 缓存执行结果

    • NEON指令结果

针对以读为主的场景:如大数据读场景。性能约提升10%。减少IO请求数量,减轻CPU压力。

image.png
image.png

image.png

网卡中断的折中是性能调优的重点,如果没有中断会出现数据流失。本质上中断是一种电信号,通过总线把电信号发送给中断控制器。

主存和CPU之间增加高速缓冲存储器的目的是解决CPU和主存之间的速度匹配问题

硬中断:hardirq。由网卡、硬盘等外设产生,主要用来通知操作系统外设状态的变化。比如网卡收到数据包时就会发生一个中断

软中断:softirq。方便网卡做后续操作,网卡轮询软中断队列。从内存拷贝到应用套接字中。应用检测套接字中是否有新增数据。Linux将中断分为两个阶段:上半部和下半部。上半部用来处理中断;下半部用来处理上半部未完成的工作,通常以内核线程的方式运行。
就像收快递,你不确定什么时候配送到你手上,也没有办法了解配送进度。但是配送员是不等人的,到了你没取直接就走人。所以只能苦苦等着。但是你可以和配送员说好“快到了就给我打个电话”,这个电话就相当于是一个中断,只有接到电话时才会产生中断,并产生一个新动作“拿快递”。
所以中断是一种异步事件的处理机制,可以提高系统的并发处理能力。中断会打断其他进程。

可以通过网卡缓存机制(100个数据包再产生中断),但是应用层收到数据包时延也会变高。

高中断==低延迟

低中断==高吞吐

时延、吞吐、并发寻找一个均衡点

中断嵌套:Linux下的硬嵌套是可以嵌套的,但是没有优先级概念;软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

软中断 硬中断
执行中断指令产生 外设引发
指令直接指出,无需中断控制器 中断控制器提供
不可屏蔽 可屏蔽
一种推后执行的机制
下半部
处理程序确保快速完成任务
上半部


查看软中断

proc文件系统是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构,可动态修改内核的配置

查看软中断运行情况

cat /proc/softiqs

查看硬终端运行情况

cat /proc/interrupts

监控&分析&优化

  • 监控

CPU Top|dstat
RAM Numastat|free
硬盘 Iostat blktrace
网卡 Sar|ethtool

  • 分析

CPU Us hi si
RAM Numa_hit mem
硬盘 Iowait util%
网卡 txkB/s tx-usecs

  • 优化

CPU 提高并发(鲲鹏多核)、线程捆绑
RAM 减少跨NUMA访问、大内存页
硬盘 IO调度策略、异步IO
网卡 中断聚合、网卡中断绑核

  • TOP

最常用的Linux性能检测工具之一。监视进程和整体性能。系统自带无需安装

  • Pref

监控进程内的调用情况、资源消耗情况并查找分析热点函数。需要手动安装

Pref top 查看系统中的热点函数
Pref sched record --sleep 1 -p $PID 记录进程在一秒内的系统调用情况
Pref sched latency --sort max 查看上一次记录

Overhead 表示当前事件在所有事件中占比
Shared Object 当前事件生产者,如kernel、pref命令、语言库函数等
Symbol 热点事件对应的函数名称。通过热点函数找到消耗资源多的行为,进行针对性优化

  • Numactl

监控当前NUMA节点配置、状态,可通过改工具将进程绑定在指定的CPU Core,由指定CPU Core运行对应进程。需要手动安装(yum install numactl numactlstat)

Numactl -H 查看当前的NUMA配置
Numactl -C 0-10 ./2333 将应用程序'2333'绑定到0-10 Core
Numastat 查看当前NUMA运行状态

  • Strace:程序调试工具、监控系统调用情况

  • Free:系统使用和空闲资源的内存情况

  • sar:网口网络流量使用情况、系统调用情况、IO、RAM使用情况、进程活动情况等

  • EthTool:网卡状态/驱动版本信息、收发数据信息查询等配置查询

  • Iostat:统计磁盘IO情况、饱和度、使用率等

CacheLine对齐应用层优化可以避免内存伪共享

  • 无锁编程

  • 大锁边小锁

  • 高性能原子操作指令

Google Tcmalloc通过减少内存分配中的锁以提升高并发下的性能

“使用线程缓存,尺寸小于256K的小内存申请均由ThreadCache进行分配;通过TreadCache分配过程中不需要任何锁,可以极大的提高分配速度”

image.png

鲲鹏社区

  • 鲲鹏文档:案例

  • 鲲鹏软件:8+ OS安装包(CentOS Ubuntu等) 200+主流软件

  • 鲲鹏论坛:问题求助、经验分享。专家值班,5分钟相应,普通问题2小时闭环

  • 认证查询:400+鲲鹏计算兼容性认证查询和证书获取

鲲鹏小智:

  • 兼容软件查询:快速获取鲲鹏平台以兼容的软件详细信息以及指导文档及源码下载

  • 镜像包查询:一键获取华为镜像站、mvn仓库中已编译的Jar包及组件rpm包

  • 汇编指令查询:快速获取常用汇编指令,从X86歉意到鲲鹏平台的替换指令,加速代码迁移

  • 经验文档检索

  • 代码迁移工具(Porting Advisor)

    • C/C++源代码文件

    • 汇编源代码文件

    • Makefile文件

    • 准确定位代码修改点以及修改指导

    • 输入

  • 分析扫描工具(Dependency Advisor):

    • 软件安装包(rpm/deb/tar软件包、安装路径)

    • 源码文件(C/C++/JAVA/汇编源代码文件、MakeFile文件)

    • 输入

提升软件移植分析效率和准确率

  • 性能优化工具(Tuning Kit):

    • CPU使用情况,DDR&Cache统计

    • DISK IO/NIC使用情况和质量分析

    • 进程/线程、锁资源占用情况

    • Top热点函数

    • 创建工作任务

    • 配置任务属性参数(分析类型、软件路径、采样率等)

    • 运行软件

    • 输入

    • 分析处理

    • 图形化输出

兼容性查询:1、开源软件 2、商业软件 3、操作系统


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200