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按钮连接到目标。
连接后,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”章节。
Tracealyzer目标库使用LTTng接口,通过SSH连接到目标系统上的LTTng。LTTng接口对快照的支持有限。用户也可以通过终端手动控制LTTng。然后将跟踪目录传输到主机,使用File ->Open Folder打开。
缓冲区覆盖不均匀的跟踪可能会有问题,多核Linux系统上的快照跟踪有时就是这种情况。不均匀缓冲区覆盖,指的是不同的LTTng通道或事件流覆盖不同时间段的场景。如果为一个核调度数据的时间为30秒,而为另一个核调度数据的时间只有5秒,那么这些时间不一定在跟踪的开始或结束时对齐。这使得Tracealyzer很难同步调度跟踪。这个问题可以通过确保捕获整个跟踪来避免,例如通过将跟踪流传输到目标文件系统(存储在目标上)。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !