此工具 git 地址https://github.com/Mellanox/sockperf
sockperf是基于套接字API的网络基准测试实用程序,旨在测试高性能系统的性能(延迟和吞吐量)(它也适用于测试常规网络系统的性能)。它涵盖了大多数套接字API调用和选项。
具体来说,除了标准的吞吐量测试之外,sockperf还执行以下操作:
1、以亚纳秒分辨率测量每个离散数据包的延迟(使用TSC寄存器以非常低的开销对CPU滴答进行计数)。
2、对ping-pong 模式和负载模式下的延迟都执行以上操作。这意味着即使在每秒数百万个数据包的负载下,我们也可以测量单个数据包的延迟(无需等待数据包的回复,再按时发送后续数据包)
3、通过提供直方图以及数据包延迟的各个百分位数(例如:中位数,最小值,最大值,99%百分数等)来启用峰值分析,(这是平均值和标准偏差的补充)。此外,sockperf还提供了所有数据包的tx / rx时间的完整日志,可以使用外部工具(例如MS-Excel或matplotlib)进行进一步分析-所有这些都不会影响基准本身。
4、支持许多可选设置,以很好地覆盖套接字API和网络配置,同时在快速路径中仍保持非常低的开销,以实现最干净的结果。
安装方式: centos 可以直接 yum -y update 更新之后 yum -y sockperf 安装
ubuntu ,debian需要编译安装,步骤如下:
wget -q https://github.com/Mellanox/sockperf/archive/3.6.tar.gz
tar -zxf 3.6.tar.gz
cd sockperf-3.6/
sudo apt-get update
sudo apt-get -y install automake
./autogen.sh && ./configure && make && make install
注意:其他linux 系统 ,下载解压运行 ./autogen.sh 或者make 后可能会报错,不用害怕,根据提示安装缺少的依赖就行了,有一些系统会缺少 gcc-c++ ,automake ,make
工具介绍:(直接谷歌翻译出来的,使用命令查看原文介绍更准确)
安装后运行命令:./sockperf –help
sockperf是用于测试网络延迟和吞吐量的工具。
版本3.5-no.git
用法:sockperf <子命令> [选项] [参数]
键入:’sockperf –help’以获取有关特定子命令的帮助。
键入:’sockperf –version’以查看程序版本号。
可用的子命令:
help(h,?)显示支持的命令列表。
欠载(ul)运行sockperf客户端以进行负载测试下的延迟。
ping-pong(pp)在songperf模式下运行sockperf客户端进行延迟测试。
回放(pb)运行sockperf客户端,以根据时间轴和消息大小使用预定义的流量回放来进行延迟测试。
吞吐量(tp)运行sockperf客户端进行单向吞吐量测试。
服务器(sr)作为服务器运行sockperf。
有关其他信息,请访问我们的网站http://github.com/mellanox/sockperf,请参阅自述文件,或键入’sockperf –help’。
sockperf ul 模式介绍:运行命令./sockperf ul –help
欠载(ul):运行sockperf客户端以进行负载测试下的延迟。
用法:sockperf欠载[选项] [参数] …
sockperf ul-i ip [-p端口] [-m message_size] [-t时间] [–data_integrity]
sockperf ul-f文件[-F s / p / e] [-m message_size] [-r msg_size_range] [-t时间]
选项:
-H,-?–help,-usage-显示帮助消息并退出。
–tcp-使用TCP协议(默认UDP)。
-i –ip-侦听/发送到ip 。
-p –port-监听/连接到端口(默认为11111)。
-f –file-从文件中读取连接列表(与-F选项配对使用)。
-F –iomux-type-多个文件描述符的类型处理[s | select | p | poll | e | epoll | r | recvfrom | x | socketxtreme](默认epoll)。
–timeout-将选择/轮询/轮询超时设置为,-1表示无限(默认为10毫秒)。
-a –activity-通过打印“。”来测量活动。最后处理的条消息。
-A-活动-通过打印最后处理的条消息的持续时间来测量活动。
–tcp-avoid-nodelay-停止/立即开始传送TCP消息(启用/禁用Nagel)。默认设置为“禁用Nagel”,但“吞吐量”中默认设置为“禁用Nagel”。
–tcp-skip-blocking-send
-启用非阻塞发送操作(默认为OFF)。
–tos-允许设置tos
–mc-rx-if-设置接收多播消息的接口的地址(可以是路由表以外的其他地址)。
–mc-tx-if-设置在其上传输多播消息的接口的地址(可以是路由表之外的其他地址)。
–mc-loopback-enable-启用mc环回(默认禁用)。
–mc-ttl-限制消息的生存期(默认为2)。
–mc-source-filter-设置允许接收的多播消息源的地址<ip,hostname>。
–uc-reuseaddr-启用单播重用地址(默认禁用)。
–lls-通过套接字选项打开LLS(值=用于轮询的usec)。
–buffer-size-以字节为单位设置套接字接收/发送缓冲区的总大小(默认情况下为系统定义)。
–nonblocked-打开非阻塞套接字。
–recv_looping_num-设置sockperf以遍历recvfrom()直到EAGAIN或良好接收的数据包(对于无限,为-1)必须与–nonblocked一起使用(默认为1)。
–dontwarmup-启动时不发送热身消息。
–pre-warmup-wait-在发送热身消息之前等待的时间(秒)。
–vmazcopyread-使用VMA的零副本读取API(请参阅VMA的自述文件)。
–daemonize-作为守护程序运行。
–no-rdtsc-抽空时不要使用寄存器;而是使用单调时钟。
–load-vma-即使不使用LD_PRELOAD,也可以动态加载VMA。
–rate-limit-使用速率限制(packet-pacing),必须在VMA_RING_ALLOCATION_LOGIC_TX模式下运行VMA。
–set-sock-accl-在运行前设置套接字加速(某些Mellanox系统可用)
-d –debug [xtrnaw7 @ t540p / var / tmp / jwm / bin] $ ./sockperf ul-帮助
欠载(ul):运行sockperf客户端以进行负载测试下的延迟。
用法:sockperf欠载[选项] [参数] …
sockperf欠载-i ip [-p端口] [-m message_size] [-t时间] [–data_integrity]
sockperf欠载-f文件[-F s / p / e] [-m message_size] [-r msg_size_range] [-t时间]
选项:
-打印额外的调试信息。
有效参数:
–srv-num-将客户端使用的服务器数量设置为N。
–sender-affinity-以列表格式将发件人线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–receiver-affinity-以列表格式将接收器线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–full-log-将所有消息发送/接收时间的完整日志转储为CSV格式的给定文件。
–giga-size-以千兆字节为单位打印大小。
–increase_output_precision
-将吞吐量输出的小数点后的位数增加(从3到9)。
–dummy-send-使用VMA的虚拟发送API而不是忙等待,必须高于常规msg速率。
可选:设置每秒虚拟发送速率(默认为10,000),用法:–dummy-send [ | max]
-t –time-运行秒(默认值为1,最大值= 36000000)。
–client_port-强制客户端绑定到特定端口(默认= 0)。
–client_ip-强制客户端绑定到特定的IP地址(默认= 0)。
-b –burst-控制每个突发中发送的消息的客户端数量。
–reply-every-设置回复消息之间的发送消息数(默认= 100)。
–mps-设置每秒的消息数(对于低负载模式,默认值为10000;对于乒乓和吞吐量模式,默认值为max;最大使用时为–mps = max;
支持–pps以实现旧兼容性)。
-m –msg-size-使用大小为个字节的消息(最小默认值为14)。
-r –range-带有-m ,随机更改消息大小,范围为: ±。
sockperf pp 模式介绍: ./sockperf pp –help
ping-pong(pp):在songperf模式下运行sockperf客户端进行延迟测试。
用法:sockperf pp[选项] [参数] …
sockperf pp-i ip [-p端口] [-m message_size] [-t时间]
sockperf pp-f文件[-F s / p / e] [-m message_size] [-r msg_size_range] [-t时间]
选项:
-H,-?–help,-usage-显示帮助消息并退出。
–tcp-使用TCP协议(默认UDP)。
-i –ip-侦听/发送到ip 。
-p –port-监听/连接到端口(默认为11111)。
-f –file-从文件中读取连接列表(与-F选项配对使用)。
-F –iomux-type-多个文件描述符的类型处理[s | select | p | poll | e | epoll | r | recvfrom | x | socketxtreme](默认epoll)。
–timeout-将选择/轮询/轮询超时设置为,-1表示无限(默认为10毫秒)。
-a –activity-通过打印“。”来测量活动。最后处理的条消息。
-A-活动-通过打印最后处理的条消息的持续时间来测量活动。
–tcp-avoid-nodelay-停止/立即开始传送TCP消息(启用/禁用Nagel)。默认设置为“禁用Nagel”,但“吞吐量”中默认设置为“禁用Nagel”。
–tcp-skip-blocking-send
-启用非阻塞发送操作(默认为OFF)。
–tos-允许设置tos
–mc-rx-if-设置接收多播消息的接口的地址(可以是路由表以外的其他地址)。
–mc-tx-if-设置在其上传输多播消息的接口的地址(可以是路由表之外的其他地址)。
–mc-loopback-enable-启用mc环回(默认禁用)。
–mc-ttl-限制消息的生存期(默认为2)。
–mc-source-filter-设置允许接收的多播消息源的地址<ip,hostname>。
–uc-reuseaddr-启用单播重用地址(默认禁用)。
–lls-通过套接字选项打开LLS(值=用于轮询的usec)。
–buffer-size-以字节为单位设置套接字接收/发送缓冲区的总大小(默认情况下为系统定义)。
–nonblocked-打开非阻塞套接字。
–recv_looping_num-设置sockperf以遍历recvfrom()直到EAGAIN或良好接收的数据包(对于无限,为-1)必须与–nonblocked一起使用(默认为1)。
–dontwarmup-启动时不发送热身消息。
–pre-warmup-wait-在发送热身消息之前等待的时间(秒)。
–vmazcopyread-使用VMA的零副本读取API(请参阅VMA的自述文件)。
–daemonize-作为守护程序运行。
–no-rdtsc-抽空时不要使用寄存器;而是使用单调时钟。
–load-vma-即使不使用LD_PRELOAD,也可以动态加载VMA。
–rate-limit-使用速率限制(packet-pacing),必须在VMA_RING_ALLOCATION_LOGIC_TX模式下运行VMA。
–set-sock-accl-在运行前设置套接字加速(某些Mellanox系统可用)
-d –debug-打印其他调试信息。
有效参数:
–srv-num-将客户端使用的服务器数量设置为N。
–sender-affinity-以列表格式将发件人线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–receiver-affinity-以列表格式将接收器线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–full-log-将所有消息发送/接收时间的完整日志转储为CSV格式的给定文件。
–giga-size-以千兆字节为单位打印大小。
–increase_output_precision
-将吞吐量输出的小数点后的位数增加(从3到9)。
–dummy-send-使用VMA的虚拟发送API而不是忙等待,必须高于常规msg速率。
可选:设置每秒虚拟发送速率(默认为10,000),用法:–dummy-send [ | max]
-t –time-运行秒(默认值为1,最大值= 36000000)。
–client_port-强制客户端绑定到特定端口(默认= 0)。
–client_ip-强制客户端绑定到特定的IP地址(默认= 0)。
-b –burst-控制每个突发中发送的消息的客户端数量。
–mps-设置每秒的消息数(对于低负载模式,默认值为10000;对于乒乓和吞吐量模式,默认值为max;最大使用时为–mps = max;
支持–pps以实现旧兼容性)。
-m –msg-size-使用大小为个字节的消息(最小默认值为14)。
-r –range-带有-m ,随机更改消息大小,范围为: ±。
–data-integrity-执行数据完整性测试。
sockperf pb 模式介绍:./sockperf pb –help
playback (pb):根据时间轴和消息大小,使用预定义流量的回放运行sockperf客户端进行延迟测试。
用法:sockperf pd[选项] [参数] …
sockperf pd-i ip [-p端口] –data-file文件回放.csv
选项:
-H,-?–help,-usage-显示帮助消息并退出。
–tcp-使用TCP协议(默认UDP)。
-i –ip-侦听/发送到ip 。
-p –port-监听/连接到端口(默认为11111)。
-f –file-从文件中读取连接列表(与-F选项配对使用)。
-F –iomux-type-多个文件描述符的类型处理[s | select | p | poll | e | epoll | r | recvfrom | x | socketxtreme](默认epoll)。
–timeout-将选择/轮询/轮询超时设置为,-1表示无限(默认为10毫秒)。
-a –activity-通过打印“。”来测量活动。最后处理的条消息。
-A-活动-通过打印最后处理的条消息的持续时间来测量活动。
–tcp-avoid-nodelay-停止/立即开始传送TCP消息(启用/禁用Nagel)。默认设置为“禁用Nagel”,但“吞吐量”中默认设置为“禁用Nagel”。
–tcp-skip-blocking-send
-启用非阻塞发送操作(默认为OFF)。
–tos-允许设置tos
–mc-rx-if-设置接收多播消息的接口的地址(可以是路由表以外的其他地址)。
–mc-tx-if-设置在其上传输多播消息的接口的地址(可以是路由表之外的其他地址)。
–mc-loopback-enable-启用mc环回(默认禁用)。
–mc-ttl-限制消息的生存期(默认为2)。
–mc-source-filter-设置允许接收的多播消息源的地址<ip,hostname>。
–uc-reuseaddr-启用单播重用地址(默认禁用)。
–lls-通过套接字选项打开LLS(值=用于轮询的usec)。
–buffer-size-以字节为单位设置套接字接收/发送缓冲区的总大小(默认情况下为系统定义)。
–nonblocked-打开非阻塞套接字。
–recv_looping_num-设置sockperf以遍历recvfrom()直到EAGAIN或良好接收的数据包(对于无限,为-1)必须与–nonblocked一起使用(默认为1)。
–dontwarmup-启动时不发送热身消息。
–pre-warmup-wait-在发送热身消息之前等待的时间(秒)。
–vmazcopyread-使用VMA的零副本读取API(请参阅VMA的自述文件)。
–daemonize-作为守护程序运行。
–no-rdtsc-抽空时不要使用寄存器;而是使用单调时钟。
–load-vma-即使不使用LD_PRELOAD,也可以动态加载VMA。
–rate-limit-使用速率限制(packet-pacing),必须在VMA_RING_ALLOCATION_LOGIC_TX模式下运行VMA。
–set-sock-accl-在运行前设置套接字加速(某些Mellanox系统可用)
-d –debug-打印其他调试信息。
有效参数:
–srv-num-将客户端使用的服务器数量设置为N。
–sender-affinity-以列表格式将发件人线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–receiver-affinity-以列表格式将接收器线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–full-log-将所有消息发送/接收时间的完整日志转储为CSV格式的给定文件。
–giga-size-以千兆字节为单位打印大小。
–increase_output_precision
-将吞吐量输出的小数点后的位数增加(从3到9)。
–dummy-send-使用VMA的虚拟发送API而不是忙等待,必须高于常规msg速率。
可选:设置每秒虚拟发送速率(默认为10,000),用法:–dummy-send [ | max]
–reply-every-设置回复消息之间的发送消息数(默认= 100)。
–data-file-带有时间戳和消息大小的预先准备的CSV文件。
sockperf tp 模式介绍:./sockperf tp –help
吞吐量(tp):运行sockperf客户端进行单向吞吐量测试。
用法:sockperf吞吐量[选项] [参数] …
sockperf tp -i ip [-p端口] [-m message_size] [-t时间]
sockperf tp -f文件[-F s / p / e] [-m message_size] [-r msg_size_range] [-t时间]
选项:
-H,-?–help,-usage-显示帮助消息并退出。
–tcp-使用TCP协议(默认UDP)。
-i –ip-侦听/发送到ip 。
-p –port-监听/连接到端口(默认为11111)。
-f –file-从文件中读取连接列表(与-F选项配对使用)。
-F –iomux-type-多个文件描述符的类型处理[s | select | p | poll | e | epoll | r | recvfrom | x | socketxtreme](默认epoll)。
–timeout-将选择/轮询/轮询超时设置为,-1表示无限(默认为10毫秒)。
-a –activity-通过打印“。”来测量活动。最后处理的条消息。
-A-活动-通过打印最后处理的条消息的持续时间来测量活动。
–tcp-avoid-nodelay-停止/立即开始传送TCP消息(启用/禁用Nagel)。默认设置为“禁用Nagel”,但“吞吐量”中默认设置为“禁用Nagel”。
–tcp-skip-blocking-send
-启用非阻塞发送操作(默认为OFF)。
–tos-允许设置tos
–mc-rx-if-设置接收多播消息的接口的地址(可以是路由表以外的其他地址)。
–mc-tx-if-设置在其上传输多播消息的接口的地址(可以是路由表之外的其他地址)。
–mc-loopback-enable-启用mc环回(默认禁用)。
–mc-ttl-限制消息的生存期(默认为2)。
–mc-source-filter-设置允许接收的多播消息源的地址<ip,hostname>。
–uc-reuseaddr-启用单播重用地址(默认禁用)。
–lls-通过套接字选项打开LLS(值=用于轮询的usec)。
–buffer-size-以字节为单位设置套接字接收/发送缓冲区的总大小(默认情况下为系统定义)。
–nonblocked-打开非阻塞套接字。
–recv_looping_num-设置sockperf以遍历recvfrom()直到EAGAIN或良好接收的数据包(对于无限,为-1)必须与–nonblocked一起使用(默认为1)。
–dontwarmup-启动时不发送热身消息。
–pre-warmup-wait-在发送热身消息之前等待的时间(秒)。
–vmazcopyread-使用VMA的零副本读取API(请参阅VMA的自述文件)。
–daemonize-作为守护程序运行。
–no-rdtsc-抽空时不要使用寄存器;而是使用单调时钟。
–load-vma-即使不使用LD_PRELOAD,也可以动态加载VMA。
–rate-limit-使用速率限制(packet-pacing),必须在VMA_RING_ALLOCATION_LOGIC_TX模式下运行VMA。
–set-sock-accl-在运行前设置套接字加速(某些Mellanox系统可用)
-d –debug-打印其他调试信息。
有效参数:
–srv-num-将客户端使用的服务器数量设置为N。
–sender-affinity-以列表格式将发件人线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–receiver-affinity-以列表格式将接收器线程亲和性设置为给定的核心ID(请参阅:cat / proc / cpuinfo)。
–full-log-将所有消息发送/接收时间的完整日志转储为CSV格式的给定文件。
–giga-size-以千兆字节为单位打印大小。
–increase_output_precision
-将吞吐量输出的小数点后的位数增加(从3到9)。
–dummy-send-使用VMA的虚拟发送API而不是忙等待,必须高于常规msg速率。
可选:设置每秒虚拟发送速率(默认为10,000),用法:–dummy-send [ | max]
-t –time-运行秒(默认值为1,最大值= 36000000)。
–client_port-强制客户端绑定到特定端口(默认= 0)。
–client_ip-强制客户端绑定到特定的IP地址(默认= 0)。
-b –burst-控制每个突发中发送的消息的客户端数量。
–mps-设置每秒的消息数(对于低负载模式,默认值为10000;对于乒乓和吞吐量模式,默认值为max;最大使用时为–mps = max;
支持–pps以实现旧兼容性)。
-m –msg-size-使用大小为个字节的消息(最小默认值为14)。
-r –range-带有-m ,随机更改消息大小,范围为: ±。
sockperf sr 模式介绍:./sockperf sr –help
服务器(sr):作为服务器运行sockperf。
用法:sockperf sr[选项] [参数] …
sockperf sr
sockperf sr[-i ip] [-p端口] [–mc-rx-if ip] [–mc-tx-if ip] [–mc-source-filter ip]
sockperf sr -f文件[-F s / p / e] [–mc-rx-if ip] [–mc-tx-if ip] [–mc-source-filter ip]
选项:
-H,-?–help,-usage-显示帮助消息并退出。
–tcp-使用TCP协议(默认UDP)。
-i –ip-侦听/发送到ip 。
-p –port-监听/连接到端口(默认为11111)。
-f –file-从文件中读取连接列表(与-F选项配对使用)。
-F –iomux-type-多个文件描述符的类型处理[s | select | p | poll | e | epoll | r | recvfrom | x | socketxtreme](默认epoll)。
–timeout-将选择/轮询/轮询超时设置为,-1表示无限(默认为10毫秒)。
-a –activity-通过打印“。”来测量活动。最后处理的条消息。
-A-活动-通过打印最后处理的条消息的持续时间来测量活动。
–tcp-avoid-nodelay-停止/立即开始传送TCP消息(启用/禁用Nagel)。默认设置为“禁用Nagel”,但“吞吐量”中默认设置为“禁用Nagel”。
–tcp-skip-blocking-send
-启用非阻塞发送操作(默认为OFF)。
–tos-允许设置tos
–mc-rx-if-设置接收多播消息的接口的地址(可以是路由表以外的其他地址)。
–mc-tx-if-设置在其上传输多播消息的接口的地址(可以是路由表之外的其他地址)。
–mc-loopback-enable-启用mc环回(默认禁用)。
–mc-ttl-限制消息的生存期(默认为2)。
–mc-source-filter-设置允许接收的多播消息源的地址<ip,hostname>。
–uc-reuseaddr-启用单播重用地址(默认禁用)。
–lls-通过套接字选项打开LLS(值=用于轮询的usec)。
–buffer-size-以字节为单位设置套接字接收/发送缓冲区的总大小(默认情况下为系统定义)。
–nonblocked-打开非阻塞套接字。
–recv_looping_num-设置sockperf以遍历recvfrom()直到EAGAIN或良好接收的数据包(对于无限,为-1)必须与–nonblocked一起使用(默认为1)。
–dontwarmup-启动时不发送热身消息。
–pre-warmup-wait-在发送热身消息之前等待的时间(秒)。
–vmazcopyread-使用VMA的零副本读取API(请参阅VMA的自述文件)。
–daemonize-作为守护程序运行。
–no-rdtsc-抽空时不要使用寄存器;而是使用单调时钟。
–load-vma-即使不使用LD_PRELOAD,也可以动态加载VMA。
–rate-limit-使用速率限制(packet-pacing),必须在VMA_RING_ALLOCATION_LOGIC_TX模式下运行VMA。
–set-sock-accl-在运行前设置套接字加速(某些Mellanox系统可用)
-d –debug-打印其他调试信息。
有效参数:
–threads-num-在服务器端运行线程(需要’-f’选项)。
–cpu-affinity-以列表格式设置线程对给定核心ID的亲和力(请参见:cat / proc / cpuinfo)。
–vmarxfiltercb-使用VMA的接收路径消息过滤器回调API(请参阅VMA的自述文件)。
–force-unicast-reply-强制服务器通过单播进行回复。
–dont-reply-服务器不会回复客户端消息。
-m –msg-size-设置服务器可以接收的最大消息大小字节(默认值65507)。
-g –gap-detection-启用间隙检测。