为什么如此慢地向我的NAS写入小块?

我刚刚发现Python脚本的瓶颈是将一个文本文件逐行写入我们的QNAP NAS。 请参阅附件的Python代码片段。 这是否必然如此缓慢,或者我们的QNAP /networking设置有什么问题?

# local SSD: 2 seconds with open(r'C:\Daten\numbers.txt', 'w') as f: # local SSD with buffering: 2 seconds with open(r'C:\Daten\numbers.txt', 'w', buffering=2**20) as f: # Share on QNAP NAS: ### 36 ... 61 seconds! ### with open(r'I:\numbers.txt', 'w') as f: # Share on QNAP NAS with buffering: 2 ... 3 seconds with open(r'I:\numbers.txt', 'w', buffering=2**20) as f: for i in range(1000000): print(i, file=f) 

与较大的传输相比, 任何小型I / O都将变得昂贵。 在这种情况下,情况正在恶化:

  • 使用无缓冲的I / O
  • 发送数据到networking而不是快速的本地总线
  • 使用远程文件系统协议(即:CIFS或NFS)。

虽然可以通过微调NFS / CIFS / SMB服务器行为来稍微提高性能,但我强烈build议您避免使用通用非缓冲I / O,而采用缓冲I / O +显式清除点(如果您的应用程序需要)。