基于硬件特性的性能调优

网友投稿 998 2022-05-28

性能优化四个方向: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

加速使能

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

内核态硬件加速件使能

针对性性能调优

CPU/RAM

调整内存页大小

CPU预取

修改线程调度策略

硬盘

脏数据刷新

异步文件操作

文件系统参数

网卡

网卡多队列

开启网卡TSO

开启网卡CSUM

应用

优化编译选项

文件缓存机制

缓存执行结果

NEON指令结果

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

基于硬件特性的性能调优

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

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

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

软中断:softirq。方便网卡做后续操作,网卡轮询软中断队列。从内存拷贝到应用套接字中。应用检测套接字中是否有新增数据。Linux将中断分为两个阶段:上半部和下半部。上半部用来处理中断;下半部用来处理上半部未完成的工作,通常以内核线程的方式运行。

就像收快递,你不确定什么时候配送到你手上,也没有办法了解配送进度。但是配送员是不等人的,到了你没取直接就走人。所以只能苦苦等着。但是你可以和配送员说好“快到了就给我打个电话”,这个电话就相当于是一个中断,只有接到电话时才会产生中断,并产生一个新动作“拿快递”。

所以中断是一种异步事件的处理机制,可以提高系统的并发处理能力。中断会打断其他进程。

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

高中断==低延迟

低中断==高吞吐

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

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

查看软中断:

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

查看软中断运行情况

查看硬终端运行情况

监控&分析&优化

监控

分析

优化

TOP

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

Pref

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

Numactl

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

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

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

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

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

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

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

无锁编程

大锁边小锁

高性能原子操作指令

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

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

鲲鹏社区

鲲鹏文档:案例

鲲鹏软件: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、操作系统

鲲鹏 运筹优化 软件开发

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C语言 8皇后解法
下一篇:VMware 虚拟化编程(14) — VDDK 的高级传输模式详解
相关文章