性能分析方法论简介

news2024/11/15 11:19:18

文章目录

  • 1. 前言
  • 2. 性能分析概述
  • 3. 性能分析方法论一览
    • 3.1 TSA 和 USE
      • 3.1.1 TSA
        • 3.1.1.1 TSA 概述
        • 3.1.1.2 TSA 状态转换
        • 3.1.1.3 延迟类状态
        • 3.1.1.3 TSA 总结
      • 3.1.2 USE
        • 3.1.2.1 USE 简介
        • 3.1.2.2 低利用率是否意味着没有饱和?
        • 3.1.2.3 使用 USE
        • 3.1.2.3 常见资源列表 和 它们的测量指标
        • 3.1.2.4 USE 总结
    • 3.2 Intel TMA
    • 3.3 其它
  • 4. 参考资料

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 性能分析概述

通常,我们是通过理论指导实践,而实践又反哺完善理论,二者缺一不可。
总的来说,性能优化是从 时间 和 空间 两方面做出优化,然后取得一个可接受的平衡点。记住,无论怎么优化,也无法超出物理硬件的极限,假设 CPU 的最高频率是 1.5GHz ,就不可能优化出 1.6GHz 的效果。
在现在复杂的系统中,包含很多软硬件资源,硬件资源如 CPU、内存、磁盘、网络、GPU 、音视频Codec等等等等,软件资源包括各个软件模块、第三方库等等等,每一个都有可能成为我们优化的目标;从全局考虑(考虑所有软硬件资源),或者从某个局部考虑(只考虑某个或某几个软硬件资源),需要采用的优化方法可能又不一样。
当我们遇到一个性能问题,该当如何下手?通盘考虑全局所有资源,让每个部分达到最佳,当然是我们最想要的。但是,有时候这并不现实,譬如程序使用了一个第三方库,而它又不开源,那很可能你无法优化它;又或者,我们只需要将程序某个功能点的执行速度提高5%,这时候可能不需要考虑全局优化,仅仅针对某个点就可以了。所以,对于优化,我认为第一步要做的,就是要确定优化的目标。同时,我们也应该考虑可行性,最高频 1.5GHz 的 CPU 永远也无法跑出 1.6GHz 的效果。当然,可行性有时候不是那么一目了然,那就只能试试看了。

3. 性能分析方法论一览

对于 Linux 下的性能分析,可能我们通常的做法是:用 top 或类似工具,对程序做基本观察,确定程序是 CPU 密集型(也称 计算密集型) 还是 IO 密集型,然后来进行优化。但世界哪有那么简单,一个程序,可能有时候是 CPU 密集型 ,有时候又呈现为 IO 密集型 ;有的线程是 CPU 密集型 ,有的线程又是 IO 密集型 。多进程系统通常不可能只有一个程序在运行,程序相互之间也可能对彼此的性能造成妨害。程序当前可能运行在用户空间,也可能运行于内核空间系统调用,有时候瓶颈在于内核,有时候瓶颈又在用户空间……总之各种情形都有,不一而足。为应对各种情形,我们应该有一些方法论,作为一般性的指导,告诉我们该怎样一步步来定位分析性能问题。

3.1 TSA 和 USE

TSAUSE 是性能分析大佬 Brendan Gregg 提出的性能分析方法论。

3.1.1 TSA

3.1.1.1 TSA 概述

TSAThread State Analysis 的缩写,直译过来就是 线程状态分析 。该方法总结为:

1. 对每个观测线程,测试线程在各个不同状态下的总时间;
2. 使用合适的工具,根据观测到的线程在不同状态的总时间,按总时间由长到短对线程的各状态进行观测.

上面用术语“线程”来指代系统中的可运行实体,它们可能是线程、任务、进程
线程消耗的总时间,可划分到各个不同线程状态。下面划分了6种线程状态,作为关键信息源,用来标识分析性能相关问题:

. Executing: 在CPU上执行。
             在CPU上执行的时间,又细分为系统时间和用户时间。
             对于系统时间,观测CPU时间以及系统调用频率;对于用户时间,观测CPU时间。
             注意,CPU时间可能包含在自旋锁上自旋的时间。
