7

测速

 9 months ago
source link: https://hsiaofongw.notion.site/0e5672d6f6444debbe7024115cea2ca1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

测速

photo-1517976487492-5750f3195933?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb&w=2400
Drag image to reposition
Created
November 16, 2023 2:19 PM
computer-network
speedtest
linux
Description
测宽带,测内网,测硬盘。
Direct
Updated
November 21, 2023 12:24 PM
3 more properties
测速是一个很常见的需求。人们经常需要测出计算机的磁盘读写速率、网络吞吐速率、网络延迟和网络延迟抖动等。测速的意义包括不限于更好地了解产品的性能、确认产品的性价比以及分享和交流技术等。
这篇文章分享一些常见测速方式。
宽带测速就是测试宽带的下载速率和上传速率,下载速率指的是互联网上的服务器经过 ISP 向你的电脑发送数据的网络吞吐量收敛值,上传速率指的是你的电脑通过 ISP 向互联网上的另一台电脑发送数据的网络吞吐量收敛值。各个测速网站一般习惯用 Mbps 这个单位来表示。
常用单位含义如下:
1 Mbps 表示每秒 1 百万个比特。
1 MB/s 表示 1 百万字节每秒。
1 MiB/s 表示 2 的 20 次方字节每秒,带小 i 表示它是一个二进制单位而不是十进制单位。
一个字节 (Byte, 或者 B) 等于 8 个比特 (bits, 或者 b)。
有需要的读者请自行换算。
如果人在国外,建议使用:
google speed test,在 Google 搜索关键字 “google speed test”,搜索结果会显示。
自建 LibreSpeed 测速站,支持 Docker 部署;
(PS:我觉得一种方便实用的方式是,把 LibreSpeed 以 Docker 容器的方式部署在 NAS 上,然后全屋的设备就都可以通过一个统一的页面测试内网速度了。)
如果人在国内,建议使用各大学的测速网站:
东北大学 http://speed.neu.edu.cn/(支持 IPv6、延迟抖动测试)
中国科学技术大学 https://test.ustc.edu.cn/(支持 IPv6、延迟抖动测试)
上海交通大学 https://mirror.sjtu.edu.cn/speedtest/(支持延迟抖动测试)
上海大学 https://speedtest.shu.edu.cn/(支持 IPv6、延迟抖动测试)
南京大学 https://test.nju.edu.cn/(支持 IPv6、延迟抖动测试)
南京航空航天大学 http://speed.nuaa.edu.cn/(支持延迟抖动测试)
浙江大学 http://speedtest.zju.edu.cn/(支持延迟抖动测试)
影响宽带测速结果的常见因素或瓶颈:
是否处于高峰期?例如是否大家都同时上网?接入网和骨干网都是有承载能力上限的,真实负荷超出了这个上限就会发生丢包。
本地除测速应用本身之外的应用程序对宽带的占用,包括前台运行的和后台运行的。
交换机的交换能力 (switch capacity)、端口协商速率是否达标?至少要大于等于运营商给的标称宽带。
路由器的转发速率也至少要大于等于运营商给的标称宽带。
线路质量,干扰屏蔽等。
从你的电脑到测速服务器的整个链路上最慢的节点,不管它是无线网关、交换机、路由器还是数模转换装置。

磁盘读写测速

磁盘读/写速率是指单位时间内用户能够从/向磁盘读取/写入多少长度的数据,单位一般是 MB/s 或者 MiB/s,是衡量磁盘性能和健康程度的重要指标。
在 Linux 操作系统上,可以用 GNU dd 命令行工具来对磁盘进行测速,在一些兼容 POSIX 标准的系统上,GNU dd 也有移植,可以通过 gdd 可执行文件名进行调用。
GNU dd 是一款能够直接对块设备进行二进制编辑的工具,是一个非常强大的、瑞士军刀一样的工具,能够对块设备做全盘镜像、制作启动盘、按字节寻址编辑二进制、读/写 MBR(主引导记录)等。GNU dd 由于是直接以二进制的方式对块设备进行操作,所以不需要把设备挂载到文件系统上,在 dd 眼里没有「文件」的概念,它做的只是以随机访问的方式对块设备给定地址和给定长度的区域进行读或者写。
我们强调 GNU dd 是因为它的语法是比较统一的,相对而言 macOS 预装的 dd 和各 Linux 发行版预装的 dd 的语法有一些差别。
测试写入速度:
Shell
建议多试几个不同的参数取平均值,因为 bs 参数对写入速率有影响,以下是测试结果数据:
index
count
bytes copied
duration
1073741824
0.758818 s
1.4 GB/s
2147483648
1.74668 s
1.2 GB/s
2147483648
1.65237
1.3 GB/s
2147483648
2.50484 s
857 MB/s
512KiB
2147483648
1.60869 s
1.3 GB/s
根据测速结果,我们可以算出该硬盘平均写入速率为:
Plain Text
测速读取速度:
Shell
以下测试结果数据:
index
count
bytes copied
duration
2147483648
0.368549 s
5.8 GB/s
2147483648
0.260665 s
8.2 GB/s
2147483648
0.214729 s
10.0 GB/s
2147483648
0.259124 s
8.3 GB/s
2147483648
0.271196 s
7.9 GB/s
2147483648
0.256881 s
8.4 GB/s
2147483648
0.254356 s
8.4 GB/s
根据该数据,我们可以计算出此硬盘的平均读取速率:
Plain Text
猜测是得益于 SSD 控制器提供的缓存功能,读取速率比较快。但是我们没有找到手动跳过 SSD 读取缓存的选项。
在测试磁盘速率时,应当尽量退出无关的软件,否则一些软件可能会对测试结果造成干扰,例如在同样的 bs, count 参数下,开启和不开启 qBittorrent 软件会使得测试结果出现极大的不同,原因是 BT 软件会密集地对硬盘发起读、写请求,特别是在种子数量非常多的情况下。

