如何安装和使用英特尔® VTune™ 放大器 Platform Profiler

立即试用 Platform Profiler

欢迎大家免费试用技术预览版。大家只需按照以下简单步骤操作即可(如果已经注册,请跳至第 2 步):

  1. 注册英特尔® Parallel Studio XE 测试版
  2. 下载并安装(Platform Profiler 独立于英特尔 Parallel Studio XE 测试版,需单独下载)
  3. 查看入门指南,然后试用 Platform Profiler
  4. 填写在线调查

简介

英特尔® ™ 放大器 - Platform Profiler,目前提供技术预览版,这款工具可帮助用户确定应用对底层架构的使用情况以及用户可如何优化系统硬件配置。它可显示处理器、内存、存储布局、PCIe* 和网络接口等高级系统配置(见图 1),以及在系统上观察到的性能指标,比如 CPU 和内存利用率、CPU 频率、每指令周期 (CPI)、内存和磁盘输入/输出 (I/O) 吞吐量、功耗、每指令的高速缓存缺失率等。该工具收集的性能指标可用于更深入的分析和优化。

Platform Profiler 的主要受众有两种:

  1. 软件开发人员 — 借助该工具提供的性能指标,开发人员可分析工作负载在不同平台组件(比如 CPU、内存、磁盘和网络设备)中的行为。 
  2. 基础设施架构师 - 您可以对硬件进行监控,通过分析长期运行数据,确定系统何时会出现性能低下的问题。 另外,可以根据工具显示的结果优化系统的硬件配置。例如,运行一组工作负载后,Platform Profiler 显示处理器利用率和内存占用率较高,或 I/O 限制应用性能,对此您可以增加内核、内存,或使用更多或速度更快的 I/O 设备。

图 1. Platform Profiler 的高级系统配置视图

Platform Profiler 与其他 VTune 放大器分析的主要区别在于 Platform Profiler 可长时间帮助分析平台,几乎不产生性能开销,并且仅生成少量数据。当前版本的 Platform Profiler 可运行长达 13 个小时,而生成的数据少于 VTune 放大器在 13 个小时内生成的数据。因此,用户只需启动 Platform Profiler,使其运行 13 个小时,期间正常使用系统,然后停止 Platform Profiler 分析。Platform Profiler 就会收集所有配置数据,并显示系统利用率图。相比之下,VTune 放大器无法长时间运行,因为它可在几分钟内生成数 GB 分析数据。因此,VTune 放大器更适用于微调或分析应用,而非系统。应用对机器的使用情况如何或者所使用的机器表现如何是 Platform Profiler 所回答的主要问题。但如何修复应用以更好地使用机器是 VTune 放大器所回答的问题。

Platform Profiler 包含两个主要组件:数据收集器和服务器。

  • 数据收集器 - 是需要在要分析的系统上安装的独立程序包。它负责收集系统层硬件和操作系统性能数据。
  • Platform Profiler 服务器 - 将收集的数据后期处理成时间序列数据库,与系统拓扑信息建立关联,并使用基于 Web 的界面显示拓扑图和性能图。

工具安装

要使用 Platform Profiler,需首先安装服务器和数据收集器组件。以下是具体的安装步骤。

安装服务器组件

  1. 将服务器包拷贝至要安装服务器的系统。
  2. 将归档文件提取至可写目录。
  3. 运行设置脚本并按提示操作。在 Windows* 上使用 Administrator Command Prompt 运行脚本。在 Linux* 上使用具有根 (“sudo”) 特权的账户。

          Linux 示例:./setup.sh

          Windows 示例:setup.bat

默认情况下,服务器安装在以下位置:

  • 在 Linux 上: /opt/intel/vpp
  • 在 Windows 上: C:\Program Files(x86)\IntelSWTools\VTune Amplifier Platform Profiler

安装数据收集器组件

  1. 将收集器包拷贝至您想用于收集平台性能数据的目标系统。
  2. 将归档文件提取至目标系统上的可写目录。
  3. 运行设置脚本并按提示操作。在 Windows 上使用 Administrator Command Prompt 运行脚本。在 Linux 上使用具有根 (“sudo”) 特权的账户。

          Linux 示例:./setup

          Windows 示例:setup.cmd

默认情况下,收集器安装在以下位置:

  • 在 Linux 上: /opt/intel/vpp-collector
  • 在 Windows 上: C:\Intel\vpp-collector

工具用法

启动和停止服务器组件

在 Linux 上:

  • 完成初始安装或重启系统后,运行以下命令,手动启动服务器:
    • source ./vpp-server-vars.sh
    • vpp-server-start
  • 运行以下命令,停止服务器:
    • source ./vpp-server-vars.sh
    • vpp-server-stop

在 Windows 上:

  • 完成初始安装或重启系统后,运行以下命令,手动启动服务器:
    • vpp-server-vars.cmd
    • vpp-server-start
  • 运行以下命令,停止服务器:
    • vpp-server-vars.cmd
    • vpp-server-stop

收集系统数据

使用 Platform Profiler 收集数据非常简单。以下是使用该工具收集数据需要执行的步骤:

  1. 设置环境:
    • 在 Linux 上:source /opt/intel/vpp-collector/vpp-collect-vars.sh
    • 在 Windows 上:C:\Intel\vpp-collector\vpp-collect-vars.cmd
  2. 开始数据收集:vpp-collect-start [-c “workload description – free text comment”].
  3. 还可以视情况添加时间线标记,以区分收集的时间段:vpp-collect-mark [“an optional label/text/comment”].
  4. 停止数据收集: vpp-collect-stop. 数据收集停止后,压缩后的结果文件保存在当前目录中。

