gpt4 book ai didi

Python ftplib 最佳 block 大小?

转载 作者:太空狗 更新时间:2023-10-29 17:49:22 25 4
gpt4 key购买 nike

我正在使用 python 的 ftplib 通过本地网络将大量数据(约 100 个文件 X 2GB)传输到 FTP 服务器。此代码在 Ubuntu 上运行。这是我的调用(self 是我的 FtpClient 对象,它是 ftplib 客户端的包装器):

# Store file.      
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)

我的问题是,如何选择最佳 block 大小?我的理解是,最佳 block 大小取决于许多因素,其中最重要的是连接速度和延迟。我的代码将在许多不同的网络上以不同的速度和不同程度的拥塞全天运行。理想情况下,我想在运行时计算最佳 block 大小。

最佳 FTP 传输 block 大小是否与最佳 TCP 窗口大小相同?如果这是真的,并且打开了 TCP 窗口缩放,是否有办法从内核中获取最佳的 TCP 窗口大小? Linux内核如何/何时确定最佳窗口大小?理想情况下,我可以向 linux 内核询问最佳 block 大小,以避免重新发明轮子。

最佳答案

这是一个有趣的问题,我不得不深入研究一下 ;)

无论如何,这是一个如何确定 MTU 的好例子:http://erlerobotics.gitbooks.io/erle-robotics-python-gitbook-free/content/udp_and_tcp/udp_fragmentation.html

但是,您还应该考虑以下问题:MTU 是一种本地现象,可能只涉及本地网络的一部分。您考虑的是路径 MTU,即完整传输路径上的最小 MTU。 http://en.wikipedia.org/wiki/Path_MTU_Discovery因此,您必须了解每个相关组件的每个 MTU。这可能是个问题,例如,如果您使用巨型帧而交换机未使用,则交换机必须拆分帧。我已经遇到交换机不理解巨型帧并丢弃帧的问题。

现在是最有趣的问题:最佳 block 大小。很多 python 函数都采用 blocksize 或 chunksize 之类的参数。但它们没有解决底层传输协议(protocol)的 block 大小问题。 block 大小定义了一个读取缓冲区,其中包含要发送/读取的数据。 ftplib 中的标准大小是 8K(8192 字节)。因此,调整 block 大小应该不会真正影响传输速度。

控制底层传输协议(protocol)的 MTU 将由操作系统及其内核处理。

最后说说 ftp。 ftp 是一种古老的恐龙,它易于设置和使用,但并不总是传输文件的最佳方法。特别是如果您传输大量小文件。我不完全了解您的用例,因此考虑其他传输协议(protocol)替代方案(如 rsync 或 bbcp)可能是有意义的。后者似乎大大提高了复制速度。你真的应该看看http://moo.nac.uci.edu/~hjm/HOWTO_move_data.html

只是我的两分钱...

关于Python ftplib 最佳 block 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com