为什么以小块形式写入我的 NAS 的速度这么慢?

为什么以小块形式写入我的 NAS 的速度这么慢?

我刚刚发现 Python 脚本的瓶颈是将无缓冲的文本文件逐行写入我们的 QNAP NAS。请参阅附加的 Python 代码片段。这真的这么慢吗,还是我们的 QNAP/网络设置有问题?

# 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)

答案1

任何与较大的传输相比,较小的 I/O 会更昂贵。在这种情况下,情况会因以下因素而恶化:

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

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

相关内容