K-NET数据采集分析使用示例
使用示例
- 源文件为test_posix.c,编译源文件生成二进制文件test_posix。
gcc /home/demo/test_posix.c -o /home/demo/test_posix -pthread
- 以“/home/demo/config.txt”配置文件,test_posix二进制文件为例,采集二进制运行时的POSIX函数调用及参数信息。
cd /home/demo/ LD_PRELOAD=./librecord.so RECORD_CONF=config.txt RECORD_OUT_DIR=/home/demo/data/ ./test_posix
librecord.so、libglib-2.0.so、libgobject-2.0.so在/home/demo/目录下。
config.txt配置文件内容:
socket 1 bind 1 listen 1 connect 1 getpeername 1 getsockname 1 send 1 recv 1 read 1 write 1 fcntl 1 accept4 1 setsockopt 1 close 1 signal 1 fork 1 select 1
在“/home/demo/data/”路径下生成对应的数据文件,数据文件可以是1个或多个。
- 查看生成的数据文件。
ls /home/demo/data/
返回信息如下:
record.3649201 record.3649202 record.3649259 record.3649260 record.3649261 record.3649262 record.3649263 record.3649264 record.3649265 record.3649266
在“/home/demo/data/”下生成10个数据文件。
- 查看数据文件内容。
vim /home/demo/data/record.3649201
record.3649201数据文件内容:
1 36702160 3649201 3649201 3649201 3649201 3111602 0 fork 36625210 36910470 3649202 0 0 socket 1037031630 1037053970 4 3 2 1 0 0 connect 1037099200 1037167150 0 3 4 P1{sin_family:2,sin_port:33315,sin_addr:{s_addr:16777343}} 16 16777343 39623 0 getsockname 1037304820 1037306380 0 3 4 P1{sin_family:2,sin_port:39623,sin_addr:{s_addr:16777343}} P1{16} 0 getpeername 1037384790 1037385880 0 3 4 P1{sin_family:2,sin_port:33315,sin_addr:{s_addr:16777343}} P1{16} 0 fcntl 1037458160 1037460140 2 3 4 3 0 0 fcntl 1037465900 1037467060 0 3 4 4 2050 0 pthread_create 1037481550 1037544030 0 4 P1 P0 P1 P1 0 pthread_create 1037551390 1037579390 0 4 P1 P0 P1 P1 0 pthread_create 1037585300 1037668480 0 4 P1 P0 P1 P1 0 pthread_create 1037675450 1037702300 0 4 P1 P0 P1 P1 3 18073
- 以“/home/demo/data/”数据文件存放路径为例,展示时序图及网络数据。
devkit advisor knet seq-diag -d /home/demo/data -o /home/demo
执行后会在“/home/demo”目录下生成knet-analysis_时间戳.tar.gz压缩包。将压缩包下载到本地进行解压,解压后打开文件夹并运行knet-analysis.exe文件,在打开的界面中分别展示网络数据概览和更加精细的时序图信息,如图1和图2所示。当一组消息簇包含的信息过多,则使用热力图显示整体的消息分布,如图3。单击热力图
下钻 到时序图,提高信息的识别。表1 网络数据概览图说明 数据
数据说明
网络I/O占比
获取和网络通讯相关的读/写等I/O函数,累加耗时,得到网络I/O耗时;获取应用的user time,认为是用户态耗时。
网络通信时延
累加所有读/写等接口耗时,除以总包数,以1ms为间隔。
通讯带宽
累加所有读/写等接口包长,除以时间,以1ms为间隔。
包率
累加所有读/写等接口个数,除以时间,以1ms为间隔。
表2 时序图说明 数据
数据说明
线程数
运行的线程总数。
消息数
发送、接收、读、写的消息总数。
序号
行数。
线程
线程号。
- 以工具提供的兼容性配置文件(“/home/demo/compat_conf.json”)为例,展示兼容性。
devkit advisor knet compat -d /home/demo/data -c /home/demo/compat_conf.json
返回信息如下:
=====ERROR: some function calls do not satisfy conditions====== [Function call] socket 2 1 0 [Condition] Operation Not Allowed: Socket creation in child processes is forbidden. (PID: 3649202) [Function call] fcntl 4 3 0 [Condition] arg 2 should only have these flags: 2048 [Function call] fcntl 4 4 2050 [Condition] arg 2 should only have these flags: 2048 [Function call] fcntl 4 3 0 [Condition] arg 2 should only have these flags: 2048 [Function call] fcntl 4 4 2050 [Condition] arg 2 should only have these flags: 2048 [Function call] send 4 P1 11 0 [Condition] arg 3 should only have these flags: 64 ... =============================================================== K-NET tools executed successfully.
从回显信息可以看出,socket()、fcntl()、send()函数不兼容。
父主题: K-NET数据采集分析