运行HLCperf
HLCperf介绍
Hlcperf是一个用于测试HLC库的工具,支持开源ubr、tcp和udp测试,调用方式如下。
1 | taskset -c [cpu核] /opt/hlc/bin/hlcperf [一级命令] |
其他常用命令及其说明如表1所示。
Ubr测试
- 使用一级命令ubr,进入Ubr视图。
- 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.
- server端示例。
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测试
- 使用一级命令tcp,进入Tcp视图。
- 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.
- server端示例。
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测试
- 使用一级命令udp,进入Udp视图。
- 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
- server端示例。
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文件描述符。