此图像的alt属性为空;文件名为image-33-1024x724.png

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

: 存 储 器 
外 存 槠 器 
内 存 储 器 
输 出 没 备 
输 入 没 备 
运 算 器 
控 制 器 
CPU 
一 一 一 ” 为 数 据 流 一 
制 流

编译器性能优化:

  • 指令布局优化:拆分函数代码,按照冷热指令重新排布,提升指令cache命中率
  • 内存布局优化:按照内存数据访问频率,组合热数据区域,提升数据cache命中率
  • 循环优化:分析循环迭代间数据访存依赖关系,据自动矢量化计算,加速程序运行

JDK性能优化:

  • JIT编译优化,GC内存回收管理优化提升内存管理性能
  • JVM循环、向量化、序列化技术

Nginx绑核优化举例

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

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
Web 
jai* 
os 
jai* 
OpenSSL 
core 
Die 
10 Die 
IPP 
Gzip/zlib/ 
snappy/ZSTD 
Linux* 
neon?Bé 
ZIP 
GZIP 
Die 
HPRE 
Ceph 
glibc 
RDÉ 
EC 
mysql 
SPDK 
neon?Eé 
SEC

加速使能

  • 业务和基础软件库加速使能
  • 内核态硬件加速件使能

针对性性能调优

  • CPU/RAM
    • 调整内存页大小
    • CPU预取
    • 修改线程调度策略
  • 硬盘
    • 脏数据刷新
    • 异步文件操作
    • 文件系统参数
  • 网卡
    • 网卡多队列
    • 开启网卡TSO
    • 开启网卡CSUM
  • 应用
    • 优化编译选项
    • 文件缓存机制
    • 缓存执行结果
    • NEON指令结果

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

Command: Get AS Bs c s D Value 
Cache
Command: Get AS Bs c s D Value 
Cache
中 断 产 生 的 频 率 高 会 消 耗 
大 量 的 CPU 时 间 片 · 
网 卡 驱 动 
4 、 生 成 软 中 断 
packet 
网 卡 
CPU 
socket 
中 断 产 生 的 频 率 低 会 影 响 
应 用 收 到 数 据 的 时 延 。 
5 、 软 中 断 将 数 写 入 
了 接 字 
7 、 从 0 接 字 中 馭 出 数 
So 用 RQ thread 
6 、 应 用 陧 获 
馭 CPU 时 闾 片 
APP

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

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

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

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

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

高中断==低延迟

低中断==高吞吐

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

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

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


查看软中断

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

查看软中断运行情况

cat /proc/softiqs

查看硬终端运行情况

cat /proc/interrupts

监控&分析&优化

  • 监控
CPUTop|dstat
RAMNumastat|free
硬盘Iostat blktrace
网卡Sar|ethtool
  • 分析
CPUUs hi si
RAMNuma_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分配过程中不需要任何锁,可以极大的提高分配速度”

Virtual 
Memory 
PageHeap 
span list I 
span list 2 
span list 128 
large span 
set 
CentralCache 
size class 0 
size class I 
size class 2 
Span 
size class n 
ThreadCache 1 
ThreadCache 2 
ThreadCache n 
size class O 
size class 1 
size class 2 
size class n 
Application
Google Tcmalloc

鲲鹏社区

  • 鲲鹏文档:案例
  • 鲲鹏软件: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、操作系统

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

富强民主文明和谐