我正在尝试使用iperf和tcp_probe模块绘制TCP拥塞窗口和慢启动阈值。我完全按照这里所说的做法:
获取数据:
modprobe tcp_probe port=5001
chmod 444 /proc/net/tcpprobe
cat /proc/net/tcpprobe >/tmp/tcpprobe.out &
TCPCAP=$!
iperf -i 10 -t 100 -c receiver
kill $TCPCAP
糟糕!
/tmp/tcpprobe.out为空:(
这是Ubuntu 11.04 x86
并且已经在Ubuntu 11.04 x64上尝试过相同的内容
有什么建议吗?
答案 0 :(得分:3)
我遇到了同样的问题。对我有用的是:
modprobe -r tcp_probe
sudo modprobe tcp_probe port=5002 full=1
sudo chmod 444 /proc/net/tcpprobe
cat /proc/net/tcpprobe > /tmp/tcpprobe.out &
TCPCAP=$!
iperf -c <servers IP address here> -p 5002 -t 100 -i 1
sudo kill $TCPCAP
通过输入以下内容,查看iperf参数以检查是否符合您的要求(-t 100 -i 1):
man iperf
答案 1 :(得分:3)
C标准库中的I / O函数默认使用缓冲区,通常为4k,因此fread()仅在缓冲区满或EOF时返回。您可以使用128字节的小缓冲区,请参阅:
dd if = / proc / net / tcpprobe ibs = 128 obs = 128
现在,消息快速刷新。
答案 2 :(得分:2)
默认情况下,tcp_probe仅在cnwd更改时记录,请尝试modprobe tcp_probe ... full=1
。
Linux源代码参考:http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/net/ipv4/tcp_probe.c#L47
答案 3 :(得分:1)
我有类似的问题,tcp_probe模块仅在非明显的时间间隔内输出。我已经创建了它的修改版本,可以在每个收到的tcp段上刷新。这会降低系统速度,但可以更好地监控HTTP等短期连接。
答案 4 :(得分:0)
导致无输出的另一个问题是输出文件tcpprobe.out
的文件权限直接cat tcpprobe,它能够看到输出,但如果重定向输出文件,输出文件大小为0,这提醒我它是权限问题...... < / p>
答案 5 :(得分:-1)
答案非常晚,但我自己一直在努力解决这个问题。我正在尝试Dyna提供的版本,但仍然没有输出,无论使用哪些参数。最后,我发现订单是问题。
我使用tcp_probe的方式是:安装/激活模块,运行一些tcp应用程序(我正在运行一些tcp单元测试),然后启动/ proc / net / tcpprobe的复制过程(如其他答案所示) )然后删除/停止模块。正确的方法是在执行tcp密集型活动之前启动复制过程(禁止终止进程)。执行tcp活动时保持cat进程正常运行,之后只能将其终止。
对我来说这是一个非常谦卑的经历,因为需要花费数小时来解决这个问题。希望人们觉得这很有用。