这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 flowgrind,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
flowgrind - 适用于 Linux、FreeBSD 和 Mac OS X 的高级 TCP 流量生成器
概要
流磨 [OPTION] ...
商品描述
流磨 是用于测试和基准测试 Linux 的高级 TCP 流量生成器,
FreeBSD 和 Mac OS X TCP/IP 堆栈。 与其他性能测量工具相比,它
具有分布式架构,其中测量吞吐量和其他指标
在任意 flowgrind 服务器进程之间,flowgrind 守护进程 流磨(1)。
Flowgrind 测量除吞吐量(吞吐量)之外的应用层到达间隔时间
(IAT) 和往返时间 (RTT)、区块计数和网络交易/秒。 与大多数跨
平台测试工具,flowgrind 收集并报告由
TCP_INFO 套接字选项,通常在 TCP/IP 堆栈内部。 在 Linux 和
FreeBSD 这包括内核对端到端 RTT 的估计、大小
TCP 拥塞窗口 (CWND) 和慢启动阈值 (SSTHRESH)。
Flowgrind 具有分布式架构。 它分为两个部分:flowgrind
守护进程, 流磨(1)和 流磨 控制器。 使用控制器,在
可以设置任何两个运行 flowgrind 守护程序的系统(第三方测试)。 在定期
在测试期间,控制器收集并显示测量结果
守护进程。 它可以使用相同或不同的设置同时运行多个流,并且
单独安排每一位。 测试和控制连接可以选择转移到
不同的接口。
流量生成本身要么是批量传输,要么是限速的,要么是复杂的
请求/响应测试。 Flowgrind 使用 libpcap 自动转储流量
定性分析。
配置
它们是两组重要的选项:控制器选项和流选项。 像
顾名思义,控制器选项适用于全局并可能影响所有流,而
特定于流的选项仅适用于使用 -F 选项。
强制性参数长选项是强制性的短选项时也是。
总类 选项
-h, - 帮帮我[=什么是]
显示帮助并退出。 可选的 WHAT 可以是 'socket' 以获取有关套接字的帮助
选项或“流量”流量生成帮助
-v, - 版
打印版本信息并退出
控制器 选项
-c, --显示冒号=型[,型] ...
在输出中显示中间间隔报告列 TYPE。 允许的值
TYPE 是:'interval'、'through'、'transac'、'iat'、'kernel'(默认全部显示),
和“块”、“rtt”、“延迟”(可选)
-d, -调试
增加调试冗长。 多次添加选项以增加详细程度
-e, --dump-前缀=预
在转储文件名前添加前缀 PRE(默认值:“flowgrind-”)
-i, --报告间隔=#.#
报告间隔,以秒为单位(默认值:0.05s)
--日志文件[=文件]
将输出写入日志文件 FILE(默认:flowgrind-'timestamp'.log)
-m 以 2**20 字节/秒报告吞吐量(默认值:10**6 位/秒)
-n, --流量=#
测试流的数量(默认值:1)
-o 覆盖现有的日志文件(默认:不)
-p 不要打印符号值(如 INT_MAX)而不是数字
-q, - 安静的
安静,不要登录到屏幕(默认:关闭)
-s, --tcp 堆栈=型
不要自动确定源 TCP 堆栈的单位。 强制单位为 TYPE,其中
TYPE 是“段”或“字节”
-w 将输出写入日志文件(与 --日志文件)
自动化流程 选项
所有流都有两个端点,一个源和一个目的地。 源头的区别
和目标端点只影响连接建立。 启动流程时
目标端点侦听套接字,源端点连接到它。 为了
实际测试这没有区别,两个端点具有完全相同的功能。
数据可以在任一方向发送,许多设置可以单独配置
每个端点。
其中一些选项将流端点作为参数,在选项中用“x”表示
句法。 'x' 需要替换为 's' 表示源端点,'d' 表示
目标端点或两个端点的“b”。 为每个指定不同的值
端点,用逗号分隔。 例如 -W s=8192,d=4096 设置广告
窗口到源端的 8192 和目的地的 4096。
-A x 使用 RTT 计算所需的最小响应大小
(与...一样 -G s=p,C,40)
-B x=# 设置请求的发送缓冲区,以字节为单位
-C x 如果遇到局部拥堵,则停止流动
-D x=数据中心
服务类型 (TOS) IP 标头字节的 DSCP 值
-E 枚举有效载荷中的字节而不是发送零
-F #[,#] ...
此选项后面的流选项仅适用于给定的流 ID。 有用的
与...结合 -n 为某些流设置特定选项。 编号开始
有 0,所以 -F 1 指的是第二个流程。 使用 -1 所有流都可以参考
-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]
激活随机流量生成并根据使用的设置参数
分配。 有关更多信息,请参阅“流量生成选项”部分
-H x=HOST[/控制[:PORT]]
从/到主机测试。 可选参数是 CONTROL 的地址和端口
连接到同一主机。 未指定的端点被假定为
本地
-J # 使用随机种子#(默认:读取 /开发/ urandom)
-I 启用单向延迟计算(无时钟同步)
-L 在开始发送数据之前立即在测试套接字上调用 connect()(晚
连接)。 如果未指定,则在准备中建立测试连接
测试开始前的阶段
-M x 使用 libpcap 转储流量。 流磨(1) 必须以 root 身份运行
-N 测试流程后shutdown() 每个套接字方向
-O x=OPT
在测试插座上设置插座选项 OPT。 有关其他信息,请参阅部分
'套接字选项'
-P x 不要遍历 select() 以继续发送,以防块大小没有
足以填满发送队列(咄咄逼人)
-Q 仅汇总,不计算中间间隔报告(安静)
-R x=#.#(z|k|M|G)(b|B)
以每秒指定的速率发送,其中:z = 2**0,k = 2**10,M = 2**20,G =
2**30,b = 比特/秒(默认),B = 字节/秒
-S x=# 设置块(消息)大小,以字节为单位(与 -G s=q,C,#)
-T x=#.#
设置流持续时间,以秒为单位(默认:s=10,d=0)
-U # 设置应用程序缓冲区大小,以字节为单位(默认值:8192)如果与
随机流量生成
-W x=# 设置请求的接收器缓冲区(通告窗口),以字节为单位
-Y x=#.#
在主机开始发送之前设置初始延迟,以秒为单位
交通 代 OPTION
通过选项 -G flowgrind 支持随机流量生成,允许进行
除了普通的批量之外,还有先进的限速和请求-响应数据传输。
随机流量生成选项 -G 将流端点作为参数,表示为
通过选项语法中的“x”。 “x”需要替换为“s”作为源
端点,'d' 代表目标端点,'b' 代表两个端点。 不过请注意
双向流量生成可能会导致意想不到的结果。 指定不同
每个端点的值,用逗号分隔。
-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]
流量参数:
q 请求大小(以字节为单位)
p 响应大小(以字节为单位)
g 请求数据包间隔(以秒为单位)
分布:
C 持续的 (#1: 价值, #2: 未使用)
U 制服 (#1:分钟, #2: 最大限度)
E 指数(#1:lamba - 一生, #2: 未使用)
N 普通的 (#1: mu - 平均值, #2: sigma_square - 方差)
L 对数正态 (#1:zeta - 意思是, #2:西格玛 - 标准开发)
P 帕累托(#1:k - 形状, #2: x_min - 比例)
W 威布尔 (#1:lambda - 规模, #2:k - 形状)
像 weibull 这样的高级发行版只有在编译 flowgrind 时才可用
有 libgsl 支持。
-U # 为请求和响应大小的计算值指定上限,需要
因为高级分布式值是无界的,但是我们需要知道
buffersize(常量值或均匀分布不需要它)。 价值观
重新计算边界外,直到出现有效结果,但最多 10
次(然后使用绑定值)
插座 OPTION
Flowgrind 允许通过选项设置以下标准和非标准套接字选项
-O.
所有套接字选项都将流端点作为参数,在选项中用“x”表示
句法。 'x' 需要替换为 's' 表示源端点,'d' 表示
目标端点或两个端点的“b”。 为每个指定不同的值
端点,用逗号分隔。 此外,可以重复通过相同的
端点以指定多个套接字选项。
普通 插座 选项
-O x=TCP_拥塞=ALG
在测试套接字上设置拥塞控制算法 ALG
-O x=TCP_CORK
在测试套接字上设置 TCP_CORK
-O x=TCP_NODELAY
在测试套接字上禁用 nagle 算法
-O x=SO_DEBUG
在测试套接字上设置 SO_DEBUG
-O x=IP_MTU_DISCOVER
如果系统默认尚未启用,则在测试套接字上设置 IP_MTU_DISCOVER
-O x=路线记录
在测试套接字上设置 ROUTE_RECORD
非标 插座 选项
-O x=TCP_MTCP
在测试套接字上设置 TCP_MTCP (15)
-O x=TCP_ELCN
在测试套接字上设置 TCP_ELCN (20)
-O x=TCP_LCD
在测试套接字上设置 TCP_LCD (21)
示例
流磨
使用默认设置测试本地主机 IPv4 TCP 性能,与 flowgrind -H 相同
b=127.0.0.1 -T s=10,d=0。 flowgrind 守护进程需要在本地主机上运行
流磨 -H b=::1/127.0.0.1
同上,但使用默认设置测试本地主机 IPv6 TCP 性能
流磨 -H s=主机1,d=主机2
主机 1 和主机 2 之间的批量 TCP 传输。 Host1 作为源,host2 作为
目标端点。 两个端点都需要运行 flowgrind 守护进程。 这
使用默认流选项,流持续时间为 10 秒,数据流
从主机 1 到主机 2
流磨 -H s=主机1,d=主机2 -T s=0,d=10
与上述相同,但使用一个流从 host10 发送数据 2 秒到
host1
流磨 -n 2 -F 0 -H s=192.168.0.1,d=192.168.0.69 -F 1 -H s=10.0.0.1,d=10.0.0.2
设置两个并行流,第一个流在 192.168.0.1 和 192.168.0.69 之间,第二个
10.0.0.1 到 10.0.0.2 之间的流量
流磨 -p -H s=10.0.0.100/192.168.1.100,d=10.0.0.101/192.168.1.101 -A s
在 10.0.0.100 和 10.0.0.101 之间设置一个流并使用 192.168.1.x IP 地址
用于控制流量。 激活 RTT 计算的最小响应
流磨 -i 0.001 -T s = 1 | 埃格雷普 ^S | 图形 -坚持 -e '阴谋 “ - ” 运用 3:5 线
标题 “吞吐量” '
在环回设备上设置一个流并在帮助下绘制发送者的数据
gnuplot的
流磨 -G s=q,C,400 -G s=p,N,2000,50 -G s=g,U,0.005,0.01 -U 32000
-G s=q,C,400: 使用 400 字节的常量请求大小
-G s=p,N,2000,50:使用平均 2000 字节的正态分布响应大小和
差异50
-G s=g,U,0.005,0.01: 使用最小 0.005s 和
和最大 10ms
-U 32000:在 32 KB 处截断块大小(正态分布需要)
交通 场景
以下示例演示了如何使用 flowgrind 的流量生成能力
用过的。 这些已被纳入不同的流动研磨测试中,并已得到证实
有意义。 但是,由于 Internet 流量多种多样,因此不能保证这些是
适用于各种情况。
请求 响应 样式 (HTTP)
这个场景是基于工作
http://www.3gpp2.org/Public_html/specs/C.R1002-0_v1.0_041221.pdf.
流磨 -M s -G s=q,C,350 -G s=p,L,9055,115.17 -U 100000
-M s:在发送方转储流量
-G s=q,C,350:使用常量请求大小 350 字节
-G s=p,L,9055,115:使用对数正态分布,均值为 9055,方差为 115
响应大小
-U 100000:以 100 KB 截断响应
对于这种情况,我们建议关注 RTT(值越低越好)和网络
交易/秒作为指标(值越高越好)。
互动 时间 (远程登录)
此方案模拟 telnet 会话。
流磨 -G s=q,U,40,10000 -G s=q,U,40,10000 -O b=TCP_NODELAY
-G s=q,U,40,10000 -G s=q,U,40,10000:使用统一分布式请求和响应
大小在 40B 到 10kB 之间
-O b=TCP_NODELAY:设置 telnet 应用程序使用的套接字选项 TCP_NODELAY
对于这种情况,RTT(越低越好)和 Network Transactions/s 是有用的指标
(越高越好)。
率 有限 (流媒体 媒体)
此方案模拟比特率为 800 kbit/s 的视频流传输。
流磨 -G s=q,C,800 -G s=g,N,0.008,0.001
使用均值为 0.008 且方差较小的正态分布包间间隙
(0.001)。 结合请求大小 800 字节,平均比特率约为 800
达到了 kbit/s。 添加方差以模拟可变比特率,就像
用于当今的视频编解码器。
对于这种情况,IAT(越低越好)和最小吞吐量(越高越好)是
有趣的指标。
OUTPUT 柱
流/端点 身份标识
# 流端点,源为“S”或目标为“D”
ID 数字流标识符
开始 和 结束
以秒为单位的测量间隔的边界。 显示的时间是经过
从接收到 RPC 消息开始从守护进程点开始测试的时间
查看
应用领域 层 度量
通过
在此测量间隔期间传输流端点的吞吐量,
以 Mbit/s(默认)或 MB/s(-m)
交易
每秒成功接收的响应块数(我们称之为网络
交易/秒)
请求/响应
在此测量间隔期间发送的请求和响应块数(列
默认禁用)
IAT 块到达间隔时间 (IAT)。 连同最小值和最大值
显示该特定测量间隔的算术平均值。 如果没有块
在报告间隔期间收到,显示“inf”。
延迟时间 和 RTT
1-way 和 2-way 块延迟分别是块延迟和块往返
时间(RTT)。 对于这两种延迟,遇到的最小值和最大值
测量间隔与算术平均值一起显示。 如果没有阻塞,
在该报告间隔期间分别到达块确认,'inf'是
显示。 默认情况下,1 路和 2 路块延迟均禁用(请参阅
选项 -I 和 -A).
核心 度量 (TCP_信息)
以下所有 TCP 特定指标均通过 TCP_INFO 从内核获取
插座选项在 结束 每个报告间隔。 采样率可以通过改变
选项 -i.
CWND (tcpi_cwnd)
TCP 拥塞窗口 (CWND) 的大小,以段数 (Linux) 或字节数表示
(自由系统)
嘘 (tcpi_snd_sshtresh)
以段数 (Linux) 或字节数 (FreeBSD) 为单位的慢启动阈值的大小
确认 (tcpi_未确认)
当前未确认的段数,即飞行中的段数
(FlightSize)(仅限 Linux)
麻袋 (tcpi_sacked)
选择性确认的段数(仅限 Linux)
丢失 (tcpi_丢失)
假定丢失的段数(仅限 Linux)
撤退 (tcpi_retrans)
未确认的重传段数(仅限 Linux)
TRET (tcpi_重传)
由重传超时 (RTO) 触发的重传次数(仅限 Linux)
ack (tcpi_fackets)
SND.UNA 和最高选择性确认之间的段数
序列号 (SND.FACK)(仅限 Linux)
重做 (tcpi_重新排序)
段重新排序指标。 Linux 内核可以检测并处理重新排序
如果段被移位的距离确实没有,则不会有显着的性能损失
不超过重新排序指标(仅限 Linux)
RTT (tcpi_rtt) 和 rtvar (tcpi_rttvar)
TCP 往返时间及其方差(以毫秒为单位)
RTO (tcpi_rto)
以毫秒为单位的重传超时时间
比克夫 (tcpi_退避)
RTO 退避次数(仅限 Linux)
ca 州 (tcpi_ca_state)
TCP拥塞控制状态机的内部状态,如在
Linux内核。 可以是其中之一 打开, 紊乱, wr, 恢复 or 离 (仅限 Linux)
可选 是正常状态。 它表示没有重复确认 (ACK)
已收到且没有任何段被视为丢失
紊乱
在接收到第一个连续重复的 ACK 或
选择性确认 (SACK)
压水堆 当来自显式拥塞通知 (ECN) 的通知时输入
收到
修复工具
当三个重复的 ACK 或等效数量的 SACK 被输入时
已收到。 在这种状态下,拥塞控制和丢失恢复程序如
执行快速重传和快速恢复 (RFC 5861)
损失 如果 RTO 到期,则进入。 再次拥塞控制和丢失恢复
程序被执行
短信 和 PMTU
发送方最大段大小和路径最大传输单位(以字节为单位)
内部 流磨 州 (只要 启用 in 调试 构建)
状态 用于诊断目的的 flowgrind 内部流动状态。 这是一个二元组
值,第一个用于发送,第二个用于接收。 理想情况下的状态
流的源端点和目标端点都应该是对称的,但由于
它们不是同步的,它们可能不会同时改变。 可能的值
是:
c 方向完成发送/接收
d 等待初始延迟
f 故障状态
l 活动状态,尚未发送或接收任何内容
n 正常活动,一些数据被传输或接收
o 流在该方向上的持续时间为零,不会交换任何数据
作者
Flowgrind 最初由 Daniel Schaffrath 创立。 分布式测量
架构和高级流量生成后来由 Tim Kosse 和
克里斯蒂安·萨姆塞尔。 目前,flowgrind 开发和维护 Arnd Hannemann 和
亚历山大·齐默尔曼。
使用 onworks.net 服务在线使用 flowgrind