【发布时间】:2014-09-02 08:45:56
【问题描述】:
我正在使用 python 的 ftplib 将大量数据(约 100 个文件 X 2GB)通过本地网络传输到 FTP 服务器。此代码在 Ubuntu 上运行。这是我的调用(self 是我的 FtpClient 对象,它是 ftplib 客户端的包装器):
# Store file.
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)
我的问题是,如何选择最佳块大小?我的理解是,最佳块大小取决于许多因素,其中最重要的是连接速度和延迟。我的代码将在许多不同的网络上以不同的速度和全天不同程度的拥塞运行。理想情况下,我想在运行时计算最佳块大小。
最佳 FTP 传输块大小是否与最佳 TCP 窗口大小相同?如果这是真的,并且打开了 TCP 窗口缩放,有没有办法从内核中获取最佳 TCP 窗口大小? linux内核如何/何时确定最佳窗口大小?理想情况下,我可以向 linux 内核询问最佳块大小,以避免重新发明轮子。
【问题讨论】:
-
只要网络 i/o 比磁盘 i/o 慢,the kernel should take care of that for you。您也可以考虑设置
TCP_CORK选项。 -
您期望或在这里使用什么样的并发?这是否打算成为单线程应用程序?您能从多路异步 I/O 中受益吗?