我在虚拟机上存储了一些文件,我正在将这些文件下载到我的电脑上。大约有 100 万个文件,我一直在使用以下命令:
scp vm_user@IP:/home/vm_user/path_to_files /Users/documents
正如您可以想象的那样,这很慢,因为它会一个接一个地下载文件。是否有更快的替代方案可以异步下载文件或对下载应用并发以提高下载速度?
答案1
正如您可以想象的那样,这很慢,因为它会一个接一个地下载文件。
定义“一个接一个”:这是一个连接,每个文件后无需重新建立任何内容。 (顺便说一句,虽然该程序名为scp
,但所使用的协议几乎肯定不是 SCP,而是 SFTP——这是更现代的。)
请注意,SFTP已经在我所知道的所有实现中使用请求队列,因此在完成第一个文件传输和开始下一个文件数据/名称/属性传输之间没有“停滞时间”。
是否有更快的替代方案可以异步下载文件
在这种情况下“异步”意味着什么?因为你在后台等待某件事完成并不比阻塞地等待它更快,
或者对下载应用并发以提高下载速度?
并发本身根本不会提高下载速度。相反,它增加了接收端的开销和潜在的文件系统碎片,以及发送端的寻道时间/缓存失效。
当网络服务器限制每个连接的速度时,它会有所帮助。那么你就绕过了人为的限制。我不认为你在这里人为地限制每个连接。
请注意,这里的假设是这些文件都很小,只有几个网络缓冲区大小。如果情况并非如此,则 SSH 提供给更高层 (SFTP) 的内部缓冲区架构会限制您的吞吐量;在这种情况下,只需使用rsync
,或类似的东西ssh user@host tar -cf - --zstd folder/to/be/sent | tar -xf - --zstd
。 (这两个选项仍然是连续的,因为顺序不是你的问题。)