我创建了一个基本的TCP服务器,以协议缓冲区格式读取传入的二进制数据,并编写二进制消息作为响应。我想要测试往返时间。
我尝试使用iperf,但无法使其多次发送相同的输入文件。是否有其他基准测试工具可以重复发送二进制输入文件?
我尝试使用iperf,但无法使其多次发送相同的输入文件。是否有其他基准测试工具可以重复发送二进制输入文件?
.pcap
文件2后,使用tcptrace -xtraffic <pcap_filename>
3进行分析。这将生成两个文本文件,并在名为traffic_stats.dat
的文件底部显示所有连接的平均RTT统计信息。[mpenning@Bucksnort tcpperf]$ tcptrace -xtraffic willers.pcap
mod_traffic: characterizing traffic
1 arg remaining, starting with 'willers.pcap'
Ostermann's tcptrace -- version 6.6.1 -- Wed Nov 19, 2003
16522 packets seen, 16522 TCP packets traced
elapsed wallclock time: 0:00:00.200709, 82318 pkts/sec analyzed
trace file elapsed time: 0:03:21.754962
Dumping port statistics into file traffic_byport.dat
Dumping overall statistics into file traffic_stats.dat
Plotting performed at 15.000 second intervals
[mpenning@Bucksnort tcpperf]$
[mpenning@Bucksnort tcpperf]$ cat traffic_stats.dat
Overall Statistics over 201 seconds (0:03:21.754962):
4135308 ttl bytes sent, 20573.672 bytes/second
4135308 ttl non-rexmit bytes sent, 20573.672 bytes/second
0 ttl rexmit bytes sent, 0.000 bytes/second
16522 packets sent, 82.199 packets/second
200 connections opened, 0.995 conns/second
11 dupacks sent, 0.055 dupacks/second
0 rexmits sent, 0.000 rexmits/second
average RTT: 67.511 msecs <------------------
[mpenning@Bucksnort tcpperf]$
.pcap
文件是我通过循环运行一个expect
脚本从我的服务器中提取数据时生成的。这就是我生成循环的方式...#!/usr/bin/python
from subprocess import Popen, PIPE
import time
for ii in xrange(0,200):
# willers.exp is an expect script
Popen(['./willers.exp'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
time.sleep(1)
accept()
性能和测试持续时间来调整循环之间的睡眠时间。
tcptrace
能够提供非常详细的每个套接字的统计信息,如果您使用其他选项...================================ [mpenning@Bucksnort tcpperf]$ tcptrace -lr willers.pcap 剩余1个参数: 'willers.pcap' Ostermann's tcptrace -- 版本 6.6.1 -- 2003年11月19日星期三
总共16522个数据包,追踪了16522个TCP数据包 墙上时间已经过去: 0:00:00.080496,分析速率为205252 pkts/sec 跟踪文件的时间: 0:03:21.754962 TCP连接信息: 已跟踪200个TCP连接: TCP连接1: 主机c: myhost.local:44781 主机d: willers.local:22 完整连接:RESET (SYNs: 2) (FINs: 1) 第一个数据包:2011年5月31日星期二22:52:24.154801 最后一个数据包:2011年5月31日星期二22:52:25.668430 经过时间: 0:00:01.513628 总数据包数: 73 文件名: willers.pcap c->d: d->c: 总数据包数: 34 总数据包数: 39 发送的重置数: 4 发送的重置数: 0 发送的确认包数: 29 发送的确认包数: 39 发送的纯ACK包数: 11 发送的纯ACK包数: 2 发送的SACK包数: 0 发送的SACK包数: 0 发送的DSACK包数: 0 发送的DSACK包数: 0 最大SACK块/确认包: 0 最大SACK块/确认包: 0 唯一发送字节数: 2512 唯一发送字节数: 14336 实际数据包数: 17 实际数据包数: 36 实际数据字节: 2512 实际数据字节: 14336 重传数据包数: 0 重传数据包数: 0 重传数据字节数: 0 重传数据字节数: 0 ZWND探针包数: 0 ZWND探针包数: 0 ZWND探针字节数: 0 ZWND探针字节数: 0 乱序数据包数: 0 乱序数据包数: 0 推送的数据包数: 17 推送的数据包数: 33 发送的SYN/FIN包数: 1/1 发送的SYN/FIN包数: 1/0 请求1323 WS / TS: Y/Y 请求1323 WS / TS: Y/Y 广告窗口规模: 6 广告窗口规模: 1 要求SACK: Y 要求SACK: Y 发送的SACK数: 0 发送的SACK数: 0 紧急数据包数: 0个包 紧急数据包数: 0个包 紧急数据字节数: 0字节 紧急数据字节数: 0字节 MSS请求: 1460字节 MSS请求: 1460字节 最大段大小: 792字节 最大段大小: 1448字节 最小段大小: 16字节 最小段大小: 32字节 平均段大小: 147字节 平均段大小: 398字节 最
您需要在客户端应用程序中测量往返时间,或监视从客户端发送到服务器以及返回客户端的网络流量,以获取完整的时间间隔。在服务器上测量时间将排除服务器中任何内核级别的延迟和所有网络传输时间。
time (nc hostname 1234 < input.binary | head -c 100)
,假设响应长度为100字节。我在我的博客上写了一篇关于此的文章(如果这被认为是广告,请随意删除,但我认为它与本主题相关):http://synsynack.wordpress.com/2012/04/09/realistic-latency-measurement-in-the-application-layers