작은 쓰기를 수행 할 때 SMB / CIFS 공유의 성능 문제를 해결하기 위해 고심하고 있습니다.
먼저 현재 네트워크 설정을 설명하겠습니다.
섬기는 사람
- Synology DS215j (SMB3 지원 사용)
클라이언트 (동일 컴퓨터 이중 부팅 유선 Gig-E)
- 우분투 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;
}
리눅스 마운트 구성 :
//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
SMB 쓰기 요청 당 한 줄을 표시하는 Windows의 PCAP 스냅 샷 :
이 같은 프로그램은 Windows에서 약 10 분 (~ 2.3Mbps)이 걸립니다. 분명히, Windows PCAP는 페이로드 효율이 매우 낮은 잡음이 많은 SMB 대화를 보여줍니다.
작은 쓰기 성능을 향상시킬 수있는 Windows 설정이 있습니까? 패킷 캡처를 보면 Windows가 쓰기를 올바르게 버퍼링하지 않고 한 번에 한 줄씩 데이터를 즉시 보냅니다. 반면 Linux에서는 데이터가 많이 버퍼링되므로 성능이 훨씬 뛰어납니다. PCAP 파일이 도움이되는지 알려 주시면 업로드 방법을 찾을 수 있습니다.
10/27/16 업데이트 :
@sehafoc에서 언급했듯이 max protocol
다음과 같이 Samba 서버 설정을 SMB1로 줄였습니다 .
max protocol=NT1
위의 설정으로 동일한 동작이 발생했습니다.
또한 다른 Windows 10 컴퓨터에서 공유를 만들어 Samba 변수를 제거했으며 Samba 서버와 동일한 동작을 나타 내기 때문에 이것이 일반적으로 Windows 클라이언트의 쓰기 캐싱 버그라고 생각하기 시작했습니다.
업데이트 : 10/06/17 :
업데이트 : 10/12/17 :
나는 또한 NFS 공유를 설정하고 Windows는 이것을 위해 버퍼링없이 작성합니다. 따라서 내가 말할 수있는 한 분명히 근본적인 Windows 클라이언트 문제입니다.
도움을 주시면 감사하겠습니다!