Chrome 浏览器跟踪格式可视化器

您可以使用全栈跟踪来跟踪从顶层 QML 或 JavaScript 到 C++ 以及内核空间的所有过程。这样,您就可以测量应用程序的性能,检查它是否受到 CPU 或 I/O 的限制,或是否受到同一系统上运行的其他应用程序的影响。通过跟踪,可以深入了解系统在做什么,以及应用程序为何以特定方式运行。它能显示硬件的使用情况以及内核和应用程序的运行情况。

跟踪信息可以让你更多地了解收集到的数据。 QML Profiler收集的数据。例如,你可以检查为什么一个微不足道的绑定评估要花费如此长的时间。这可能是由于 C++ 正在执行或磁盘 I/O 速度太慢造成的。

一些跟踪工具(如chrome://about )可以生成 Chrome 浏览器跟踪格式 (CTF) 中有关 Chrome 浏览器跟踪事件的信息。您可以在Qt Creator 中打开 CTF 文件进行查看。这在查看超过 100 MB 的跟踪文件时尤其有用,因为内置跟踪查看器 (chrome://tracing) 占用内存较多,很难查看这些文件。

可视化器支持LTTng跟踪框架生成的数据中使用的所有事件类型,并将其转换为 CTF。但是,不支持某些更高级的事件类型,例如 Android 系统跟踪中使用的事件类型。展示台会静默忽略不支持的事件类型。

展示台支持以下事件类型:

  • 开始、结束、持续时间和即时事件
  • 计数器事件(图表)
  • 元数据事件(进程和线程名称)

打开 JSON 文件

要打开 JSON 文件查看,请选择Analyze >Chrome Trace Format Viewer >Load JSON File

事件可视化

Timeline 视图以图形方式显示跟踪事件和所有记录事件的浓缩视图。

时间轴视图

时间线中的每个类别都描述了应用程序中的一个线程。将光标移至一行中的事件 (5) 上,可查看其持续时间和事件类别。要只在选择事件时显示信息,请禁用View Event Information on Mouseover 按钮 (4)。

大纲 (10) 概括了收集数据的时间段。拖动缩放范围 (8) 或单击大纲可在大纲上移动。要在事件间移动,请选择Jump to Previous EventJump to Next Event 按钮 (1)。

选择Show Zoom Slider 按钮 (2),打开一个可用于设置缩放级别的滑块。您还可以拖动缩放手柄 (9)。要重置默认缩放级别,请右键单击时间线打开上下文菜单,然后选择Reset Zoom

选择仅限于主题 (Restrict to Threads) 按钮 (6) 来选择要显示的线程。

选择事件范围

您可以选择一个事件范围 (7),以查看其代表的时间或放大到跟踪的特定区域。选择Select Range 按钮 (3) 激活选择工具。然后在时间轴上单击,指定事件范围的起点。拖动选择柄来定义范围的终点。

您也可以使用事件范围来测量两个后续事件之间的延迟。在第一个事件的结束和第二个事件的开始之间放置一个范围。Duration 字段会以毫秒为单位显示事件之间的延迟。

要放大事件范围,请双击该范围。

要删除事件范围,请关闭Selection 对话框。

查看统计数据

统计视图

Statistics 视图显示时间线中每个函数所包含的样本数,包括总数和位于堆栈顶部时的样本数(称为self )。这样就可以检查哪些函数需要优化。出现次数多可能表明某个函数被不必要地触发或执行时间过长。

收集 LTTng 数据

LTTng 是一个用于 Linux 的跟踪工具包,您可以将其应用于嵌入式 Linux 系统,以了解如何优化应用程序的启动时间。

Qt 有一组内核跟踪点和一个用于自定义用户空间跟踪点的跟踪子系统。

配置内核

要使用 LTTng,必须在构建内核前设置以下配置选项:

  • CONFIG_HIGH_RES_TIMERS
  • CONFIG_KALLSYMS
  • CONFIG_MODULES
  • CONFIG_TRACEPOINTS

我们建议您设置以下附加选项:

  • CONFIG_EVENT_TRACING
  • CONFIG_HAVE_SYSCALL_TRACEPOINTS
  • CONFIG_KALLSYMS_ALL

在 Yocto 中,你可以在Menu >Config >Kernel Hacking >Tracers 中激活上述选项。

安装 LTTng

构建内核并将其部署到设备后,您需要在设备上安装以下 LTTng 软件包:

  • lttng-tools 用于控制跟踪会话
  • lttng-modules 用于内核跟踪点
  • lttng-ust 用于用户空间跟踪点

在 Yocto 中,您只需启用EXTRA_IMAGE_FEATURES += "tools profile"

使用跟踪点构建 Qt

跟踪点会不断添加到 Qt 版本中。要使用它们,您需要使用configure -trace lttng 选项自行构建 Qt。

记录事件

要创建会话,您需要调用lttng create 命令。然后调用lttng enable-channel kernel -k 启用内核通道。在内核通道中,将相应的跟踪点指定为kernel_events ,然后调用lttng enable-event 启用它们。最后,调用lttng start 开始跟踪。

调用lttng stop 可停止跟踪。可以使用sleep 设置会话长度。停止后,可以调用lttng destroy 来销毁会话。

您可以编写并运行包含上述命令的脚本,以启动和停止全栈跟踪。您可以使用systemd 执行脚本。

启用跟踪点

数据将根据在 LTTng 会话中启用的跟踪点进行记录。通常,启用调度程序开关、系统调用和 Qt 跟踪点非常有用。

调度程序开关跟踪点

当应用程序因抢占先机而被切换时,例如,当另一个进程有机会在 CPU 内核上运行时,就会出现调度器切换跟踪点。启用调度器切换跟踪点可记录当前正在运行的线程及其所属进程,以及进程启动和停止的时间。

系统调用跟踪点

系统调用跟踪点有助于了解调度程序切换发生的原因。以下是可跟踪的系统调用示例:

  • openat 和 将文件描述符映射到文件名close
  • mmap 将页面故障映射到文件
  • read 和 由 I/O 操作触发write
  • nanosleepfutexpoll 解释了调度程序的切换
  • ioctl 控制 GPU 和显示器

将 LTTng 数据转换为 CTF

ctf2ctf工具使用babeltrace 解析二进制通用跟踪格式 (CTF),并将其转换为 Chrome 跟踪格式 (CTF)。它执行以下自定义任务,使记录更易于人阅读:

  • 将文件描述符映射到文件名
  • 将页面故障映射到文件名
  • 用名称注释中断和块设备
  • 将 UTF-16QString 数据转换为 UTF-8 字符串
  • 计算内存页分配

要生成包含 Chrome 浏览器跟踪格式跟踪数据的 JSON 文件,请在命令行中输入以下命令:

ctf2ctf -o trace.json path/to/lttng trace/

另请参阅 "如何:分析"、"分析器"和"分析代码"。

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.