Performance

為什麼小塊寫入我的 NAS 這麼慢?

  • November 10, 2017

我剛剛發現 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)

與較大的傳輸相比,任何小的 I/O 都會變得昂貴。在這種情況下,情況會因以下原因而惡化:

  • 使用無緩衝 I/O
  • 將數據向下發送到網路而不是快速的本地匯流排
  • 使用遠端文件系統協議(即:CIFS 或 NFS)。

雖然您可以通過微調 NFS/CIFS/SMB 伺服器行為在一定程度上提高性能,但我強烈建議您避免使用通用非緩衝 I/O,而使用緩衝 I/O + 顯式刷新點(如果您的應用程序需要)。

引用自:https://serverfault.com/questions/882866