在高延迟网络上加速 SFTP 上传?

nic*_*_eu 28 networking mac-osx-server sftp mac-osx latency

我正在尝试使用 SFTP 在国际上传输一组大文件,但我发现我的国际合作伙伴无法将上传速度提高到约 50k 以上,尽管双方的连接都非常好。我们可以以这种速度上传多个连接(所以不是带宽?),但是单个上传速度没有提高,这是一个问题,因为许多文件的大小为几 GB。

SFTP 使用标准的 Apple OSX“远程登录”SFTP 系统托管。

有没有办法提高上传速度,或者是否有不同的 SFTP 主机可以提供帮助?我不清楚这是配置问题还是协议的固有限制。

(出于安全原因,我需要使用端到端加密的对等连接——没有云服务)。

Mar*_*ryl 31

使用OpenSSHsftp客户端(您似乎在使用),您可以使用:

  • -R切换到增加请求队列长度(默认为 64)
  • -B切换以增加读/写请求大小(默认为 32 KB)

首先,尝试将两者加倍:

sftp -R 128 -B 65536 user@host
Run Code Online (Sandbox Code Playgroud)

您增加其中的哪一个可能并不重要。

增加任何一个应该有助于使您的高延迟连接饱和。通过上述设置,它会随时保持 8 MB 的数据在管道中流动(128*64K=8M)。

请注意,这仅有助于大文件传输。传输大量小文件时,它不会产生任何影响。


有关其他 (GUI) SFTP 客户端的一些背景知识和讨论,请参阅我对为什么 FileZilla SFTP 文件传输最大上限为 1.3MiB/sec 而不是使可用带宽饱和的回答的“网络延迟/延迟”部分rsync 和 WinSCP 甚至更慢


小智 5

(您在问题标题中提到“高延迟”,但在正文中没有提到。您是否测量了实际延迟,结果是什么?)

OpenSSH 有一个补丁可以显着提高高延迟网络链接的吞吐量:HPN-SSH:(强调我的)

OpenSSH 中的 SCP 和底层 SSH2 协议实现的网络性能受到静态定义的内部流量控制缓冲区的限制。这些缓冲区通常最终会成为 SCP 网络吞吐量的瓶颈,尤其是在长且高带宽的网络链路上。修改 ssh 代码以允许在运行时定义缓冲区可以消除此瓶颈。我们创建了一个补丁,可以消除 OpenSSH 的瓶颈,并且可以与其他服务器和客户端完全互操作。此外,HPN 客户端将能够更快地从非 HPN 服务器下载,HPN 服务器将能够更快地从非 HPN 客户端接收上传。

因此,尝试在接收端编译并使用 HPN-SSH,看看它是否可以提高您的传输速度。


And*_*nle 5

我正在尝试使用 SFTP 在国际范围内传输一组大文件

尚未将其作为答案提及,但是当通过高延迟链接传输多个文件时,有一个非常简单的解决方案可以获得更好的性能:

并行传输多个文件。

您在问题中提到的解决方案。用它。

基本上,TCP 协议不能很好地处理具有大带宽延迟产品的连接 - 单个连接无法在任何时候保持足够的数据移动。请参阅https://en.wikipedia.org/wiki/TCP_tuning

由于每个连接受到TCP协议的限制,所以使用更多的连接即可。

  • 以下是如何并行化 SFTP 传输:https://serverfault.com/questions/248105/how-to-upload-and-measure-sftp-in-parallel (2认同)

iwa*_*rue 3

您可以尝试启用压缩,看看是否有帮助。

\n\n

man sftp

\n\n
\n

-C 启用压缩(通过 ssh 的 -C 标志)。

\n
\n\n

并来自man ssh

\n\n
\n

-C 请求压缩所有数据(包括 stdin、stdout、stderr 以及转发的 X11、TCP 和 UNIX 域连接的数据)。压缩算法与 gzip(1) 使用的相同,并且 \xe2\x80\x9clevel\xe2\x80\x9d 可以通过协议版本 1 的 CompressionLevel 选项进行控制。在调制解调器线路和其他慢速连接上需要压缩,但只会减慢快速网络上的速度。可以在配置文件中逐个主机设置默认值;请参阅压缩选项。

\n
\n\n

听起来好像连接可能在其路径上的某个点受到速率限制(或者更确切地说,在我看来,这似乎是每个连接 50kB/s 的最简单解释,但多个此类连接是可能的),尽管它可能不是一个确保两侧的磁盘都不是一个因素是个坏主意。

\n\n

您还可以运行快速 pcap 来查看是否存在任何“明显”问题(例如大量重传) - 但除非您有信心能够解决此问题,否则我可能只是看看启用压缩是否会帮助。

\n