speedtest-cli 很慢,虽然网速很好

r4p*_*tor 6 router performance speedtest

我在这里遇到一个奇怪的问题。在我的本地家庭服务器(Debian 9.9)上,speedtest-cli 和它的 python 挂件非常慢。由于我用它来监控我的 ISP 连接稳定性,这是一个问题。

我的第一个想法是我的服务器或速度测试一般有问题,但这里开始了有趣的部分。

从我的 PC(Windows 10)直接连接到路由器的速度测试:

fast.com 370 Mbit/s 
speedtest.net(server 15819) 242 Mbit/s down, 50,78 Mbit/s up
Run Code Online (Sandbox Code Playgroud)

Speedtest 从我的笔记本(Arch Linux),直接连接到路由器:

fast.com 310 Mbit/s
speedtest.net(server 15819) 240 Mbit/s down, 50,8 Mbit/s up.
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但关于 Debian 服务器,直接连接到路由器:

speedtest-cli(server 15819) 3,88 Mbit/s down, 3,69Mbit/s up
Run Code Online (Sandbox Code Playgroud)

所以也许服务器坏了......但是没有,连接速度很好。

wget --output-document=/dev/null https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso

leads to a download speed of about 200 Mbit/s.
Run Code Online (Sandbox Code Playgroud)

直接在路由器上进行 Speedtest 也会导致大约 250 Mbit/s。

我已经尝试过清理 speedtest-cli,重新启动服务器等等。

知道这里发生了什么吗?怎么可能,命令行加速测试失败了,而网络设置的其余部分却很好?

Jou*_*eek 7

我搞砸了 - 并安装了 speedtest-cli 和 speedtest++。(不幸的是,我的 GUI PC 支持家庭插头连接,但是当我说其余的时请相信我)。它可能取决于正在使用的协议。

这是来自 Ubuntu 16.04 存储库中版本的结果

geek@heckate_router:/etc$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from Singtel Fiber (XXX.XXX.XXX.XXX)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Singtel (Singapore) [3.91 km]: 230.77 ms
Testing download speed................................................................................
Download: 648.47 Mbit/s
Testing upload speed......................................................................................................
Upload: 3.15 Mbit/s
Run Code Online (Sandbox Code Playgroud)

有趣的是 git 中的版本对于上传有更好的结果,尽管仍然与 speedtest++ 和 ookla 的速度测试 cli 结果不一致

geek@heckate_router:~/speedtestgittest$ ./speedtest_cli_git.py
Retrieving speedtest.net configuration...
Testing from Singtel Fiber (xxx.xxx.xxx.xxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by MyRepublic (Singapore) [3.91 km]: 233.882 ms
Testing download speed................................................................................
Download: 607.12 Mbit/s
Testing upload speed................................................................................................
Upload: 59.29 Mbit/s
Run Code Online (Sandbox Code Playgroud)

根据speedtest-CLI github页面

此工具有可能报告与 Speedtest.net 不一致的结果。有几个概念需要注意导致潜在不一致的因素:

Speedtest.net 已迁移到使用纯套接字测试而不是基于 HTTP 的测试

Ookla 似乎也意识到了这一点

性能 - 所有开源版本都使用我们的测试引擎的旧版本,该版本早于我们的 Flash 测试。是的,就是这么老。这对于快速连接来说并不理想。我们还看到了受 DNS 计时和各种其他方法问题影响的流行版本。此外,大多数都是用高级语言编写的,这些语言通常会遇到高带宽级别的问题。

虽然我怀疑需要一些过于深入的性能分析来确定它是协议还是语言。

我一直在使用speedtest++,直到我第一次写这个答案后大约 5 分钟,结果负载更好。

geek@heckate_router:~$ SpeedTest

Speedtest ++

SpeedTest++ version 1.14
Speedtest.net command line interface
Info: https://github.com/taganaka/SpeedTest
Author: Francesco Laurita <francesco.laurita@gmail.com>

IP: XXX.XXX.XXX.XXX ( Singtel Fiber ) Location: [<redacted>, <redacted>]
Finding fastest server... 9575 Servers online
............
Server: Singapore speedtest.singnet.com.sg:8080 by Singtel (3.91278 km from you): 1 ms
Ping: 1 ms.
Jitter: 0 ms.
Determine line type (2) ........................
Fiber / Lan line type detected: profile selected fiber

Testing download speed (32) ................................................................................................................................................................................................................................................................................................
Download: 989.61 Mbit/s
Testing upload speed (12) .................................................................................................................................................................................................................................................................................................................................................................................................................................................
Upload: 998.73 Mbit/s
Run Code Online (Sandbox Code Playgroud)

将此与官方客户端进行对比(并且他们的博客表明有人编写了一个应用程序来为您监控历史速度),并进行 CSV 和 TSV 输出

geek@heckate_router:~$ speedtest

   Speedtest by Ookla

     Server: Singtel - Singapore (id = 13623)
        ISP: Singtel Fiber
    Latency:     1.91 ms   (0.05 ms jitter)
   Download:   932.83 Mbps (data used: 479.6 MB)
     Upload:   941.23 Mbps (data used: 424.7 MB)
Packet Loss:     0.0%
 Result URL: <redacted>
Run Code Online (Sandbox Code Playgroud)

正如你所知道的......速度有本质的不同。

我记得当我把它搞砸时,gui 测试与 cli 测试相当。

Speedtest ++ 和官方客户端使用原始套接字/自定义协议,在寻找线路速度方面比旧协议更好。


小智 2

开发人员似乎已经被这样的请求打败了,因此将这些行发布在 github 上的自述文件中:

不同版本的 Python 执行代码的某些部分会比其他部分更快。CPU 和内存容量和速度将在 Speedtest.net 甚至同一网络上的其他机器之间的不一致中发挥很大作用。与不一致相关的问题将作为不会修复而关闭,无需额外原因或上下文。

因此,这里的解决方案是在稳定且强大的 RAM/CPU 设备上使用基于非 Python 的基准测试。谷歌搜索向我展示了解决方案之一:https://github.com/taganaka/SpeedTest上基于 C++ 的 cli 速度测试