小さな書き込みを実行するときに、SMB / CIFS共有のパフォーマンスの問題を修正するのに苦労しています。
最初に、現在のネットワーク設定について説明します。
サーバ
- Synology DS215j(SMB3サポートが有効)
クライアント(同じコンピューターのデュアルブート有線Gig-E)
- Ubuntu 14.04.5 LTS、Trusty Tahr
- ウィンドウズ8.1
smb.conf
[global]
printcap name=cups
winbind enum groups=yes
include=/var/tmp/nginx/smb.netbios.aliases.conf
socket options=TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
security=user
local master=no
realm=*
passdb backend=smbpasswd
printing=cups
max protocol=SMB3
winbind enum users=yes
load printers=yes
workgroup=WORKGROUP
私は現在、C ++で記述された次のプログラム(GitHub上)を使用して、小規模な書き込みパフォーマンスをテストしています。
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
ofstream outFile(argv[1]);
for(int i = 0; i < 1000000; i++)
{
outFile << "Line #" << i << endl;
}
outFile.flush();
outFile.close();
return 0;
}
Linuxマウント構成:
//192.168.1.10/nas-main on /mnt/nas-main type cifs (rw,noexec,nodev)
Linuxでのプログラムの実行時間(ネットワーク出力のピークは〜100Mbps):
$ time ./nas-write-test /mnt/nas-main/home/will/test.txt
real 0m0.965s
user 0m0.148s
sys 0m0.672s
単一のTCPパケットへの多数の行のチャンキングを示すPCAPスナップショット:
PowerShellで測定したWindowsでのランタイムのプログラム:
> Measure-Command {start-process .\nas-write-test.exe -argumentlist "Z:\home\will\test-win.txt" -wait}
Days : 0
Hours : 0
Minutes : 9
Seconds : 29
Milliseconds : 316
Ticks : 5693166949
TotalDays : 0.00658931359837963
TotalHours : 0.158143526361111
TotalMinutes : 9.48861158166667
TotalSeconds : 569.3166949
TotalMilliseconds : 569316.6949
Windows上のPCAPスナップショットで、SMB書き込み要求ごとに1行が表示されます。
この同じプログラムは、Windowsでは約10分(約2.3Mbps)かかります。明らかに、Windows PCAPは、非常に低いペイロード効率で非常にノイズの多いSMB会話を示します。
小さな書き込みパフォーマンスを改善できるWindowsの設定はありますか?パケットキャプチャを見ると、Windowsは書き込みを適切にバッファリングせず、一度に1行ずつデータをすぐに送信しているようです。一方、Linuxでは、データは大量にバッファリングされるため、パフォーマンスははるかに優れています。PCAPファイルが役立つかどうか教えてください。アップロードする方法を見つけることができます。
2016年10月27日更新:
@sehafocで述べたようにmax protocol
、次のようにしてSambaサーバーの設定をSMB1に減らしました。
max protocol=NT1
上記の設定では、まったく同じ動作が発生しました。
また、別のWindows 10マシンで共有を作成してSambaの変数を削除しました。また、Sambaサーバーと同じ動作をするため、これは一般にWindowsクライアントの書き込みキャッシュのバグであると考え始めています。
アップデート:10/06/17:
アップデート:10/12/17:
また、NFS共有をセットアップしましたが、Windowsでも、バッファリングなしで書き込みを行っています。ですから、私が知る限り、それは間違いなくWindowsクライアントの根本的な問題であり、これは間違いなく残念です:-/
何か助けていただければ幸いです!