. Runnable: 等待调度到CPU行执行。
            等待调度的时间,可以观察CPU的利用率和饱和率、施加的各种资源限制(如cgroup
            等)、进程CPU绑定。
. Anonymous Paging: 类似于Runnable,但是在等待进行页换出处理。
                    检查系统内存的使用状况、资源限制状态检查(如memcg等). Sleeping: 等待I/O状态, 包括网络、磁盘 等I/O操作。
            检查系统调用的时间和相关资源、mmap()引发的I/O;检查资源忙碌状态;
            通过off-cpu分析工具检查线程阻塞。
. Lock: 等待获取同步锁。
        观察线程等待的锁、造成锁等待的原因,以及锁机制分析。
. Idle: 空闲状态,无事可干,等待分配工作。

这个状态列表,在不同的操作系统下,可能要做些调整,取决于用来测量评估工具报告的状态。观察这些线程状态的工具,如 Linux 下的 top, mpstat, prstat 等等。有些监视程序,可能将时间消耗归结到某个程序组件,如时间消耗在 MySQL,PHP 等线程,这种方法称为 面向请求(request-oriented) 的方法,这种方法可能造成误导,这时可以通过 TSA 方法来搞清楚真正的原因,通过调查发现,MySQL 线程的大部分 Runnable 状态,即等待被调度到 CPU 执行,这也就意味着,实际上是别的线程占用了 CPU 时间,而不是 MySQL 线程,所以 面向请求(request-oriented) 方法的结论造成了误导,但通过 TSA 可以修正它,这样引导我们可以将注意力转移到真正消耗 CPU 时间的线程上去。

3.1.1.2 TSA 状态转换

在这里插入图片描述

3.1.1.3 延迟类状态

Runnable, Anonymous Paging, Sleeping, Lock 这4个状态统称为 延迟类状态,一旦发现这类状态的时间超过了 10% ,通常可以转为检查其它状态的时间消耗,这可以简化分析过程。

3.1.1.3 TSA 总结

TSA 方法是一个简单的、用来分析每线程性能的方法,它为性能分析提供一个起点和方向。在分析的早期,可以使用个方法,和后述的 USE 方法一起,对性能问题起到基本的了解。

3.1.2 USE

3.1.2.1 USE 简介

USEUtilization Saturation and Errors 的缩写,是一种用列举的 检查清单 来分析性能问题的方法。该方法从提出问题开始,然后寻求问题的答案;而不是从给定的测量结果,然后逆向寻求答案。针对不同的操作系统,USE 方法使用的 检查清单 各不相同。USE 方法可以总结为:

对每个资源,检查 利用率、饱和度、错误状态。

USE 方法旨在用于性能分析的早期,以确定系统瓶颈。为方便后面的阐述,先给出几个术语定义:

资源: CPU, 磁盘, 网络, mutex, ...
利用率: 【资源】处于忙碌状态的平均时间。也可以说成资源已使用的比例,譬如100%表示不能接收更多的工作。
饱和度: 【资源】不能处理的额外工作的程度。如【资源】上等待队列的长度。可以描述【资源】竞争的激烈程度。
错误状态: 【资源】错误事件计数。

这 3 个指标可能以如下形式描述:

利用率: 一段时间内的百分比,如一个磁盘以 90% 的利用率在运行。
饱和度: 队列长度。如 CPU 的平均运行队列长度为 4 。
错误状态:如网络接口发生50次冲突错误。

对错误状态应该引起重视,因为它们会降低性能。这在它们可恢复时,可能不会被注意到。
CPU 缓存 和 其它未列出的资源,可以在 USE 方法之后检查 - 在排除系统瓶颈之后。如果不确定是否要添加上述列表之外的资源到检查清单,请包含该资源,然后查看运行中资源指标的情况。

3.1.2.2 低利用率是否意味着没有饱和?

即使长时间平均利用率低,突发的高利用率也可能导致饱和性能问题。

3.1.2.3 使用 USE

使用 USE 方法,第一步是列出系统中可能造成性能瓶颈的资源列表;接着测试单个资源的能够达到的上限性能;最后是顺着资源清单列表,以合适的工具来查看资源当前的指标:利用率、饱和度、错误状态。操作步骤,一如下面的流程图:
在这里插入图片描述

