300Mbit (14%) पर चरम यूडीपी पैकेट हानि, लेकिन TCP> 800Mbit w / o रेट्रांसमिट्स


11

मेरे पास एक iperf3क्लाइंट बॉक्स है , जिसका उपयोग मैं क्लाइंट के रूप में करता हूं, ब्रॉडकॉम BCM5721, 1Gb एडेप्टर (2 पोर्ट, लेकिन परीक्षण के लिए केवल 1 का उपयोग किया गया) के साथ 2 पहचान से सुसज्जित विंडोज 2012 R2 सर्वर बॉक्स से लैस है। सभी मशीनें एकल 1Gb स्विच के माध्यम से जुड़ी हुई हैं।

परीक्षण UDP उदाहरण के लिए 300Mbit

iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192

भेजे गए सभी पैकेटों के 14% के नुकसान में परिणाम (ठीक उसी हार्डवेयर के साथ अन्य सर्वर बॉक्स के लिए, लेकिन पुराने एनआईसी ड्राइवरों में, नुकसान लगभग 2% है), लेकिन नुकसान 50Mbit पर भी होता है, हालांकि कम गंभीर रूप से। समकक्ष सेटिंग्स का उपयोग करते हुए टीसीपी प्रदर्शन:

iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192

पैदावार संचरण की गति 800Mbit के उत्तर में है, जिसमें कोई रिपोर्ट नहीं है।

सर्वर हमेशा निम्नलिखित विकल्पों का उपयोग करके शुरू किया जाता है:

iperf3 -sB192.168.30.161

किस पर दोष लगाएँ?

  1. लिनक्स क्लाइंट बॉक्स (हार्डवेयर? ड्राइवर? सेटिंग्स?) संपादित करें: मैंने सिर्फ एक विंडोज सर्वर बॉक्स से दूसरे में परीक्षण चलाया और यूडीपी पैकेट का नुकसान 300Mbit पर अधिक% पर भी अधिक था
  2. विंडोज़ सर्वर बॉक्स (हार्डवेयर? ड्राइवर? सेटिंग्स?)
  3. (एकल) स्विच जो सभी परीक्षण मशीनों को जोड़ता है?
  4. केबल्स?

संपादित करें:

अब मैंने दूसरी दिशा की कोशिश की: विंडोज -> लिनक्स। परिणाम: पैकेट का नुकसान हमेशा 0 होता है , जबकि थ्रूपुट अधिकतम पर निकलता है

  • 840Mbit के लिए -l8192, यानी खंडित आईपी पैकेट
  • 250Mbit -l1472, अनफ़ैग्मेंटेड IP पैकेट्स

मुझे लगता है कि प्रवाह नियंत्रण कैप थ्रूपुट है, और पैकेट नुकसान को रोकता है। विशेष रूप से बाद का, अव्यवस्थित आंकड़ा टीसीपी थ्रूपुट (खंडित टीसीपी के लिए समान आकृतियां उत्पन्न करता है) के पास कहीं नहीं है, लेकिन यह पैकेट नुकसान के संदर्भ में लिनक्स -> विंडोज पर एक असीम रूप से बहुत बड़ा सुधार है।

और कैसे पता करें?

मैंने प्रदर्शन को अधिकतम करने के लिए सर्वर सेटिंग्स पर ड्राइवर सेटिंग्स के लिए सामान्य सलाह का पालन किया और सक्षम / अक्षम / अधिकतम / न्यूनतम / परिवर्तन करने का प्रयास किया

  • रुकावट का मॉडरेशन
  • प्रवाह नियंत्रण
  • बफर प्राप्त करें
  • आरएसएस
  • लैन पर जागो

सभी ऑफलोड सुविधाएँ सक्षम हैं।

संपादित करें मैंने भी सक्षम / अक्षम करने का प्रयास किया

  • ईथरनेट @ Wirespeed
  • विभिन्न ऑफलोड सुविधाएँ
  • प्राथमिकता और VLAN

समान हानि दर के साथ।


UDP रन का पूर्ण आउटपुट:

$ iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:10:39 GMT
Connecting to host 192.168.30.161, port 5201   
      Cookie: mybox.1431522639.098587.3451f174