注:长时间运行 Platform Profiler 时,插入时间线标记非常实用。例如,大家可以连续运行 Platform Profiler 收集 13 个小时。在这 13 个小时内,大家可以运行各种压力测试,并了解每项测试对系统的影响。为了区分这些测试的时间,大家可能想使用时间线标记。

查看结果

  1. 从安装该服务器的机器上,将浏览器(推荐使用 Google Chrome*)指向服务器主页:http://localhost:6543
  2. 单击 “View Results”。
  3. 单击  Upload 按钮,然后选择要上传的结果文件。
  4. 从列表中选择结果以打开查看器。
  5. 浏览所有结果,确定需要优化的地方。

工具演示

本文余下部分将演示如何查看和分析收集的结果数据。本文以电影推荐系统应用为例。电影推荐代码来自 Spark* Training GitHub* 网站。底层平台是双路 Haswell 服务器(英特尔® 至强® CPU E5-2699 v3),该服务器启用了英特尔® 超线程技术、采用 72 个逻辑内核、64 GB 内存,运行 Ubuntu* 14.04 操作系统。

代码在单节点上的 Spark 中运行,如下所示:

spark-submit --driver-memory 2g --class MovieLensALS --master local[4] movielens-als_2.10-0.1.jar movies movies/test.dat

借助以上命令行,Spark 利用 --master local[4] 选项指定的四个线程以本地模式运行。在本地模式下,只有一个驱动程序充当执行程序,而且该执行程序产生线程以执行任务。启动应用之前有两个可以更改的参数,分别为驱动程序内存 (--driver-memory 2g) 和运行的线程数量 (local[4])。我的目标是通过更改这些参数了解系统的承压能力,并确定是否可以使用 Platform Profiler 的分析数据找到执行期间可能出现的有趣模式。 

以下是运行的四个测试案例以及相应的运行时间:

  1. spark-submit --driver-memory 2g --class MovieLensALS --master local[4] movielens-als_2.10-0.1.jar movies movies/test.dat (16 minutes 11 seconds)
  2. spark-submit --driver-memory 2g --class MovieLensALS --master local[36] movielens-als_2.10-0.1.jar movies movies/test.dat (11 minutes 35 seconds)
  3. spark-submit --driver-memory 8g --class MovieLensALS --master local[36] movielens-als_2.10-0.1.jar movies movies/test.dat (7 minutes 40 seconds)
  4. spark-submit --driver-memory 16g --class MovieLensALS --master local[36] movielens-als_2.10-0.1.jar movies movies/test.dat (8 minutes 14 seconds)
     

图 2 和图 3 分别显示了第一次测试和第二次测试期间观察到的 CPU 指标。图 2 显示 CPU 未得到充分利用,如果系统的其他部分同样未得到充分利用,用户可以添加更多任务。CPU 频率通常会变慢,显示 CPU 不会限制性能这一论点确实成立。图 3 显示由于线程的增加,测试占用了更多的 CPU,但仍然有很大的利用空间。另外有趣的是,增加线程数量后,CPI 比率也降低了,如图 3 中的 CPI 图所示。

图 2.  测试 1 中 CPU 使用情况概览。

图 3.  测试 2 中 CPU 使用情况概览。

图 4.  测试 1 Socket 0 上的内存读/写吞吐量。

对比图 4 和图 5 大家可以发现,增加线程也会增加内存访问次数。这一行为在预料之中,Platform Profiler 收集的数据也验证了这一点。  

图 5.  测试 2 Socket 0 上的内存读/写吞吐量。

图 6 和图 7 分别显示了测试 1 和测试 2 中每条指令的 L1 和 L2 缺失率。在测试 2 中,增加线程数量显著降低了 L1 和 L2 的缺失率,如图 7 所示。我们发现,用较多的线程运行代码时,应用会降低 CPI 比率和 L1 和 L2 缺失率,这意味着数据从内存加载至高速缓存后,大量数据会被重用,这有利于整体性能的提升。 

 

图 6.  测试 1 中每指令的 L1 和 L2 缺失率。

图 7.  测试 2 中每指令的 L1 和 L2 缺失率。

图 8 显示了测试 3 的内存占用率。其他测试中也出现了相同的内存使用模式;即内存占用率在 15-25% 之间,而缓存占用率在 45-60% 之间。Spark 将中间结果缓存在内存中以供后续处理,因此我们看到缓存的利用率较高。 

图 8.  测试 3 中的内存利用率概览。

最后,图 9-12 显示了所有四次测试运行期间的磁盘利用率。随着四次测试运行期间工作量的逐渐增加,数据显示,速度较快的磁盘提升了测试性能。交易的字节不是很多,但 I/O 操作 (iops) 花费了大量的时间等待完成。Queue Depth 图清晰地显示了这一情况。如果用户无法更换磁盘,那么添加线程有助于容忍磁盘访问延迟。

 

图 9.  测试 1 中的磁盘利用率概览。

图 10.  测试 2 中的磁盘利用率概览。

图 11. 测试 3 中的磁盘利用率概览。

图 12.  测试 4 中的磁盘利用率概览。

总结

借助 Platform Profiler,我了解了电影推荐工作负载的执行行为,并观察到了不同的线程数量和驱动程序内存设置下性能指标所发生的变化。另外令我惊讶的是,我发现工作负载执行期间发生了大量磁盘写入操作,因为 Spark 应用的设计初衷是在内存中运行。为了进一步研究代码,我将继续运行 VTune Amplifier 的磁盘 I/O 分析,以了解磁盘 I/O 性能背后的详细情况。 

有关编译器优化的更完整信息,请参阅优化通知