![使用 netcat 测量网络吞吐量与 CIFS/SMB 传输速率](https://linux22.com/image/532746/%E4%BD%BF%E7%94%A8%20netcat%20%E6%B5%8B%E9%87%8F%E7%BD%91%E7%BB%9C%E5%90%9E%E5%90%90%E9%87%8F%E4%B8%8E%20CIFS%2FSMB%20%E4%BC%A0%E8%BE%93%E9%80%9F%E7%8E%87.png)
作为一个大型项目的一部分,我一直在尝试测量和基准测试我们 LAN 的吞吐量。我们的 LAN 是使用 cat5e 和 HP ProCurve 1800-24G 交换机构建的,这些交换机支持 10/100/1000 Mbps 自动感应。物理拓扑相当简单。我们的服务器机架中有一个 ProCurve,所有服务器都连接到它(我错误地将其称为“主干”交换机)。然后,所有客户端计算机都连接到的三个交换机中的每一个都使用每个交换机的单独电缆/端口连接到“主干”交换机。它基本上是一个“集线器”设计。我测试的工作站距离“主干”交换机有两个交换机,里面有一个旧的 IDE 驱动器。我使用 HDTune 测量我的驱动器速度约为 60 MB/s。我们的服务器是 HP DL380 G5,配备 72GB 单端口 15K SAS 驱动器的 RAID6 阵列和两个 3.0Ghz 的 Intel Xeon Duo Core CPU。
我读过其他几本(这里, 和这里) 关于这个话题的问题以及 Tom's Hardware文章所以我知道我的实际吞吐量将远远低于 1Gbit 网络的理论最大带宽(例如 124 MB/s 传输速率)。然而,真正让我困惑的是使用 netcat 获得的数字与使用 CIFS/SMB 进行文件传输计时之间的差异。
我正在使用 cygwin 版本的 netcat,如下所示:
在“服务器”上:
nc -vv -l -p 1234 > /dev/null
在“客户端”:
time yes|nc -vv -n 192.168.1.10 1234
为了测试使用 CIFS/SMB 的文件传输速率,我只需使用 cygwin 执行如下操作:
time cp local_file.iso /remote_dir/
现在,除非我做了计算(将传输的字节数除以秒数,得到每秒字节数并从中转换),否则完全错误,使用 netcat 传输速度确实非常慢。比如慢 4-8 MB/s。另一方面,使用 120MB .iso 作为传输文件,我计算出 CIFS/SMB 服务器的吞吐量约为 30-35 MB/s。仍然比我预期的要慢得多,但与我使用 netcat 得到的数字完全不同。
我应该提到,我实际上使用两个不同的服务器进行 netcat 与 CIFS/SMB 测试。我使用 XenServer 主机进行 netcat 测试,使用 Windows 2003 Server 进行 CIFS 测试(我没有在 Windows 服务器上安装 netcat 的选项)。它们在硬件方面是相同的。现在我知道这可能有点苹果和橘子之间的比较,但如果我对 XenServer 主机进行 CIFS 传输,我得到的传输速率约为 30 MB/s,这似乎与我在 Windows 2003 Server 上得到的结果一致。
我想我确实有两个问题:1) 为什么 netcat 和 CIFS/SMB 共享文件传输计时之间的数字不同?2) 为什么我的实际吞吐量如此之低?我知道我的磁盘只能以如此快的速度将这么多数据推送到 NIC,但我肯定应该看到大约 60 MB/s 的速度?
答案1
看看 xen 上的读取速度有多快 - 使用类似 hdparam 的工具或只是进行本地复制,这将提供有关磁盘性能的了解
传输文件尝试使用不同的工具,如 dd 很奇怪为什么 nc 很慢 - 例如对我来说非常快
答案2
除了非常小心地使用什么工具来测量实际吞吐量之外,我在这里真的没有一个可靠的答案。我曾在多个主机上双向使用过 netcat(cygwin 和 GNU 版本)、定时 CIFS/SMB 传输、定时 SCP 传输、iperf 和 NetCPS,当然,我得到的答案大相径庭。然而,我发现,如果谨慎而有条不紊地使用同一种工具,我会在不同的主机上得到类似的数字。
另一件值得一提的事情是,很多这些工具仅测试网络吞吐量。它们的有效负载实际上是从内存直接发送到网络的(我相信 iperf 和 NetCPS 都这样做)。虽然这对于帮助测试网络性能和查明基础设施问题很有用,但它并不能很好地说明从客户端节点来看性能会是什么样子。就我而言,我可以使用定时文件传输之类的方法从我的工作站获得大约 25-30 MB/秒的速度,但 iperf 会报告我可以获得 45-50 MB/秒的速度。
所以这几乎总结了我对问题前半部分所知道的一切......在测量网络带宽时,不同的工具会给你截然不同的结果。
至于我问题的第二部分,我真的不知道。大约 25-30 MB/秒的传输速率对于终端节点来说似乎很糟糕,直到您意识到它们只能以驱动器和总线的速度将数据推送到网络(而我的工作站很慢)。我希望能够使用超过 25% 的理论带宽吗?是的,但从我读到的内容来看,我的结果并不完全不寻常。我发现服务器当然要快得多(60-70 MB/秒),这正好接近它们测量的最大磁盘速度(HDTune 报告约为 1GB/秒......对于单通道 15K RPM RAID-6 SAS 驱动器来说似乎很慢?)。但奇怪的是,一些服务器似乎要慢得多,并且存在不对称的传输速率,具体取决于哪台机器充当客户端,哪台机器充当服务器。例如:我在一个方向上获得 45MB/秒,在另一个方向上获得 12MB/秒。我怀疑这些服务器位于不同的子网中可能是问题所在,但我尚未证实。我甚至测试了 NIC、交换机端口和电缆,试图找出故障原因。我认为故障出在网络拓扑设计上,也可能是路由器,但我不能确定,因为在我来这里之前没有进行过基准测试。长话短说……某些东西比网络的其余部分慢很多。确实很奇怪。
物理网络拓扑:
----- 146.63.205.65 ----|--------|
| | "Main" |---- [Client Switch # 1]
<--[NetWare 6.5] | Switch |---- [Client Switch # 2]
| | |---- [Client Switch # 3]
----- 192.168.61.1 -----|--------|
|
|
"Servers"