[  4] local 192.168.30.202 port 50851 connected to 192.168.30.161 port 5201
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec  33.3 MBytes   279 Mbits/sec  4262
[  4]   1.00-2.00   sec  35.8 MBytes   300 Mbits/sec  4577
[  4]   2.00-3.00   sec  35.8 MBytes   300 Mbits/sec  4578
[  4]   3.00-4.00   sec  35.8 MBytes   300 Mbits/sec  4578
[  4]   4.00-5.00   sec  35.8 MBytes   300 Mbits/sec  4577
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-5.00   sec   176 MBytes   296 Mbits/sec  0.053 ms  3216/22571 (14%)
[  4] Sent 22571 datagrams
CPU Utilization: local/sender 4.7% (0.4%u/4.3%s), remote/receiver 1.7% (0.8%u/0.9%s)

Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44770
[  5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 50851
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-1.01   sec  27.2 MBytes   226 Mbits/sec  0.043 ms  781/4261 (18%)
[  5]   1.01-2.01   sec  30.0 MBytes   252 Mbits/sec  0.058 ms  734/4577 (16%)
[  5]   2.01-3.01   sec  29.0 MBytes   243 Mbits/sec  0.045 ms  870/4578 (19%)
[  5]   3.01-4.01   sec  32.1 MBytes   269 Mbits/sec  0.037 ms  469/4579 (10%)
[  5]   4.01-5.01   sec  32.9 MBytes   276 Mbits/sec  0.053 ms  362/4576 (7.9%)

TCP रन:

$ iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:13:53 GMT
Connecting to host 192.168.30.161, port 5201   
      Cookie: mybox.1431522833.505583.4078fcc1
      TCP MSS: 1448 (default)
[  4] local 192.168.30.202 port 44782 connected to 192.168.30.161 port 5201
Starting Test: protocol: TCP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   109 MBytes   910 Mbits/sec    0   91.9 KBytes       
[  4]   1.00-2.00   sec  97.3 MBytes   816 Mbits/sec    0   91.9 KBytes       
[  4]   2.00-3.00   sec  97.5 MBytes   818 Mbits/sec    0   91.9 KBytes       
[  4]   3.00-4.00   sec  98.0 MBytes   822 Mbits/sec    0   91.9 KBytes       
[  4]   4.00-5.00   sec  97.6 MBytes   819 Mbits/sec    0   91.9 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-5.00   sec   499 MBytes   837 Mbits/sec    0             sender
[  4]   0.00-5.00   sec   498 MBytes   836 Mbits/sec                  receiver
CPU Utilization: local/sender 3.5% (0.5%u/3.0%s), remote/receiver 4.5% (2.0%u/2.5%s)

Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44781
[  5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 44782
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   105 MBytes   878 Mbits/sec                  
[  5]   1.00-2.00   sec  97.5 MBytes   818 Mbits/sec                  
[  5]   2.00-3.00   sec  97.6 MBytes   819 Mbits/sec                  
[  5]   3.00-4.00   sec  97.8 MBytes   820 Mbits/sec                  
[  5]   4.00-5.00   sec  97.7 MBytes   820 Mbits/sec                  

जवाबों:


8

कोई बात नहीं है। यह सामान्य और अपेक्षित व्यवहार है।

पैकेट नुकसान का कारण यह है कि यूडीपी का कोई नियंत्रण नहीं है। टीसीपी में जब कंजेशन कंट्रोल एल्गोरिदम किक करता है, तो यह थ्रूपुट को अधिकतम करने और नुकसान को कम करने के लिए भेजने को धीमा करने के लिए संचारित अंत को बताएगा।

तो यह वास्तव में यूडीपी के लिए पूरी तरह से सामान्य व्यवहार है। यूडीपी डिलीवरी की गारंटी नहीं देता है यदि प्राप्त कतार अतिभारित है और पैकेट छोड़ देगा। यदि आप UDP के लिए उच्च संचारित दरें चाहते हैं, तो आपको अपने प्राप्त बफर को बढ़ाने की आवश्यकता है।

-L या --len iperf विकल्प को ट्रिक करना चाहिए। और संभवतः क्लाइंट पर लक्ष्य बैंडविड्थ सेटिंग -b।

-l, --len n [KM] सेट लंबाई पढ़ने / लिखने बफर करने के लिए n (डिफ़ॉल्ट 8 KB)

8KB ?? जब कंजेशन कंट्रोल नहीं होता है तो वह छोटी सी तरफ होता है।

जैसे सर्वर की तरफ।

~$ iperf -l 1M -U -s

यह वही है जो मुझे लिनक्स से लिनक्स में मिलता है

Client connecting to ostore, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.107 port 35399 connected with 192.168.0.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.10 GBytes   943 Mbits/sec

लेकिन UDP के लिए डिफ़ॉल्ट सेटिंग्स का उपयोग करके मुझे केवल मिलता है

~$ iperf -u -c ostore 
------------------------------------------------------------
Client connecting to ostore, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.107 port 52898 connected with 192.168.0.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
[  3] Sent 893 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   0.027 ms    0/  893 (0%)

WT?

कुछ प्रयोग के बाद मैंने पाया कि मुझे लंबाई और बैंडविड्थ लक्ष्य दोनों निर्धारित करने थे।

~$ iperf -u -c ostore -l 8192 -b 1G
------------------------------------------------------------
Client connecting to ostore, UDP port 5001
Sending 8192 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.107 port 60237 connected with 192.168.0.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.12 GBytes   958 Mbits/sec
[  3] Sent 146243 datagrams
[  3] WARNING: did not receive ack of last datagram after 10 tries.

सर्वर साइड:

~$ iperf -s -u -l 5M 
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 5242880 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.10 port 5001 connected with 192.168.0.107 port 36448
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-10.1 sec  1008 KBytes   819 Kbits/sec   0.018 ms    0/  126 (0%)
[  4] local 192.168.0.10 port 5001 connected with 192.168.0.107 port 60237
[  4]  0.0-10.0 sec  1.12 GBytes   958 Mbits/sec   0.078 ms    0/146242 (0%)
[  4]  0.0-10.0 sec  1 datagrams received out-of-order

छोटे बफ़र्स के साथ पैकेट हानि को प्रदर्शित करने के लिए। ईमानदार होने के लिए उतना चरम नहीं है जितना मैं उम्मीद कर रहा था। IPerf3 के लिए एक विश्वसनीय स्रोत कहां है मैं लिनक्स / विंडोज के बीच परीक्षण कर सकता हूं?

~$ iperf -u -c ostore -l 1K -b 1G
------------------------------------------------------------
Client connecting to ostore, UDP port 5001
Sending 1024 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.107 port 45061 connected with 192.168.0.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   674 MBytes   565 Mbits/sec
[  3] Sent 689777 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec   670 MBytes   562 Mbits/sec   0.013 ms 3936/689776 (0.57%)
[  3]  0.0-10.0 sec  1 datagrams received out-of-order

सर्वर साइड:

~$ iperf -s -u -l 1K 
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1024 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.10 port 5001 connected with 192.168.0.107 port 45061
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec   670 MBytes   562 Mbits/sec   0.013 ms 3936/689776 (0.57%)
[  3]  0.0-10.0 sec  1 datagrams received out-of-order

क्या आपने भी iperf3 github पृष्ठ readme को देखा है?

ज्ञात पहलु

यूडीपी प्रदर्शन: उच्च यूडीपी दरों (10 एमबीपीएस से अधिक) पर परीक्षण किए गए ईएसनेट 100 जी पर iperf3 के साथ कुछ समस्याएं देखी गई हैं। लक्षण यह है कि iperf3 के किसी विशेष रन पर रिसीवर ग्राहक की ओर से उपयोग किए गए -b विकल्प की परवाह किए बिना लगभग 20% की हानि दर की रिपोर्ट करता है। यह समस्या iperf3- विशिष्ट नहीं प्रतीत होती है, और CPU पर iperf3 प्रक्रिया की नियुक्ति और इनबाउंड NIC से इसके संबंध के कारण हो सकती है। कुछ मामलों में सीपीयू आत्मीयता (-ए) विकल्प के उचित उपयोग से इस समस्या को कम किया जा सकता है। (अंक # 55)

आप एक धीमी एनआईसी का उपयोग कर रहे हैं, लेकिन मुझे आश्चर्य है कि अगर यह संबंधित है।


हाँ और पैकेट के नुकसान के रूप में, मैं आपको दिखाता हूँ कि यह कैसे हो सकता है। अद्यतन उत्तर।
मैट

धन्यवाद मैट, बस अपना अपडेट देखा। मेरा iperf (विंडोज सर्वर और लिनक्स क्लाइंट दोनों पर) संस्करण 2.0.5 है। आपका क्या है?
यूजीन बेरेसोव्स्की

यह वही। और वास्तव में जब मैं लक्ष्य बैंडविड्थ को 1G पर सेट करता हूं तो मुझे 14756449370562973696 बाइट्स / सेक और अन्य ऐसे भ्रष्ट आउटपुट की बोनक्स बैंडविड्थ दरें मिलती हैं। इसलिए मुझे लगता है कि यह शायद टूट गया है। फिर भी मुझे लगता है कि समस्याएं बफ़र हैं ... मुझे पता है कि विंडोज़ टीसीपी और यूडीपी बफरिंग के साथ कुछ असामान्य चीजें करती है।
मैट

अजीब। बाद में आज मैं शायद एक अच्छे 10G प्रोडक्शन के माहौल में पहुँच जाऊँगा और उस एक पर iperf3 को ढीला कर दूँगा। देखते हैं कि कैसे जाता है।
यूजीन बेरेसोव्स्की

1
मुझे लगता है कि आप गलत समझते हैं कि -lस्विच क्या करता है। यह बफर आकार निर्धारित नहीं करता है; यह पैकेट का आकार निर्धारित करता है। यह डेटा की राशि है iperf3 एक ही बार में सॉकेट को लिख देगा, और एक बार में सॉकेट से पढ़ा जाएगा। आप सॉकेट बफर आकार का उपयोग करके सेट कर सकते हैं -w। यदि आप स्रोत को देखते हैं, तो आप देखेंगे कि यह setsockopt()आपके द्वारा निर्दिष्ट के बाद सॉकेट बफर आकार को सेट करने के लिए कहता है -w
एंड्रेस कोर्न

0

आप पूरी तरह से सबसे स्पष्ट अपराधी - एडाप्टर्स, और फिर ड्राइवरों से चूक गए (आप कहते हैं कि एक अलग संस्करण ड्राइवरों का उपयोग करने से विभिन्न परिणाम मिलते हैं)।

सभी ऑफलोड क्षमताओं को बंद करने का प्रयास करें।


इससे मदद नहीं मिली - सवाल उसी हिसाब से अपडेट हुआ।
यूजीन बेरेसोव्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.