Performance
為什麼小塊寫入我的 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)
與較大的傳輸相比,任何小的 I/O 都會變得昂貴。在這種情況下,情況會因以下原因而惡化:
- 使用無緩衝 I/O
- 將數據向下發送到網路而不是快速的本地匯流排
- 使用遠端文件系統協議(即:CIFS 或 NFS)。
雖然您可以通過微調 NFS/CIFS/SMB 伺服器行為在一定程度上提高性能,但我強烈建議您避免使用通用非緩衝 I/O,而使用緩衝 I/O + 顯式刷新點(如果您的應用程序需要)。