जब मैं छोटे लेखन करता हूं तो SMB / CIFS शेयर के साथ एक प्रदर्शन समस्या को ठीक करने के लिए संघर्ष कर रहा हूं।
पहले, मुझे अपने वर्तमान नेटवर्क सेटअप का वर्णन करने दें:
सर्वर
- Synology DS215j (SMB3 समर्थन सक्षम के साथ)
ग्राहक (एक ही कंप्यूटर ड्यूल-बूटेड वायर्ड गिग-ई)
- Ubuntu 14.04.5 LTS, भरोसेमंद तहर
- विंडोज 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
मैं वर्तमान में (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)
लिनक्स पर प्रोग्राम रन-टाइम (~ 100Mbps पर पीक नेटवर्क आउटपुट):
$ time ./nas-write-test /mnt/nas-main/home/will/test.txt
real 0m0.965s
user 0m0.148s
sys 0m0.672s
PCAP स्नैपशॉट एक ही टीसीपी पैकेट में कई लाइनों का हिस्सा दिखा रहा है:
PowerShell द्वारा मापे गए विंडोज पर प्रोग्राम रन-टाइम:
> 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 लिखें अनुरोध के लिए एकल पंक्ति दिखा रहा है:
यह वही कार्यक्रम विंडोज पर लगभग 10 मिनट (~ 2.3Mbps) लेता है। जाहिर है, विंडोज पीसीएपी बहुत कम पेलोड दक्षता के साथ शोर शोर एसएमबी वार्तालाप को दर्शाता है।
क्या विंडोज पर कोई सेटिंग्स हैं जो छोटे लेखन प्रदर्शन में सुधार कर सकती हैं? पैकेट कैप्चर को देखने से लगता है कि विंडोज राइट को सही तरीके से बफर नहीं करता है और तुरंत एक बार में डेटा को एक लाइन में भेज देता है। जबकि, लिनक्स पर, डेटा भारी होता है और इस प्रकार उसका बेहतर प्रदर्शन होता है। मुझे बताएं कि क्या PCAP फाइलें मददगार होंगी, और मैं उन्हें अपलोड करने का कोई तरीका खोज सकता हूं।
अपडेट 10/27/16:
जैसा कि @sehafoc ने उल्लेख किया है, मैंने max protocol
SMB1 की सेटिंग Samba को निम्न के साथ कम कर दिया है :
max protocol=NT1
उपरोक्त सेटिंग के परिणामस्वरूप सटीक व्यवहार हुआ।
मैंने एक अन्य विंडोज 10 मशीन पर एक हिस्सा बनाकर सांबा के चर को भी हटा दिया, और यह सांबा सर्वर के समान व्यवहार भी प्रदर्शित करता है, इसलिए मुझे विश्वास है कि यह सामान्य रूप से विंडोज क्लाइंट के साथ राइट कैशिंग बग है।
अपडेट: 10/06/17:
पूर्ण लिनक्स पैकेट कैप्चर (14MB)
पूर्ण Windows पैकेट कैप्चर (375MB)
अपडेट: 10/12/17:
मैंने एक NFS शेयर भी सेटअप किया है और विंडोज इसके लिए कोई बफरिंग भी नहीं लिखता है। इसलिए, यह निश्चित रूप से एक अंतर्निहित विंडोज क्लाइंट मुद्दा है जहां तक मैं बता सकता हूं, जो निश्चित रूप से दुर्भाग्यपूर्ण है: - / /
किसी भी सहायता की सराहना की जाएगी!