如何摆脱ssh带宽限制?

如何摆脱ssh带宽限制?

我正在摆弄我自己设置的运行 archlinux 的服务器,当我尝试使用 scp 或 rsync 从中检索文件时,我注意到下载速度异常低,上限约为 1.1MiB/s,当我以 120MiB/s 的速度发送文件时没有遇到任何问题。 (我还能够使用 http 以 70 MiB/s 的速度下载文件)

然后我做了以下实验:

LOCAL: $ ssh login@host
REMOTE: $ cat HUGE_FILE

结果:终端显示文件内容,下载速度约15MiB/s

LOCAL: $ ssh login@host "cat HUGE_FILE"

结果:文件内容也显示在终端中,但下载速度只有1.1MiB/s

(编辑:ssh -t login@host "cat HUGE_FILE"给出相同的结果)

直接启动单个命令时似乎有特定的限制,但在常规会话中则没有。我尽我所能进行搜索,但找不到启用此类限制的配置文件。

因此,如果有人能就这个问题的根源以及如何解决它提出建议,我将不胜感激。

答案1

查看https://stackoverflow.com/questions/20244585/how-does-scp-differ-from-rsync

  • 首先排除变异性
    • 创建一个小于 RAM 25% 的简单test.tar文件,例如,如果您有 16GB RAM,则创建一个 ~2GB test.tar。如果单个文件太小,复制时间不够长,无法提供可靠的结果。太大的文件会脱离 RAM,然后磁盘 I/O 将变得相关,这是不好的
    • 使用scp
    • 不要使用第一个副本的速度结果,特别是在干净启动之后,因为涉及从磁盘读取它的时间。进行 3 个或更多副本以确保磁盘缓存正在运行并且您的缓存test.tar位于 RAM 内
    • 把事情简单化...我正在玩自己设置的服务器test.tar...因此,制作一个适当大小的单个文件,并且仅执行scp和使用报告的速度。
    • 你可以做mount -t tmpfs -o size=8g tmpfs /ramdisk一个内存盘然后把你的test.tar放在那里并复制到/从那里复制内存盘帮助排除磁盘 I/O 的位置​​。
    • 也可以尝试将 linux 置于运行级别 3多用户目标减少可能正在运行的后台进程,其中 cpu 忙于做其他事情而不是专注于scp.不过我在运行级别 5 中从未遇到过这个问题图形目标至少对于 RHEL/CentOS/Rocky 来说是这样。
  • 没有固有的 SSH 带宽限制,并且使用现代的具有指令集和负责该硬件级别加密处理的CPU(我现在忘记了词汇)加密开销几乎为零,并且不影响复制速度,当然不会影响scp.
  • 您可以/etc/ssh/sshd_config根据Ciphers和调整文件Macs,我注意到复制速度存在显着差异scp,但这是在 200gbps infiniband 上观察到的,例如 RHEL 7.9 中的 400 MB/s 与 700 MB/s 和 1.0GB/s。在 1gbps 有线 LAN 上,我认为您不会注意到差异。在 RHEL 8.9 中,我注意到CiphersMACs不再存在于sshd_config我相信现在有一种不同的方法来应用它们。
  • 你提到过MiB/s;我不需要理解那个上下文。我只知道使用窗口底部的scp报告MB/s,以及使用 samba,windows10 中的弹出窗口都显示MB/s有线 1gbps LAN/WAN 内和上的复制速度 我从未获得过大约 112-113 MB/s,我认为基于 1gbps = 1000 mbit/s / 8 位每字节 = 125 MB/s 的最大值,然后计算出任何开销减少 10% = ~112MB/s。
  • 导致传输速度低于恒定 112 MB/秒(我在处理单个 400+ GB tar 文件时花了 X 分钟)的原因可能有很多;这是在具有 768GB RAM 和企业级 SSD 的服务器上。情况显然会根据您的硬件而有所不同。
    • 您需要指定正在使用的所有硬件,那么传输速度低的原因可能会变得显而易见。

并且...您提到了您设置的 arch linux 服务器,但没有提到其他服务器服务器曾经是以及您要转乘的地点/目的地。因此,如果传输是通过您的路由器和 ISP 以及互联网进行的,那么这很可能就是瓶颈所在。您需要自己设置第二台服务器,并通过 cat5e 或 cat6 电缆直接连接它们,或者使用简单的 1gbps 10 美元有线交换机(不是路由器)。

相关内容