开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

运行HLCperf

HLCperf介绍

Hlcperf是一个用于测试HLC库的工具,支持开源ubr、tcp和udp测试,调用方式如下。

1
taskset -c [cpu核] /opt/hlc/bin/hlcperf [一级命令]

其他常用命令及其说明如表1所示。

表1 常用命令说明

命令

描述

help

输出说明信息

ubr

进入ubr视图(HLC基础通信协议)

tcp

进入tcp视图

udp

进入udp视图

Ubr测试

  1. 使用一级命令ubr,进入Ubr视图。
  2. Ubr视图结果如下。
    • server端示例。
      ubr>listen 127.0.0.1:50010
      Create listener success.
      Listen fd: 100
      ubr>accept 100
      Listener accept success.
      Server fd: 140
      ubr>recv 140 1024 100 10
      ubr>Recv cnt: 10.
      Recv success.
      ubr>rtts 140 240 2000 10000
      Rtts cnt: 10000.
      Rtts success.
    • client端示例。
      ubr>connect 127.0.0.1:50015 127.0.0.1:50010
      Connect to server [127.0.0.1:50010] success.
      Client fd: 120
      ubr>send 120 1024 100 10
      ubr>Send cnt: 10.
      Send success.
      ubr>rttc 120 240 2000 10000
      Rttc cnt: 10000.
      Rttc success.

Ubr视图命令

命令

命令格式

使用说明

switchcheck

switchcheck [on/off]

数据一致性校验开关。

connect

connect [client_ip:client_port] [server_ip:server_port]

建立从客户端地址[client_ip:client_port]到服务器地址[server_ip:server_port]的连接。

listen

listen [server_ip:server_port]

在[server_ip:server_port]上侦听连接请求。

accept

accept [listenfd]

接受侦听套接字[listenfd]上的连接请求,返回新的连接套接字。

close

close [fd]

关闭文件描述符[fd]对应的套接字。

send

send [fd] [blocksize] [iops] [times]

通过连接套接字[fd]发送数据,每次发送[blocksize]大小的数据块,重复[times]次,每秒操作次数[iops]。

recv

recv [fd] [bufLen] [iops] [times]

通过连接套接字[fd]接收数据,接收缓冲区大小为[bufLen],重复[times]次,每秒操作次数[iops]。

rttc

rttc [connectfd/acceptfd] [blocksize] [iops] [times]

作为客户端测量往返时间,使用连接套接字[connectfd/acceptfd],每次发送[blocksize]大小的数据,重复[times]次,每秒操作次数[iops]。

rtts

rtts [connectfd/acceptfd] [buflen] [iops] [times]

作为服务器端测量往返时间,使用连接套接字[connectfd/acceptfd],接收缓冲区大小为[buflen],重复[times]次,每秒操作次数[iops]。

timeout

timeout [1:connect front map/2:connect after map/3:accept front map/4:connect after map/5:close] [time]

设置超时时间,time=0时表示无超时限制。

getshmaddr

getshmaddr [shm_name]

获取共享内存的映射地址。

Tcp测试

  1. 使用一级命令tcp,进入Tcp视图。
  2. Tcp视图结果如下。
    • server端示例。
      tcp>listen 127.0.0.1:50010
      Listen fd: 7.
      addr: 0xffffa8200000, name: HLC_127.0.0.1:50010_LISTENER
      tcp>accept 7
      Accept serverFd=7 success, acceptFd=8, client addr="127.0.0.1" port=50015.
      tcp>rtts 8 240 0 10000 block
      Rtts success.
      tcp>close 7
      Close fd=7 success.
      tcp>close 8
      Close fd=8 success.
    • client端示例。
      tcp>connect 127.0.0.1:50015 127.0.0.1:50010
      Connect to server success, fd=16.
      Export addr: 0xffff80200000, name: HLC_127.0.0.1:50015_C.
      Import addr: 0xffff36000000, name: HLC_127.0.0.1:50015_S.
      tcp>rttc 7 240 0 10000 block
      Rttc success.
      tcp>close 7
      Close fd=7 success.

Tcp视图命令

命令

命令格式

使用说明

setsockmode

setsockmode [nonblock/block]

设置套接字阻塞模式。

-nonblock:非阻塞模式。

-block:阻塞模式。

setmode

setmode [none/select/epoll] [lt/et] [timeout]

设置I/O多路复用模式。

-none/select/epoll:I/O模型选择。

-lt/et:水平触发/边缘触发(仅epoll有效)。

-timeout:超时时间(毫秒)。

connect

connect [client_ip:client_port] [server_ip:server_port]

建立客户端连接。

-client_ip:client_port:客户端本地IP和端口。

-server_ip:server_port:服务器目标IP和端口。

listen

listen [server_ip:server_port]

创建侦听套接字。

-server_ip:server_port:服务器侦听IP和端口。

accept

accept [listenfd] [concurrent] [threadNum]

接受客户端连接。

-listenfd:侦听套接字描述符。

-concurrent:并发。

-threadNum:并发数。

close

close [fd]

关闭套接字连接。

-fd:要关闭的文件描述符。

send

send [fd] [blocksize] [iops] [times]

发送数据测试。

-fd:连接套接字描述符。

-blocksize:每次发送的数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

recv

recv [fd] [bufLen] [iops] [times]

接收数据测试。

-fd:连接套接字描述符。