3.1.2.3 常见资源列表 和 它们的测量指标

资源包括 硬件资源软件资源 两大类。
常见 硬件资源 列表 和 测量指标

资源     | 测量指标
---------|----------------------------------
CPU      | 利用率 
         | 饱和度:运行队列长度 或 调度延迟
---------|----------------------------------
内存     | 利用率:系统可用内存
         | 饱和度:页面换出
         | 错误:内存分配失败次数
---------|----------------------------------
存储设备 | 利用率:设备忙碌状态比例
         | 饱和度:等待队列长度
         | 错误状态:hard, soft, ...
---------|----------------------------------
......

可能的 软件资源 和 可能的 测量指标

资源                 | 测量指标
---------------------|--------------------------------
锁(mutex,...)        | 利用率:锁持有的时长
                     | 饱和度:等待锁的队列长度
---------------------|--------------------------------
线程池               | 利用率:线程忙于处理工作的时间
                     | 饱和度:等待线程池处理的请求数
---------------------|--------------------------------
系统最大线程数       | ......
---------------------|--------------------------------
系统最大文件描述符数 | ......
---------------------|--------------------------------
......

这些没有一定的规范,可以按实际情况来定义。

3.1.2.4 USE 总结

USE 方法是一种简单的策略,可用于执行完整的系统运行状况检查,识别常见的瓶颈和错误。它可以在调查的早期部署,并快速识别问题区域,然后如果需要,可以更详细地研究其他方法。USE 的优势在于它的速度和可见性:通过考虑所有资源,你不太可能忽略任何问题。但是,它只会发现某些类型的问题 - 瓶颈和错误 - 并且应该被视为更大工具箱中的一员。

3.2 Intel TMA

Intel 在 CPU 微架构层面,提供对性能分析的支持。使用自顶向下的分析方法,具有固定的套路和模式。对这个不熟悉,提到 VTune 估计不少人就明了了。
更多细节可参考 vtune-profiler 。

3.3 其它

其它我所不知道的方法论,将在未来添加。

4. 参考资料

https://brendangregg.com/usemethod.html
https://brendangregg.com/tsamethod.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+Vue的大学生高校学科竞赛报名管理系统

(4)学生: 个人中心:此页面,用户可查看其个人信息,可进行修改个人信息操作; 个人竞赛报名模块:查看已创建的学科竞赛,并可报名。 团队竞赛报名模块:查看已创建…

(二十)查找算法-二分查找

1 基本介绍 二分查找又叫折半查找,是一种高效简单的查找算法,通常用于在有序的数组中查找某个元素,例如从{1,2,4,6,8,9,10,23,24}的数组中查找值是8的元素,就可以采用二分查找法。 二分查找的思想: 给一个有序的序列…

【Qt5】快速傅里叶变换(FFTW库)+QCustomplot

文章目录 一、Windows下的FFTW库下载、配置、使用使用windows的lib工具生成库添加库文件到qt 一、Windows下的FFTW库下载、配置、使用 下载地址:https://fftw.org/pub/fftw/ 使用windows的lib工具生成库 Windows环境解压出来,在当前目录打开命令行&…

mysql数据库(工具类、DBUtils(应用)、数据库连接池、密码处理)

增删改查的工具类 操作数据库常用的执行方法: execute()可以进行增删改查 executeUpdate() 可以执行增删改 但是不能执行查询 exeuctQuery():只可以执行查询 我们在封装这个工具类的时候,只需要封装两种:一…

Centos7 安装NVM【安装node、安装教程】

1.编辑安装脚本 vim install.sh这里为了防止无法访问到github,这里特地将安装脚本复制过来了 对应网站:raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh #!/usr/bin/env bash{ # this ensures the entire script is downloaded #nvm_has() {t…

SHELL脚本的编写

