关于如何使用VTune Profiler来确定性能瓶颈的方法
首先
在这篇文章中,我们将介绍由英特尔免费提供的性能分析工具VTune Profiler的基本使用方法。
由于我们还在试探中,所以请注意可能存在更好的使用方法或者可能包含明显错误。
VTune Profiler是什么?
VTune Profiler是由Intel提供的免费的性能分析工具。它可以用于分析应用程序和中间件的性能瓶颈。※在工作中遇到MySQL和PostgreSQL性能降低的原因不明的情况下,它非常有帮助。
英特尔 VTune 分析器
只有使用过IDE的性能分析功能和perf命令,对其他性能分析工具并不熟悉,但根据我的简单使用体验,它们具有以下优点。
-
- 無償で利用できます
ライセンス条項(Intel End User License Agreement for Developer Tools)を読む限りでは、恐らく商用にも利用できる(はず) ※ライセンス条項はご自身でご確認ください
OSSではないようです
マルチプラットフォーム対応です
GUIを起動するホスト側のOSとしてはLinux, Windows, Macに対応しているようです。
プロファイリング対象としては、Linux, Windows, FreeBSDに対応しているようです(AndoridはIntelプラットフォームのみなので実質無意味)
GUIで直感的な操作できます
プロファイリング対象に対するツールのデプロイ等をの各種操作を非常に直感的に実施できます
難しい専門用語も、大抵はマウスオーバーで詳細な説明を表示できます
単に記録した数値を表示するだけではなく、問題があるかどうかの判断までやってくれます
CLI版も提供されています
GUIの操作はWindows、プロファイリング対象はリモートのLinuxといった使い方も実施できます。この場合もボタン一つでプロファイリング対象にバイナリをデプロイできます。
CPU内臓のPMUから情報を取得するのでオーバーヘッドが少ないです
ドライバーをインストールする必要のない、ユーザーモードでのサンプリングもサポートしてます(ただし、オーバーヘッドが大きいようです)
Intel CPUのPerformance Monitoring Eventも確認できます
PMUから提供されるPerformance Monitoring Eventも取得可能であり、コード上のボトルネックだけではなく、CPUのマイクロアーキテクチャのどこがボトルネックとなっているのかも確認できます。
複数のプログラミング言語/処理系に対応しています
C, C++, C#, Fortran, Golang, Java, Python, .NETに対応しているようです。
公式ドキュメントの品質が高いです
Intel VTune Profiler User Guideの品質が高く、説明が詳細かつ網羅的であるだけではなく、多数のサンプルやレシピなどの情報も含まれています。
無料でもサポートしてくれます
コミュニティサポートですが、無料でもサポートを実施してくれます。一件問い合わせを行いましたが、レスポンスの早さ、品質ともにしっかりしている印象です。
只需要一个选项,以下是可能的翻译:
只要使用方法简单,就需要注意以下几点。
-
- 基本的にIntel CPU用です
公式では「3rd generation Intel Xeon processor family v3 (or later)
4th generation (or later) Intel Core™ processor」とされており、10年程度前のCPUまではサポートしているようです。
User-Mode SamplingならばAMD CPUでも動くようですが、サポート対象外ですし何らかの不具合があったり、CPUのモデルナンバーで弾かれるようになる可能性があるので、基本的にIntel CPU用だと思われます。
一部のIntel CPUはサポートしていません
古いCPUでは未サポートですし、比較的新しくとも言及が一切ないAtomの系譜のCPUは中途半端にしかサポートしていないようです。
以前はマイクロアーキテクチャの分析を実施できていたGemini Lake(Celeron J4005)で実施できなくなったり、メモリ帯域の分析などはPMUにそのための機能が実装されていないことからエラーになったりと、Atomの系譜のCPUのサポートは怪しいようです。
プロファイリング対象のデータ量が大きい場合、GUIの操作が重くなるようです
数百スレッド、数分のプロファイリングをGUIで描写するのはそれなりの負荷がかかるようです。
分単位のサンプリングを実施すると簡単にGiB単位でストレージ容量が消費されることにも要注意!
クラウド環境での利用はuser-mode samplingのみに対応しています
クラウド環境はサポートされているものの、仮想化されたクラウド環境では直接PMUにアクセスできないことから、Bare Metalを除き、user-mode samplingのみを実施できるようです。
厳密にいえば、2ソケットをまるごと利用する巨大なインスタンスタイプではハードウェアイベントを取得できそうなのですが、 プロファイリングのためだけにr5.12xlargeやm6i.16xlargeを利用することは普通はないと思われます。
マルチプロセス構成のアプリケーションでは、アプリケーションの起動から実施する必要があります
Attach to Processの機能では特定プロセス「のみ」のプロファイリングを実施し、特定プロセスからフォークした子プロセスの情報を取得しないので、VTuneから親プロセスの起動を実施する必要があるようです。※例: PostgreSQL等
基本使用方法 de
在Windows上启动GUI,并将Linux作为要分析的对象(非云环境),以进行Apache Cassandra的分析。尽管不一定需要使用Apache Cassandra,但这个过程需要预先启动某个要分析的进程,以便附加到正在运行的进程。
由于我认为安装过程中不会出现特别困难的地方,故省略安装步骤的说明。
1. 打开 VTune Profiler
起动后的页面如下所示。
在这里选择配置分析。
2. 在“WHERE”选项中选择远程Linux。
输入SSH目标并选择Deploy。
4. 将公钥复制到接收方的authorized_keys文件中。
为了实现无需密码的访问,接下来将显示如下窗口,将公钥复制到目标连接的authorized_keys文件中。
复制完成后,在此画面上按下任意键。
5. 画面关闭后再次按下Deploy按钮。
在软件部署完成后,定位目标会显示以下屏幕,并消除警告。
6. 请选择Attach to Process选项来自于WHAT。
7. 安装示例驱动程序。
尽管可以继续使用现有方法进行用户模式抽样,但为了以较低的开销进行性能分析,我们建议在此阶段安装采样驱动程序。
根据以下文档为参考,安装示例驱动程序。
请注意,默认情况下,可以访问已安装的vtune组驱动程序,如有需要,请将其添加到组中。
进入安装目录
cd /tmp/vtune_profiler_2022.4.0.624343/sepdk/src/
按照以下方式进行构建。
./build-driver -ni
最后进行安装。
./insmod-sep -r
完成了样品驱动程序的安装,接下来将继续进行。
※如果继续下一步,应该在GUI界面上显示警告。
8. 从HOW选择热点。
选择基于硬件事件的抽样。
选择”Collect stacks”选项后,您可以获得更多信息,包括Flamegraph和函数调用层次。
选择屏幕中央下方的Start按钮。
如果要进行负载测试等操作,最好在这之前启动。
11. 在途中停止对人员画像进行分析。
开始分析时,屏幕上会显示如下画面,当被认定为已获取足够的信息时,请选择停止。
※需注意的是,采样间隔越短,获取时长越长,存储容量就会增加,生成报告所需的时间也会增加。以Cassandra为例,在大约100秒的采集过程中,需要大约1.6GiB的存储容量。
12. 会显示摘要
摘要将显示如下。
您可以查看CPU的使用情况以及作为热点函数/方法发挥作用的信息。
※ 如果微架构的使用率显示为N/A,则可能是因为Gemini Lake不受支持。
我来看一下报告。
只需将鼠标悬停在问号标志上,即可显示每个术语的解释。
在Bottom-up的页面中,您可以通过不同的维度来确认以自下而上的方式成为热点的模块/函数/方法等。
透過雙擊函數/方法,我們可以在有源代碼的情況下,逐行檢查哪些部分成為瓶頸。
Caller/Callee是可以显示调用者/被调用者关系的。
在 Top-Down 的页面上,可以显示每个函数/方法的调用层级。
在平台上,可以检查每个线程和进程的运行状态。对于Java来说,似乎还可以检查垃圾回收的执行情况。
我也尝试过分析Hotspots之外的内容,但由于环境不同,有些内容无法使用,有些内容非常专业,或者在虚拟环境下根本无法使用,因此如果想要确定应用程序的瓶颈,基本上Hotspots就足够了。
如果您对获取堆栈信息时的火焰图显示方式感兴趣,可以在官方文档的《使用火焰图分析热点代码路径》页面上查看。
最后
经过以上的说明,我们已经了解了VTuner Profiler的简单使用方法。
尽管它是免费的,但却能够通过GUI直观地进行操作,如果能够有效地利用它,那么在确定性能问题的根本原因时,它将是一种非常有益的工具。因此,我想要掌握它的使用方法。
虽然我感觉自己并没有完全掌握它,而且在我目前的工作中它并不经常使用,但它偶尔还是会发挥作用的。
链接集
Analyze Performance
Hotspots以外の利用可能な分析方法についての公式ドキュメントの説明です。
User Interface Reference
公式のユーザーインターフェースのリファレンスです。
Intel VTune Profiler Command Line Interface
CLI版の公式ドキュメントです。
Configuration Recipes
公式の設定レシピ集です。