-bufLen:接收缓冲区长度(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

rttc

rttc [connectfd/acceptfd] [blocksize] [iops] [times]

客户端RTT(往返时间)测试。

-connectfd/acceptfd:连接套接字描述符。

-blocksize:测试数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

rtts

rtts [connectfd/acceptfd] [buflen] [iops] [times]

服务器端RTT(往返时间)测试。

-connectfd/acceptfd:连接套接字描述符。

-buflen:接收缓冲区长度(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

timeout

timeout [1:connect front map/2:connect after map/3:accept front map/4:connect after map/5:close] [time]

设置超时时间,time=0时表示无超时限制。

rttcs

rttcs [connectfd/acceptfd] [blocksize] [iops] [times] [nonblock/block]

主备场景客户端RTT(往返时间)测试。

-connectfd/acceptfd:连接套接字描述符。

-blocksize:测试数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

rttss

rttss [connectfd/acceptfd] [blocksize] [iops] [times] [nonblock/block]

主备场景服务器端RTT(往返时间)测试。

-connectfd/acceptfd:连接套接字描述符。

-buflen:接收缓冲区长度(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

setstandby

setstandby [activefd] [standbyfd]

设置主备链路。

-activefd:主链路fd。

-standbyfd:备链路fd。

getshmaddr

getshmaddr [shm_name]

获取共享内存的映射地址。

switchwarmup

switchwarmup <on/off>

设置是否在rttc/rtts过程中预热,默认为开启。

Udp测试

  1. 使用一级命令udp,进入Udp视图。
  2. Udp视图结果如下。
    • server端示例。
      HlcInit success.
      Current PID=2691487
      Current process run in core=97
      18 threads are reassigned to the hlc timer cores.
      Socket created successfully fd:16.
      udp>bind 127.0.0.1:50001
      Listener addr: 0xffff6ca00000, shmname: HLC_7F000001:C351_LISTENER.
      Bind addr success.
      udp>rtts 256 1 20
      Rtts success.
      udp>close
      Socket close success.
      udp>exit
    • client端示例。
      HlcInit success.
      Current PID=2988498
      Current process run in core=100
      18 threads are reassigned to the hlc timer cores.
      Socket created successfully fd:16.
      udp>bind 127.0.0.1:50000
      Listener addr: 0xffff3d000000, shmname: HLC_7F000001:C350_LISTENER.
      Bind addr success.
      udp>rttc 127.0.0.1:50001 256 1 20
      Rttc success.
      udp>close
      Socket close success.
      udp>exit

Udp视图命令

命令

命令格式

使用说明

setmode

setmode

设置工作模式。

-none/select/epoll:选择I/O多路复用机制。

-lt/et:设置epoll的模式(水平/边缘触发)。

-timeout:超时时间(毫秒)。

setsockopt

setsockopt [multi] [multicast_ip]

设置套接字opt。

目前只支持加入组播域选项。

-multi:加入组播域。

-multicast_ip:组播域ip(需要在配置文件范围内)。

bind

bind [local_ip:port]

绑定本地地址和端口。

-local_ip:port:本地IP地址和端口号。

close

close

关闭当前套接字连接。

send

send [remote_ip:remote_port] [blocksize] [iops] [times]

发送数据。

-remote_ip:remote_port:目标IP和端口。

-blocksize:数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

sendto

sendto [remote_ip:remote_port] [blocksize] [iops] [times]

发送数据(无连接)。

-remote_ip:remote_port:目标IP和端口。

-blocksize:数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

recv

recv [remote_ip:remote_port] [blocksize] [iops] [times]

接收数据(面向连接)。

-remote_ip:remote_port:期望的源IP和端口。

-blocksize:数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

recvfrom

recvfrom [blocksize] [iops] [times]

接收数据(无连接)。

-blocksize:数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

rttc

rttc [remote_ip:remote_port] [blocksize] [iops] [times]

客户端RTT(往返时间)测试。

-remote_ip:remote_port:客户端ip地址。

-blocksize:测试数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

rtts

rtts [buflen] [iops] [times]

服务器端RTT(往返时间)测试。

-buflen:接收缓冲区长度(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

mrttc

mrttc [remote_ip:remote_port] [blocksize] [iops] [times] [nodeInGroup]

客户端组播RTT(往返时间)测试。

-remote_ip:remote_port:客户端ip地址。

-blocksize:测试数据块大小(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

-nodeInGroup:组播域编号。

mrtts

mrtts [buflen] [iops] [times]

服务器端组播RTT(往返时间)测试。

-buflen:接收缓冲区长度(字节)。

-iops:每秒操作次数。

-times:测试重复次数。

printshm

printshm

打印共享内存虚拟地址信息。

getshmaddr

getshmaddr [shm_name]

获取共享内存的映射地址。

switchwarmup

switchwarmup <on/off>

设置是否在rttc/rtts及mrttc/mrttts过程中预热,默认为开启。

getrecvfromIndex

getrecvfromIndex

记录recvfrom接口当前收到的UDP报文计数。

日志说明

Hlcperf会在/opt/hlc/run路径下生成以下内容。

  • delay_info_[pid].txt:时延统计信息(P50/P90/P95/P99/AVG分别表示50/90/95/99分位数和平均值)。
  • link_info_[pid].txt:建链/断链信息。
  • ub_event_[pid].txt:记录UB_event故障上报触发次数。
  • full_delay_info_[pid]/full_delay_info_[num]_[pid].csv:时延统计表。
  • heartbeat_<pid>_<fd>.txt:记录心跳触发信息。

    pid:为该链路所在进程的进程号。

    fd:为该链路对应的socket文件描述符。