如何通过Tracealyzer实现Linux系统的跟踪?

描述

Tracealyzer是Percepio 公司开发的一款可视化跟踪工具, 目前它提供了30多种相互关联的运行时行为视图,支持裸机、FreeRTOS、μC/OS-III、Zephyr、ThreadX、VxWorks、Linux系统的跟踪。能够帮助开发人员加快固件的开发,减少对系统验证和性能优化所需要的时间。

本文将介绍如何通过Tracealyzer实现Linux系统的跟踪。

1)在Linux主机上安装Tracealyzer

Tracealyzer应用可以运行在Windows系统和Linux系统上,如果在在Linux系统上安装应用,需Mono框架支持。

可以参考Tracealyzer应用程序目录中的RunningOnLinux.txt。其中包含针对某些Linux发行版的附加说明。

2)在目标系统设置LTTng

在运行Linux系统的目标设备上安装LTTng(Linux Trace Toolkit next generation),具体步骤与使用的目标系统相关。为了熟悉LLTng,可以先在主机上安装。在Ubuntu系统上,只需要几个apt-get命令。

确保运行跟踪的用户位于tracing group组,或者使用root用户进行跟踪。

在某些情况下,你需要在记录跟踪之前以root用户身份启动lttng -sessiond。

安装LLTng并确保用户位于tracing group后,可以创建一个简单的跟踪,例如:

lttng create

lttng enable-event -k sched_*

lttng add-context -k -t pid

lttng add-context -k -t ppid

lttng start

# Run some test command to get more activity in the trace echo “Hello world” | wc

lttng stop

lttng destroy

如果设置正确,将在~/ ltng -traces中记录跟踪信息。在Tracealyzer中选择File ->Open→Open Folder加载trace文件。

3)在Tracealyzer中查看LTTng跟踪记录

在Linux系统中,使用Tracealyzer应用目录中的launch-tz.sh脚本启动Tracealyzer。

$ cd Tracealyzer--linux64

$ ./launch-tz.sh

如果不熟悉Tracealyzer,可以参考https://percepio.com/tag/tzlinux/下的Linux跟踪系列文章。

接下来,阅读Tracealyzer用户手册。用户手册可以在Help菜单中找到。建议阅读Views、Tools、Event Mapping、User Events和Intervals and State Machines章节。TraceRecorder的部分仅适用于RTOS跟踪。

确保在设置中启用了“Raw Events”,参见File ->Settings->Project Settings->Performance Settings,确保“Include Raw Events”项选中。

下一步是从目标系统获取LTTng跟踪记录。首先,使用File ->Open->Open Folder并选择root下跟踪文件夹,可以打开上一步中记录的跟踪信息。 

更简便的方法是使用Trace菜单中的Tracealyzer Library Tool,用户可以使用SSH连接直接从Tracealyzer应用中控制和下载跟踪。

 

Target Library工具

使用Target Library,你可以设置目标配置文件,以便于访问。使用New按钮创建一个新的配置文件,设置目标地址,用户名和密码或私钥文件。配置文件创建完成后,通过Connect按钮连接到目标。

Linux系统

连接后,Target Library界面将打开一个新标签,其中包含三个主要部分,跟踪会话控制面板、命令日志和命令详细信息框。单击Start New Session按钮启动新会话。默认情况下,已经定义了一个TzTrace会话,它被预先配置为包括scheduling调度、syscalls系统调用、signals信号和UST事件。用户可以使用Sessions和Channels Editor创建自己的设置。

 

Quick Connect选项

Target Library工具还提供了一个“Quick Connect”选项,位于左下角,允许用户在一个字符串中指定所有参数,例如:

host=raspberrypi;user=pi;pass=raspberry;

Quick Connect选项的完整列表如下:

host -目标的主机名或地址

port - SSH端口(默认为22)

myhost -目标端看到的主机地址,可以不指定,但如果目标无法查找主机的主机名,则需显式指定。

user—要连接的用户

pass -用户的密码

keyFile -用于公钥身份验证的密钥文件,注意F大写。

cmdname - lttng命令的名称。默认为lttng,但在使用前缀或类似的情况下可以重写。

输入连接字符串后,即可以使用 “Connect”按钮进行连接。这需要主机已安装lttng -relayd工具,通常使用发行版的lytng -tools包安装。如果在Windows主机上运行Tracealyzer,则需要使用Windows Services For Linux,并确保在该环境中安装并可访问lttng -relayd。

为了获得最佳体验,我们建议在包含调度事件的内核通道上启用pid和ppid上下文字段。在跟踪用户空间事件(UST)时,建议启用vtid上下文。这将有助于Tracealyzer在某些特殊情况下正确呈现事件,特别是涉及多核系统中的迁移。

 

用于Linux跟踪的Tracealyzer特性

当查看LTTng跟踪信息时,Tracealyzer提供了专为Linux系统设计的分析功能:

Signals And Syscalls资源管理器工具,可以帮助分析进程如何通过系统调用与内核交互。例如,它可以让你跟踪正在访问的文件。它将尝试帮助你跟踪文件描述符(有一些限制),并帮助识别失败的调用。它可以显示每个线程、进程或进程树的系统调用列表。此外,它还可以展示信号是如何产生和传递的。

syscalls plot绘制系统调用的持续时间。它支持两种模式:执行时间和响应时间。前者将只考虑线程处于活动状态时的时间,而后者将包括线程切换出(即阻塞)的时间。

Communication flow view视图具有特定于linux的模式,可以通过view菜单访问。它支持进程树模式、信号模式和文件描述符模式。后者可以帮助您跟踪进程如何通过管道等进行通信。

如果在主跟踪视图或事件日志中选择raw event并右键单击它,则可以向快速绘图中添加数字字段。这可以用于任何事件类型,包括自己的用户空间跟踪事件。

 

Linux事件

Tracealyzer内置了对以下类型的Linux内核事件的感知:

调度事件(内核域中的sched_*)

信号事件(内核域中的signal_*)

IRQ和SoftIRQ事件(内核域的irq_*)

系统调用(在内核域中--sycall -a)

其他事件将以“Raw Events”的形式呈现。默认情况下,Tracealyzer不会解释这些事件,只会在跟踪视图中显示为事件标签(即那些具有青色背景色的事件标签),并且也会在事件日志中列出。

注意,Raw Events可以通过“Event Interpretation”来配置,以创建“User Events”。这些可以在用户事件信号图中绘制,并转换为状态机或自定义间隔。请参阅Tracealyzer用户手册中的“Event Mapping”、“User Events”和“Intervals and State Machines”章节。

Linux系统

Tracealyzer目标库使用LTTng接口,通过SSH连接到目标系统上的LTTng。LTTng接口对快照的支持有限。用户也可以通过终端手动控制LTTng。然后将跟踪目录传输到主机,使用File ->Open Folder打开。

缓冲区覆盖不均匀的跟踪可能会有问题,多核Linux系统上的快照跟踪有时就是这种情况。不均匀缓冲区覆盖,指的是不同的LTTng通道或事件流覆盖不同时间段的场景。如果为一个核调度数据的时间为30秒,而为另一个核调度数据的时间只有5秒,那么这些时间不一定在跟踪的开始或结束时对齐。这使得Tracealyzer很难同步调度跟踪。这个问题可以通过确保捕获整个跟踪来避免,例如通过将跟踪流传输到目标文件系统(存储在目标上)。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分