点击查看系列文章目录
在用 deepstream 或 gstreamer 开发时,需要有一个分析 pipeline 的工具,用来查看pipeline的一些信息,比如每个 element 的时延、buffer 信息、cpu 利用率等内容。虽然我们之前在《GStreamer基础教程11:调试工具》介绍过 gst-debug 和生成 pipeline 图的方法,但只能看到结构信息,运行过程中的信息看不到。而 gst-shark 就是这样一个工具,这里有一个PPT介绍可以了解下。
GstShark是Ridgerun的一个开源项目,为GStreamer 1.7.1(及更高版本)提供基准和性能分析工具。它包括用于生成调试信息的跟踪器以及一些用于分析调试信息的工具。GstShark的跟踪器包含以下类型:
Tracer | Description |
---|---|
InterLatency | Measures the latency time at different points in the pipeline. |
ProcTime | Measures the time an element takes to produce an output given the corresponding input. |
Framerate | Measures the amount of frames that go through a src pad every second. |
ScheduleTime | Measures the amount of time between two consecutive buffers in a sink pad. T |
CPUUsage | Measures the CPU usage every second. In multiprocessor systems this measurements are presented per core. |
Graphic | Records a graphical representation of the current pipeline. |
Bitrate | Measures the current stream bitrate in bits per second. |
Queue Level | Measures the amount of data queued in every queue element in the pipeline. |
Buffer | Prints information of every buffer that passes through every sink pad in the pipeline. This information contains PTS and DTS, duration, size, flags and even refcount. |
生成的结果有两种类型
Data | Description |
---|---|
CTF trace files | Trace files that comply with the standard Common Trace File format. |
Pipeline diagram | Useful visualization of the pipeline generated by the graphic tracer. |
有两种工具可以查看结果,分别是 gstshark-plot 和 Eclipse plugin,由于 Eclipse plugin 目前只支持 cpuusage 和 framerate 两种结果的图表显示,因此本文不做太多介绍,感兴趣的可以从该链接中查看
Tool | Description |
---|---|
GstShark plot | Octave scripts that process the trace files into easy-to-understand charts. |
Eclipse plugins | Experimental support for loading trace files in to Eclipse and providing charts. |
接下来对安装和使用方法进行介绍
安装依赖
sudo apt install libgstreamer1.0-dev
sudo apt install graphviz libgraphviz-dev
sudo apt install octave epstool babeltrace
下载源码
git clone https://github.com/RidgeRun/gst-shark.git
cd gst-shark
./autogen.sh $OPTIONS # OPTIONS 选项根据下表选择
make
sudo make install
System | Configure Option |
---|---|
Ubuntu 64 bits | --prefix /usr/ --libdir /usr/lib/x86_64-linux-gnu/ |
RidgeRun's Embedded FS | --prefix /usr/ |
MacOSX | --prefix /opt/local/ |
Raspbian/Raspberry Pi | --prefix /usr/lib/ --libdir /usr/lib/arm-linux-gnueabihf/ |
Tegra X1/X2 | --prefix /usr/ --libdir /usr/lib/aarch64-linux-gnu/ |
如果配置的时候报错如下
configure: error: You need to have gtk-doc >= 1.12 installed to build GstShark
configure failed
则补充安装下
sudo apt-get install gtk-doc-tools
接下来我们以 proctime 为例来介绍如何使用该工具来分析 pipeline 中每个插件的耗时,我们以deepstream 5.0 SDK中的 deepstream-test1 为例。首先在 test1 目录下编译源码
$ cd apps/deepstream-test1/
$ make
生成可执行文件之后,使用以下方式运行
GST_DEBUG="GST_TRACER:7" GST_TRACERS="proctime" ./deepstream-test1-app ../../../../samples/streams/sample_720p.h264
运行完之后会在当前目录下生成 gstshark_2020-**-**_**:**:** 文件,** 是系统对应的日期和时间,文件夹里边有两个文件,记录该文件夹的绝对路径
gstshark_2020-06-19_18:06:07/
├── datastream
└── metadata
这个数据就是我们上一节提到的 CTF trace files,可以使用该数据来生成可视化文件
在 gst-shark 源码目录下,有一个 scripts/graphics 文件夹,里边保存了我们要用到的 gstshark-plot 工具,所以先进入到工具目录中
cd ${GSTSHARK_REPO}/scripts/graphics
我们可以使用 help 指令来查看该工具的使用方法
$ ./gstshark-plot --help
Ridgerun Gstshark
usage : ./gstshark-plot DIR [options]
DIR Input trace directory
--help This help message
-s, --savefig [pdf|png] Save the graphics generated
FORMAT: Output file format, png or pdf
(default: pdf)
-p, --persist keep octave console open
-l, --legend
Indicate the position of the legend
over each graphic generated
extern: display the legend over an external window
(default: inside)
其中
- -s 可以指定输出文件的格式是 pdf 或者是 png。当使用 pdf 的时候,输出名字为 tracer.pdf,当使用 png 的时候,可以根据跟踪类型的名字来保存图片。
- -l 可以指定图例的位置是放到图里边还是外边,从而防止图例与图中的线条重叠,默认是在图片里边
接下来我们使用该工具来转化上一步生成的结果
./gstshark-plot /yourpath/deepstream-test1/gstshark_2020-06-19_18:06:07 -s png
生成结果如下
然后就可以根据这个图来查找问题或瓶颈所在。