鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

K-NET数据采集分析使用示例

使用示例

  1. 源文件为test_posix.c,编译源文件生成二进制文件test_posix。
    gcc /home/demo/test_posix.c -o /home/demo/test_posix -pthread
  2. “/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个或多个。

  3. 查看生成的数据文件。
    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个数据文件。

  4. 查看数据文件内容。
    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
  5. “/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 网络数据概览
    图2 时序图
    图3 热力图
    表1 网络数据概览图说明

    数据

    数据说明

    网络I/O占比

    获取和网络通讯相关的读/写等I/O函数,累加耗时,得到网络I/O耗时;获取应用的user time,认为是用户态耗时。

    网络通信时延

    累加所有读/写等接口耗时,除以总包数,以1ms为间隔。

    通讯带宽

    累加所有读/写等接口包长,除以时间,以1ms为间隔。

    包率

    累加所有读/写等接口个数,除以时间,以1ms为间隔。

    表2 时序图说明

    数据

    数据说明

    线程数

    运行的线程总数。

    消息数

    发送、接收、读、写的消息总数。

    序号

    行数。

    线程

    线程号。

  6. 以工具提供的兼容性配置文件(“/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()函数不兼容。