Chrome Trace Format Visualizer
您可以使用完整栈追踪从顶层 QML 或 JavaScript 追踪到 C++,直到内核空间。这使您能够测量应用程序的性能,并检查它是否受 CPU 或 I/O 绑定或受同一系统上运行的其他应用程序的影响。追踪可以深入了解系统正在做什么,以及应用程序为何以特定方式运行。它表明了硬件的利用情况以及内核和应用正在做什么。
追踪信息可以告诉您更多关于QML 性能分析器收集的数据。例如,您可以检查为什么一个简单的绑定评估需要这么长时间。这可能是由 C++ 执行或磁盘 I/O 慢导致的。
几个追踪工具(如 chrome://about
)可以生成有关 Chrome 追踪事件的信息,以 Chrome 追踪格式(CTF)形式。您可以在 Qt Creator 中打开 CTF 文件进行查看。这对于查看大于 100 MB 的追踪文件非常有用,因为内置的追踪查看器(chrome://tracing
)的内存使用量很高,难以查看。
可视化器支持LTTng 追踪框架生成的所有事件类型,转换为 CTF。然而,某些更高级的事件类型可能不支持,例如在 Android 系统追踪中使用的。可视化器会静默忽略不支持的冒事类型。
可视化器支持以下事件类型
- 开始、结束、持续时间和即时事件
- 计数器事件(图形)
- 元数据事件(进程和线程名称)
打开 JSON 文件
要打开 JSON 文件进行查看,请选择分析 > Chrome 追踪格式查看器 > 加载 JSON 文件。
可视化事件
时间线视图显示追踪事件的图形表示和所有记录事件的压缩视图。
时间线中的每个类别描述应用程序中的一个线程。将鼠标光标移至行中的一个事件(5)以查看其持续时间和事件类别。要仅在选中事件时显示信息,请禁用将事件信息用作鼠标悬停按钮(4)。
概要(10)总结了收集数据的时间段。拖动缩放范围(8)或点击概要进行移动。要切换到事件,选择跳转到前一个事件和跳转到下一个事件按钮(1)。
选择显示缩放滑块按钮(2)以打开一个可以用来设置缩放级别的滑块。您还可以拖动缩放手柄(9)。要重置默认缩放级别,右键单击时间线打开上下文菜单,并选择重置缩放。
选择(限制到线程)按钮(6)以选择要显示的线程。
选择事件范围
您可以选择事件范围(7)以查看它所代表的时间或缩放到跟踪的特定区域。选择选择范围按钮(3)以激活选择工具。然后单击时间线以指定事件范围的开始。拖动选择手柄以定义范围的结束。
您还可以使用事件范围来测量两个连续事件之间的延迟。在第一个事件的结束和第二个事件的开始之间放一个范围。持续时间字段显示事件的延迟(以毫秒为单位)。
要缩放到事件范围,双击它。
要删除事件范围,关闭选择对话框。
查看统计信息
统计视图显示了时间线上每个函数包含的样本总数以及当它位于堆栈顶部时(称为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中,您可以在菜单 > 配置 > 内核黑客 > 跟踪器中激活上述选项。
安装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
和write
由I/O操作触发nanosleep
、futex
和poll
解释调度器切换ioctl
控制GPU和显示
将LTTng数据转换为CTF
ctf2ctf工具使用babeltrace
解析二进制通用跟踪格式(CTF)并将其转换为Chrome跟踪格式(CTF)。它执行以下自定义任务以使记录更具可读性
- 将文件描述符映射到文件名
- 将页面错误映射到文件名
- 使用名称对中断和块设备进行注解
- 将UTF-16 QString数据转换为UTF-8字符串
- 计数内存页面分配
要生成包含Chrome跟踪格式跟踪数据的JSON文件,请在命令行中输入以下命令
ctf2ctf -o trace.json path/to/lttng trace/
©2024 Qt公司版权所有。本文档的文档贡献是各自所有者的版权。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt及其相关标志是芬兰的Qt公司及/或在其他国家的商标。所有其他商标均为其各自所有者的财产。