परिदृश्य: हमारे पास कई विंडोज क्लाइंट नियमित रूप से बड़ी फ़ाइलों (FTP / SVN / HTTP PUT / SCP) को लिनक्स सर्वरों पर अपलोड कर रहे हैं जो ~ 100-160ms दूर हैं। हमारे पास कार्यालय में 1Gbit / s सिंक्रोनस बैंडविड्थ है और सर्वर या तो AWS उदाहरण हैं या शारीरिक रूप से US DC में होस्ट किए गए हैं।
प्रारंभिक रिपोर्ट यह थी कि एक नए सर्वर उदाहरण पर अपलोड किए जाने की तुलना में बहुत धीमी थी। यह परीक्षण में और कई स्थानों से बाहर है; क्लाइंट अपने विंडोज सिस्टम से होस्ट को स्थिर 2-5Mbit / s देख रहे थे।
मैं iperf -s
AWS के उदाहरण पर टूट गया और फिर कार्यालय में एक विंडोज क्लाइंट से:
iperf -c 1.2.3.4
[ 5] local 10.169.40.14 port 5001 connected with 1.2.3.4 port 55185
[ 5] 0.0-10.0 sec 6.55 MBytes 5.48 Mbits/sec
iperf -w1M -c 1.2.3.4
[ 4] local 10.169.40.14 port 5001 connected with 1.2.3.4 port 55239
[ 4] 0.0-18.3 sec 196 MBytes 89.6 Mbits/sec
उत्तरार्द्ध का आंकड़ा बाद के परीक्षणों पर काफी भिन्न हो सकता है, (AWS के Vagaries) लेकिन आमतौर पर 70 और 130Mbit / s के बीच होता है जो हमारी आवश्यकताओं के लिए पर्याप्त से अधिक है। Wiresharking सत्र, मैं देख सकता हूँ:
iperf -c
विंडोज SYN - विंडो 64kb, स्केल 1 - लिनक्स SYN, ACK: विंडो 14kb, स्केल: 9 (* 512)iperf -c -w1M
विंडोज SYN - विंडोज 64kb, स्केल 1 - लिनक्स SYN, ACK: विंडो 14kb, स्केल: 9
स्पष्ट रूप से लिंक इस उच्च थ्रूपुट को बनाए रख सकता है, लेकिन मुझे इसका कोई भी उपयोग करने के लिए विंडो का आकार निर्धारित करना होगा, जो कि अधिकांश वास्तविक दुनिया एप्लिकेशन मुझे नहीं करने देंगे। टीसीपी हैंडशेक प्रत्येक मामले में एक ही शुरुआती बिंदु का उपयोग करते हैं, लेकिन मजबूर एक तराजू
इसके विपरीत, एक ही नेटवर्क पर एक लिनक्स क्लाइंट से एक सीधा, iperf -c
(सिस्टम डिफ़ॉल्ट 85kb का उपयोग करके) मुझे देता है:
[ 5] local 10.169.40.14 port 5001 connected with 1.2.3.4 port 33263
[ 5] 0.0-10.8 sec 142 MBytes 110 Mbits/sec
किसी भी मजबूर के बिना, यह उम्मीद के अनुरूप है। यह हस्तक्षेप करने वाले हॉप्स या हमारे स्थानीय स्विच / राउटर में कुछ नहीं हो सकता है और विंडोज 7 और 8 क्लाइंट को समान रूप से प्रभावित करता है। मैंने ऑटो-ट्यूनिंग पर बहुत सारे गाइड पढ़े हैं, लेकिन ये आमतौर पर खराब भयानक होम नेटवर्किंग किट के आसपास काम करने के लिए स्केलिंग को अक्षम करने के बारे में हैं।
क्या कोई मुझे बता सकता है कि यहां क्या हो रहा है और मुझे इसे ठीक करने का एक तरीका देना है? (अधिमानतः कुछ मैं जीपीओ के माध्यम से रजिस्ट्री में चिपका सकता हूं।)
टिप्पणियाँ
प्रश्न में AWS लिनक्स उदाहरण में निम्नलिखित कर्नेल सेटिंग्स लागू हैं sysctl.conf
:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.ipv4.tcp_rmem = 4096 1048576 16777216
net.ipv4.tcp_wmem = 4096 1048576 16777216
मैंने किसी अन्य संभावित अड़चन को दूर करने और हटाने के लिए सर्वर के अंत में dd if=/dev/zero | nc
पुनर्निर्देशन का उपयोग किया है , लेकिन परिणाम बहुत समान हैं। ऊपर दिए गए iperf परीक्षणों के रूप में उसी तरह से टेस्ट (साइगविन, नेटिव विंडोज, लिनक्स) पैमाने पर टेस्ट किए जाते हैं।/dev/null
iperf
ncftp
संपादित करें
मैंने यहाँ एक और सुसंगत बात बताई है जो प्रासंगिक हो सकती है:
यह 1MB कैप्चर का पहला सेकेंड है, जिसे ज़ूम इन किया गया है। आप विंडो स्टार्ट होने के बाद स्लो स्टार्ट एक्शन देख सकते हैं और बफर बड़ा हो जाता है। वहाँ तो ~ 0.2s के इस छोटे से पठार बिल्कुल बिंदु पर है कि डिफ़ॉल्ट विंडो iperf परीक्षण हमेशा के लिए बाहर समतल है। यह एक निश्चित रूप से बहुत चक्करदार ऊंचाइयों को बढ़ाता है, लेकिन यह उत्सुक है कि स्केलिंग में यह ठहराव है (ऐसा करने से पहले मान 1022bytes * 512 = 523264) हैं।
अपडेट - 30 जून।
विभिन्न प्रतिक्रियाओं के बाद:
- CTCP सक्षम करना - इससे कोई फर्क नहीं पड़ता; विंडो स्केलिंग समान है। (यदि मैं इसे सही ढंग से समझता हूं, तो यह सेटिंग उस दर को बढ़ा देती है जिस पर भीड़ की खिड़की अधिकतम आकार के बजाय बढ़ जाती है)
- टीसीपी टाइमस्टैम्प को सक्षम करना। - यहां भी कोई बदलाव नहीं।
- नागल का एल्गोरिथ्म - जो समझ में आता है और कम से कम इसका मतलब है कि मैं शायद ग्राफ़ में उस विशेष ब्लिप्स को समस्या के किसी भी संकेत के रूप में अनदेखा कर सकता हूं।
- pcap फाइलें: जिप फाइल यहां उपलब्ध है: https://www.dropbox.com/s/104qdysmk01lnf6/iperf-pcaps-10s-Win%2BLinux-2014-06-30.zip (bwwiste के साथ अनाम, ~ 150MB तक अर्क) तुलना के लिए प्रत्येक OS क्लाइंट से एक)
अपडेट 2 - 30 जून
ओ, इसलिए काइल सुझाव पर निम्नलिखित, मैंने ctcp और अक्षम चिमनी ऑफ़लोडिंग सक्षम किया है: टीसीपी ग्लोबल पैरामीटर्स
----------------------------------------------
Receive-Side Scaling State : enabled
Chimney Offload State : disabled
NetDMA State : enabled
Direct Cache Acess (DCA) : disabled
Receive Window Auto-Tuning Level : normal
Add-On Congestion Control Provider : ctcp
ECN Capability : disabled
RFC 1323 Timestamps : enabled
Initial RTO : 3000
Non Sack Rtt Resiliency : disabled
लेकिन दुख की बात है कि थ्रूपुट में कोई बदलाव नहीं हुआ।
मेरे पास यहां कारण / प्रभाव का सवाल है, हालांकि: रेखांकन क्लाइंट के सर्वर में ACWs में निर्धारित RWIN मान के हैं। विंडोज क्लाइंट्स के साथ, क्या मैं यह सोचने में सही हूं कि लिनक्स उस मूल्य को उस निम्न बिंदु से आगे नहीं बढ़ा रहा है क्योंकि क्लाइंट का सीमित सीडब्ल्यूआईएन उस बफर को भी भरने से रोकता है? क्या कोई और कारण हो सकता है कि लिनक्स कृत्रिम रूप से RWIN को सीमित कर रहा है?
नोट: मैंने ईसीएन को इसके नरक के लिए चालू करने की कोशिश की है; लेकिन कोई बदलाव नहीं।
अपडेट ३ - ३१ जून।
हेयुरेटिक्स और RWIN ऑटोट्यूनिंग को अक्षम करने के बाद कोई परिवर्तन नहीं। ने सॉफ्टवेयर के साथ नवीनतम (12.10.28.0) इंटेल नेटवर्क ड्राइवरों को अपडेट किया है जो कि फंक्शनलियोएनलिटी ट्विकस वाइडेविस मैनेजर टैब को उजागर करता है। कार्ड एक 82579V चिपसेट ऑन-बोर्ड एनआईसी है - (मैं रियलटेक या अन्य विक्रेताओं के साथ ग्राहकों से कुछ और परीक्षण करने जा रहा हूं)
एक पल के लिए एनआईसी पर ध्यान केंद्रित करते हुए, मैंने निम्नलिखित की कोशिश की है (ज्यादातर सिर्फ असंभव अपराधियों को सत्तारूढ़ करना):
- बफ़र्स को 256 से 2k तक बढ़ाएं और बफ़र्स को 512 से 2k तक प्रसारित करें (दोनों अब अधिकतम पर) - कोई परिवर्तन नहीं
- अक्षम सभी आईपी / टीसीपी / यूडीपी चेकसम ऑफलोडिंग। - कोई परिवर्तन नहीं होता है।
- विकलांग बड़े भेजें बोझ - नाडा।
- IPv6, QoS शेड्यूल करना बंद कर दिया - Nowt।
अपडेट 3 - जुलाई 3
लिनक्स सर्वर पक्ष को खत्म करने की कोशिश कर रहा है, मैंने एक सर्वर 2012R2 उदाहरण शुरू किया और iperf
(cygwin बाइनरी) और NTttcp का उपयोग करके परीक्षणों को दोहराया ।
साथ iperf
, मैं स्पष्ट रूप से निर्दिष्ट किया था -w1m
पर दोनों से पहले कनेक्शन परे ~ 5Mbit / एस पैमाने पर होता पक्षों। (संयोग से, मुझे चेक किया जा सकता है और 91ms विलंबता पर ~ 5Mbit की BDP लगभग ठीक 64kb है। सीमा को सीमित करें ...)
Ntttcp बायनेरिज़ ने अब ऐसी सीमा दिखाई। ntttcpr -m 1,0,1.2.3.5
सर्वर और ntttcp -s -m 1,0,1.2.3.5 -t 10
क्लाइंट पर उपयोग करके , मैं बहुत बेहतर थ्रूपुट देख सकता हूं:
Copyright Version 5.28
Network activity progressing...
Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
0 9.990 8155.355 65536.000
##### Totals: #####
Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
79.562500 10.001 1442.556 7.955
Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
127.287 308.256 1273.000
DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
1868.713 0.785 9336.366 0.157
Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
57833 14664 0 0 9.476
8MB / s इसे उन स्तरों पर रखता है जो मुझे स्पष्ट रूप से बड़ी खिड़कियों के साथ मिल रहे थे iperf
। विचित्र रूप से, हालांकि, 1273 बफ़र्स में 80MB = 64kB बफर फिर से। एक और वायरशर्क सर्वर से एक अच्छा, परिवर्तनशील आरडब्ल्यूआईएन दिखा रहा है (स्केल फैक्टर 256) जिसे ग्राहक पूरा करता है; तो शायद ntttcp भेजें विंडो को गलत बता रहा है।
अद्यतन 4 - जुलाई 3
@ Karyhead के अनुरोध पर, मैंने कुछ और परीक्षण किए हैं और कुछ और कैप्चर किए हैं, यहां: https://www.dropbox.com/s/dtlvy1vi46x75it/iperf%2Bntttcp%2Bftp-pcaps-2014-07-03.zip
- दो से अधिक
iperf
s, दोनों विंडोज से एक ही लिनक्स सर्वर से पहले (1.2.3.4): एक 128k सॉकेट आकार और डिफ़ॉल्ट 64k विंडो के साथ (एक बार फिर ~ 5Mbit / s तक सीमित) और एक 1MB सेंड विंडो और डिफ़ॉल्ट 8k सॉकेट के साथ। आकार। (तराजू अधिक) ntttcp
सर्वर 2012R2 EC2 उदाहरण (1.2.3.5) में समान विंडोज क्लाइंट से एक ट्रेस। यहाँ, थ्रूपुट तराजू अच्छी तरह से। नोट: NTttcp पोर्ट 6001 पर परीक्षण कनेक्शन खोलने से पहले कुछ अजीब करता है। यकीन नहीं होता कि वहां क्या हो रहा है।- एक एफ़टीपी डेटा ट्रेस,
/dev/urandom
सिग्विन का उपयोग करके समरूप लिनक्स होस्ट (1.2.3.6) के पास 20MB अपलोड करनाncftp
। फिर से मर्यादा है। Windows Filezilla का उपयोग करके पैटर्न बहुत समान है।
iperf
बफर लंबाई बदलने से समय अनुक्रम ग्राफ (बहुत अधिक ऊर्ध्वाधर खंड) में अपेक्षित अंतर पड़ता है, लेकिन वास्तविक थ्रूपुट अपरिवर्तित होता है।
netsh int tcp set global timestamps=enabled