性能分析方法论简介

这篇具有很好参考价值的文章主要介绍了性能分析方法论简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 ARM Top-Down

利用 ARM PMU(Performance Monitor Unit) 从微架构层面进行性能分析。更多细节参考下列资料:
https://community.arm.com/support-forums/f/high-performance-computing-forum/46701/top-down-microarchitectural-analysis
https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/arm-neoverse-v1-top-down-methodology-for-performance-analysis
用于分析的脚本工具:
https://gitlab.arm.com/telemetry-solution/telemetry-solution

3.4 其它

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

4. 参考资料

https://brendangregg.com/usemethod.html
https://brendangregg.com/tsamethod.html文章来源地址https://www.toymoban.com/news/detail-418170.html

到了这里,关于性能分析方法论简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文看懂解决方案分析方法论SWOT以及SMART原则

    今天给大家分享两个内容,解决方案分析方法论SWOT以及SMART原则 首先我们来分析SWOT分别代表什么: S(Strengths) :优势 W(Weaknesses):劣势 O(Opportunities):机会 T(threats):威胁 举个例子,项目需要使用一种消息队列,那么在众多消息队列中,哪个才是最适合我们的呢?

    2024年01月24日
    浏览(27)
  • GPT-4科研实践:数据可视化、统计分析、编程、机器学习数据挖掘、数据预处理、代码优化、科研方法论

    查看原文GPT4科研实践技术与AI绘图 GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。 例如在科研编程、绘图领域 : 1、编程建议和示例代码:  无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。

    2024年02月07日
    浏览(36)
  • 搜索方法论

    搜索技巧: 1. “”:不拆分。当我们查找的内容为一个词组或者多个汉字,那么我们用双引号把他们括起来再进行查找,此时搜索到的结果最少也最精确。 2. -干扰词(中间有个空格) 3. +确定词(中间有个空格)  4. filetype:文件格式 效果就是寻

    2024年02月12日
    浏览(24)
  • OneData方法论-概述

    OneData概述 OneData是阿里巴巴数据整合及管理体系,其方法论的核心在于:从业务架构设计到模型设计,从数据研发到数据服务,做到数据可管理 、可追溯、可规避重复建设。即数据只建设一次。 OneData体系架构 Onedata方法论分为三个阶段:业务板块、规范定义、模型设计。 业

    2024年02月05日
    浏览(31)
  • 渗透测试方法论

    攻击与防御,攻击典型代表就是黑客入侵,非法的和渗透测试,合法的等工作。防御的典型代表等级保护、安全基线检查与加固、安全设备等。 渗透测试(penetration testing,pentest)是模拟黑客攻击,实施安全评估(即审计)的具体手段。方法论是在制定、实施信息安全审计方案时

    2024年02月11日
    浏览(35)
  • 数仓建模方法论

    1.数仓建模的理由 数据建模的主要目的是降低成本,提高数据的利用效率。尤其是大数据时代的到来,数据的多样化,巨量,更需要有效的有针对性数据建模方法。 大数据的数仓建模正是通过建模的方法,更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到

    2024年02月05日
    浏览(29)
  • SQL-方法论

    写SQL时可以考虑的手段: 行转列 先分为多个临时表,然后JOIN到一起 用sum(if()) 列转行 先分为多个临时表,然后UNION到一起

    2024年02月14日
    浏览(32)
  • SOA认知和方法论

    在软件设计领域,企业架构通常被划分为如下五种分类: 如何理解架构分类依据及其彼此之间的关系?业务是企业赖以生存之本,因此业务架构是基础、是灵魂,其他一切均是对业务架构的支撑;根据业务架构形成与之相应的产品架构和数据架构;最后通过技术架构落地实施

    2024年02月08日
    浏览(33)
  • 论文阅读与管理方法论

    构建知识体系 通过Related Works快速了解该方向研究现状,追踪经典论文。 紧跟前沿技术 了解领域内新技术及效果,快速借鉴到自身项目。 培养科研逻辑 熟悉论文体系,了解如何快速创造新事物,培养良好的科研习惯。 写论文 面试找工作 快速熟悉某领域 发展历程 、 现状及

    2024年02月15日
    浏览(33)
  • 数据建模方法论及实施步骤

    了解数据建模之前首先要知道的是什么是数据模型。数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。 一、概要:数据建模简介 数据基本用于两种目的:1、操作型记

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包