目录 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。 2、判断web服务是否运行(1、查看进程的方式判断该程序是否运行 3、使用curl命令访问第二题的web服务,看…

C语言模拟银行排队叫号(顺序队)

一.队列 队列是一种具有先进先出(FIFO)特性的线性数据结构,它只允许在队列的两端进行插入和删除操作。队列的一端称为队尾(rear),另一端称为队头(front)。新元素总是插入在队列的队…

浙大OJ 1004 回文栈 暴搜

🍑 ZOJ 1004 Anagrams by Stack 输入 madam adamm bahama bahama long short eric rice输出 [ i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ] [ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i …

苹果手机网速慢怎么办?这些方法帮你解决网速慢的问题!

案例:苹果手机数据网络信号差,怎么解决? 【家人们,苹果手机不知咋回事,网速很慢,想要在某宝买个东西都得卡个半天。哭了!有没有什么方法解决?】 苹果手机作为一款高端智能手机&…

数据结构(四)—— 字符串

文章目录 一、字符串基础二、题2.1 344 反转字符串2.2 541 反转字符串II2.3 剑指Offer 05.替换空格2.4 151 翻转字符串里的单词2.5 剑指Offer58-II.左旋转字符串2.5 28 实现 strStr()2.6 459 重复的子字符串 一、字符串基础 1、旋转字符串:reverse(s.begin(), s.en…

WinScp密钥登录

使用密码登录非常的方便,但是有的客户的云服务器上是限定只能通过密钥登录。我一般使用命令行的scp命令就可以正常上传,但是对于我一些同事来说,就很不方便。 生成密钥 这个不难,可以参考我之前的文章。 《Mac使用ssh连接远程服…

docker简单教程(一)安装

docker简单教程(一)安装 文章目录 docker简单教程(一)安装1:Windows安装和mac安装2:linux安装3:安装成功4:**下一篇介绍基本实现,5分钟实现一个简单的服务器。** 接下来开…

杨廷琨:Oracle 23c值得关注的15项新特性

导语 2023年4月7日,由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023) 在北京新云南皇冠假日酒店盛大开启。次日,云和恩墨联合创始人兼CTO杨廷琨在“智能前沿:数据库内核技术”专题论坛…

iptables表、链、规则

netfilter/iptables(也就是常说的iptables)组成Linux平台下的包过滤防火墙,具有完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 netfilter是Linux 核心中一个通用架构,它提供了一系列的"表&quo…

4.2.2字符串KMP算法

对朴素模式匹配算法的优化: 当我们匹配最后一个字符才发现匹配失败。 那么前面这些字符一定是与模式串对应的。 通过模式串的部分匹配 朴素模式匹配算法优化思路: 不匹配的字符之前,一定是和模式串一致的。 可以跳过中间好几个没有必要的对比…

一、基础算法8:离散化 模板题+算法模板(区间和)

文章目录 离散化介绍算法模板离散化题目模板 模板题区间和原题链接题目题解思路 unique原理补充介绍 离散化介绍 算法模板 离散化题目模板 vector<int> alls; // 存储所有待离散化的值 sort(alls.begin(), alls.end()); // 将所有值排序 alls.erase(unique(alls.begin(…

重磅!Google Brain 与 DeepMind 宣布合并,成立 Google DeepMind 新部门

文 | 小戏 昨日&#xff0c;谷歌母公司 Alphabet 首席执行官桑达尔皮查伊宣布&#xff0c;谷歌将合并旗下最大的两个 AI 研究机构——地处伦敦 DeepMind 与位于硅谷的 Google Brain&#xff0c;成立全新的部门 Google DeepMind。桑达尔皮查伊表示&#xff0c;这项合并将整合两个…

【AI理论学习】提示学习中常见的Prompt方法

提示学习中常见的Prompt方法 硬模板方法1. PET(Pattern Exploiting Training)2. LM-BFF 软模板方法1. P-tuning2. Prefix tuning3. Soft Prompt Tuning 总结参考资料 提示学习中常见的Prompt方法可以大概分为硬模板方法和软模板方法。 硬模板方法 主要介绍PET方法和LM-BFF方法…

Windows10系统关闭自动更新及优化

研究背景&#xff1a; 自从用了windows10系统后&#xff0c;老是会遇到糟心的事情&#xff0c;不知不觉的情况下C盘就爆红了&#xff0c;而导致这个的主要原因就是系统老是自动更新&#xff0c;每次更新都是好几个G&#xff0c;耗流量不说&#xff0c;还特别占用C盘空间&#…

110. 平衡二叉树【75】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 102. 二叉树的层序遍历【206】 力扣此题地址&#xff1a; 110. 平衡二叉树 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中…