局域网测速

例如,家庭内网,办公室网络,这些都属于局域网。局域网相对于互联网(公网)来说看起来更显得「车少路宽」,局域网的主机一般都用比较好的网络设备连接起来(千兆交换机、路由器等),然后和外网隔着一道 NAT 网关(同时还扮演防火墙的角色)。
NAS、家庭影院和个人工作站的逐渐普及使得人们对高速局域网的需求越来越高,需要测速的场景也越来越多,合理运用测速方法可以帮助人们更快地定位传输链路的性能瓶颈在哪:究竟是硬盘、还是协议、还是网络,然后人们就可以高效地、有针对性地升级硬件。
iperf3 提供了简单的测速方式,它是一款 C/S 架构的分布式软件,需要首先启动它的服务端:
Shell
其中 ‘-s’ 参数表示让它工作在 server 模式,`-p` 参数设定 iperf3 server 的侦听端口,端口号可以自己指定,也可以忽略。
启动 iperf3 即可测速上传速率,也就是从本地发送数据到 server 到吞吐率收敛值:
Shell
其中 ‘-c’ 参数令 iperf3 工作在 client 模式,同时指定服务器地址,`-p` 参数指定要向服务器的哪个端口相连,这个要和 server 端的 iperf3 写的一致。
以下是输出结果:
Plain Text
可以看出上传速率在 700Mbps 左右。
给 iperf3 client 加上 ‘-R’ 参数即可测试下载速率,也就是服务器往本地 client 传数据的吞吐率收敛值。
对于无线局域网,其吞吐率表现受到遮挡物的影响会比较明显。也收到终端收发机自身硬件性能的影响,iPhone 直到 iPhone 15 Pro 才支持 160 MHz 带宽(来源),MacBook Air (M1 2020) 不支持 160 MHz 带宽(来源),官方资料表示 MacBook Air (M1, 2020) 最大 PHY 速率可达 1200 Mbps,不过我个人没有测出来过。
还需要注意的是,iperf (iperf3) 的 -w 参数(TCP window size)取不同的值对测试结果也会有显著的影响,如果你发现 iperf (iperf3) 的测速结果不达预期,建议先不要首先怀疑硬件的问题,可以先取几个不同的值试试。
以下是 iperf3 的 TCP window size 参数分别取不同值的测速结果展示:
Plain Text
iperf3 的优点是容易获取且简单易用,但是它只能测速网络链路的收发速率,换句话说硬盘读写性能丝毫不影响 iperf3 的成绩,现在我们希望把文件读写速率也考虑在内,以复现和模拟更加真实的使用情况,这时我们可以用 dd 和 ncat.
这个页面有更多关于 iperf3 的使用示例
dd 支持读、写二进制的流,也就是一块儿一块儿的二进制数据,dd 支持从标准输入中读取数据,也支持将输出数据写到标准输出中。ncat 支持从标准输入中读取数据,支持将文件写入到远程服务器上的 socket 中,或者写入到文件中。
通过让 dd 和 ncat 通过 shell 提供的 IO 重定向功能(管道)连接在一起协同工作,可以实现考虑了文件读写因素在内的测速。
首先我们在 client 建立一个测试文件:
Plain Text
然后我们在 server 端侦听一个端口用来接收 ncat 发来的数据,并且将该文件导到一个临时地点:
Plain Text
然后我们继续在 client 执行发送命令:
Plain Text
Plain Text
考虑到 WiFi 信号损耗,我认为这个结果是合理的。另外不要忘了删除这些临时文件。至于这里的 bs 参数的选择,我认为可以参考之前磁盘读写的测试结果数据,选一个同时能较好发挥读取速率和写入速率的值。

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK