Wifi TCP iperf ทรูพุต: 1 สตรีมเทียบกับหลายสตรีม


12

ในการทดสอบการรับส่งข้อมูล WLAN iperf TCP สตรีมขนานหลายรายการจะให้ปริมาณงานสูงกว่าฉัน 1 สตรีม ฉันพยายามเพิ่มขนาดหน้าต่าง TCP แต่ฉันก็ยังไม่สามารถรับปริมาณงานสูงสุดด้วยการสตรีมเพียง 1 ครั้ง มีอย่างอื่นในเลเยอร์ TCP ที่ป้องกันไม่ให้มีการใช้ความจุลิงก์แบบเต็มหรือไม่


คุณสังเกตเห็นความแตกต่างมากน้อยแค่ไหน ถ้าเป็นอย่างนั้นหากสตรีม TCP หนึ่งรายการให้ปริมาณงานของ T ทั้งสองคนควรให้ปริมาณงานแต่ละตัวเป็น T / 2
Manoj Pandey

โปรดทราบว่าความจุลิงก์แบบเต็มไม่ว่าจะมีสตรีมจำนวนเท่าใดก็ตาม IPv4 ที่มีส่วนหัวน้อยที่สุด [IP + TCP] จะให้ประสิทธิภาพช่องสัญญาณที่ 95% ดูดีพิธีสารการโพสต์ค่าใช้จ่ายที่sd.wareonearth.com/~phil/net/overhead
Generalnetworkerror

@ManojPandey ฉันไม่แน่ใจว่าเขาเห็นกรณีที่เหมาะ ... โดยเฉพาะอย่างยิ่งเนื่องจากเขาใช้ wifi ... ฉันสงสัยว่าเขามีแพ็กเก็ตหาย ...
Mike Pennington

TCP ดูดข้อมูลผ่าน Wi-Fi จัดการกับมัน หากคุณต้องใช้มันและคุณเห็นการสูญเสียของแพ็คเก็ตเลเยอร์ 3 ฉันขอแนะนำให้เพิ่มจำนวนการลองส่งซ้ำสูงสุดของเลเยอร์ 2 เนื่องจาก TCP ไม่ได้ออกแบบมาเพื่อจัดการกับลิงก์ที่สูญหายโดยไม่ทำลายประสิทธิภาพ
BatchyX

คำตอบ:


14

ในการทดสอบการรับส่งข้อมูล WLAN iperf TCP สตรีมขนานหลายรายการจะให้ปริมาณงานสูงกว่าฉัน 1 สตรีม ฉันพยายามเพิ่มขนาดหน้าต่าง TCP แต่ฉันก็ยังไม่สามารถรับปริมาณงานสูงสุดด้วยการสตรีมเพียง 1 ครั้ง มีอย่างอื่นในเลเยอร์ TCP ที่ป้องกันไม่ให้มีการใช้ความจุลิงก์แบบเต็มหรือไม่

จากประสบการณ์ของฉันถ้าคุณเห็นผลลัพธ์ที่แตกต่างกันอย่างมากระหว่าง 1 สตรีม TCP และสตรีม TCP หลาย ๆ ปัญหามักจะเกิดการสูญเสียต ดังนั้น "อย่างอื่น" ในเลเยอร์ TCP คือการส่งสัญญาณใหม่ (เนื่องจากการสูญเสียแพ็กเก็ตชั้นล่าง)

ตัวอย่างที่ฉันทำขึ้นมาเพื่อแสดงให้เห็นว่าการสูญเสียแพ็คเก็ตส่งผลต่อปริมาณการรับส่งข้อมูลเดียว ...

                   [Wifi||LAN-0.0%-Loss||LAN-2.0%-Loss]
+--------------+                                        +--------------+
|              |                                        |              |
| Thinkpad-T61 |----------------------------------------| Linux Server |
|              |                                        | Tsunami      |
+--------------+                                        +--------------+
iperf client             ------------------>            iperf server
                             Pushes data

นี่คือตารางที่สรุปผลการทดสอบของการiperfทดสอบ60 วินาทีระหว่างไคลเอนต์และเซิร์ฟเวอร์ ... คุณอาจเห็นการเปลี่ยนแปลงเล็กน้อยในผลลัพธ์ iperf จาก jitter RTT (เช่นค่าเบี่ยงเบนมาตรฐานสูงกว่า RTT); อย่างไรก็ตามความแตกต่างที่สำคัญที่สุดเกิดขึ้นเมื่อฉันจำลองการสูญเสีย 2% ออกจากไคลเอนต์แบบมีสาย NIC 172.16.1.56 และ 172.16.1.80 เป็นแล็ปท็อปเครื่องเดียวกัน (ใช้งาน Ubuntu) เซิร์ฟเวอร์คือ 172.16.1.5 ที่เรียกใช้ Debian ฉันใช้netemบนไคลเอนต์ wired NIC เพื่อจำลองการสูญเสียต ...

Client IP       Transport    Loss     avg RTT    RTT StdDev    TCP Streams   Tput
-----------     ----------   ----     -------    ----------    -----------   ----------
172.16.1.56     802.11g      0.0%      0.016s          42.0              1     19.5Mbps
172.16.1.56     802.11g      0.0%      0.016s          42.0              5     20.5Mbps
172.16.1.80     1000BaseT    0.0%     0.0002s           0.0              1    937  Mbps
172.16.1.80     1000BaseT    0.0%     0.0002s           0.0              5    937  Mbps
172.16.1.80     1000BaseT    2.0%     0.0002s           0.0              1    730  Mbps <---
172.16.1.80     1000BaseT    2.0%     0.0002s           0.0              5    937  Mbps

แก้ไขสำหรับการตอบความคิดเห็น :

คุณสามารถอธิบายสิ่งที่เกิดขึ้นในสถานการณ์สุดท้าย (1,000BaseT, 5 stream, 2.0% loss) ได้ไหม? แม้ว่าจะมีการสูญหายของแพ็คเก็ต แต่ปริมาณงานทั้งหมดยังคงอิ่มตัวที่ 937 Mbits / วินาที

การใช้ TCP ส่วนใหญ่จะลดหน้าต่างความแออัดของพวกเขาเมื่อตรวจพบการสูญหายของแพ็กเก็ต เนื่องจากเราใช้netemเพื่อบังคับให้แพ็กเก็ตสูญเสีย 2% จากลูกค้าไปยังเซิร์ฟเวอร์ข้อมูลของลูกค้าบางส่วนจึงลดลง ผลกระทบสุทธิของnetemในตัวอย่างนี้คืออัตราการส่งเฉลี่ยเดียวกระแส 730Mbps การเพิ่มสตรีมหลายรายการหมายความว่าสตรีม TCP แต่ละรายการสามารถทำงานร่วมกันเพื่อทำให้ลิงก์อิ่มตัว

เป้าหมายของฉันคือการบรรลุ TCP throughput สูงสุดที่เป็นไปได้ผ่าน WiFi ตามที่ฉันเข้าใจฉันควรเพิ่มจำนวนสตรีมเพื่อลดปริมาณงานที่เกิดจากการสูญหายของแพ็กเก็ต ถูกต้องหรือไม่

ใช่

นอกจากนี้ในกรณีใดลำธารจำนวนมากเกินไปจะเริ่มมีผลกระทบในทางลบต่อปริมาณงานหรือไม่ สิ่งนี้อาจเกิดจากหน่วยความจำที่ จำกัด และ / หรือกำลังการประมวลผลหรือไม่?

ฉันไม่สามารถตอบได้โดยไม่ต้องทดลองเพิ่มเติม แต่สำหรับลิงก์ 1GE ฉันไม่เคยมีปัญหาในการเชื่อมโยงกับสตรีมแบบขนาน 5 สตรีม เพื่อให้คุณเข้าใจว่า TCP สามารถปรับขนาดได้อย่างไรเซิร์ฟเวอร์ linux สามารถจัดการซ็อกเก็ต TCP พร้อมกันได้มากกว่า1,500 ซ็อกเก็ตภายใต้สถานการณ์ที่เหมาะสม นี่เป็นอีกการสนทนาที่เกี่ยวข้องกับการปรับขนาดซ็อกเก็ต TCP พร้อมกัน แต่ในความเห็นของฉันมีอะไรมากกว่า 20 ซ็อกเก็ตแบบขนานจะ overkill ถ้าคุณเพียงแค่พยายามที่จะทำให้อิ่มตัวลิงค์

ฉันต้องมีความเข้าใจผิดที่ iperf ใช้ขนาดหน้าต่าง -w เป็นค่าสูงสุดตามที่ดูเหมือนว่าคุณกำลังพูดว่ามันโตเกินกว่าค่าเริ่มต้น 21K

ฉันไม่ได้ใช้iperf -wดังนั้นฉันคิดว่ามีความเข้าใจผิด เนื่องจากคุณมีคำถามมากมายเกี่ยวกับเคส wifi ฉันจึงรวมกราฟแบบ wireshark ของ TCP throughput สำหรับ wifi TCP stream case

Wifi TCP สตรีมทรูพุตเดียว


ทดสอบข้อมูล

ฉันยังรวมถึงข้อมูลทดสอบดิบในกรณีที่คุณต้องการดูว่าฉันวัดสิ่งเหล่านี้อย่างไร ...

802.11g, 1 สตรีม TCP

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report \
  --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 0.0%    60    0.8  16.0   0.7 189.4  42.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9000 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9000 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9000
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.56 port 40376 connected with 172.16.1.5 port 9000
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.1 sec   139 MBytes  19.5 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

802.11g, 5 สตรีม TCP

[mpenning@tsunami]$ iperf -s -p 9001 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9001 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9001
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.56 port 37162 connected with 172.16.1.5 port 9001
[  5] local 172.16.1.56 port 37165 connected with 172.16.1.5 port 9001
[  7] local 172.16.1.56 port 37167 connected with 172.16.1.5 port 9001
[  4] local 172.16.1.56 port 37163 connected with 172.16.1.5 port 9001
[  6] local 172.16.1.56 port 37166 connected with 172.16.1.5 port 9001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  28.0 MBytes  3.91 Mbits/sec
[  5]  0.0-60.1 sec  28.8 MBytes  4.01 Mbits/sec
[  4]  0.0-60.3 sec  28.1 MBytes  3.91 Mbits/sec
[  6]  0.0-60.4 sec  34.0 MBytes  4.72 Mbits/sec
[  7]  0.0-61.0 sec  30.5 MBytes  4.20 Mbits/sec
[SUM]  0.0-61.0 sec   149 MBytes  20.5 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT, 1 Stream, การสูญเสีย 0.0%

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report \
>   --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 0.0%    60    0.2   0.2   0.2   0.2   0.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9002 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9002 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9002
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.80 port 49878 connected with 172.16.1.5 port 9002
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  6.54 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT, 5 Streams, 0.0% ขาดทุน

[mpenning@tsunami]$ iperf -s -p 9003 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9003 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9003
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  7] local 172.16.1.80 port 47047 connected with 172.16.1.5 port 9003
[  3] local 172.16.1.80 port 47043 connected with 172.16.1.5 port 9003
[  4] local 172.16.1.80 port 47044 connected with 172.16.1.5 port 9003
[  5] local 172.16.1.80 port 47045 connected with 172.16.1.5 port 9003
[  6] local 172.16.1.80 port 47046 connected with 172.16.1.5 port 9003
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-60.0 sec  1.28 GBytes   184 Mbits/sec
[  5]  0.0-60.0 sec  1.28 GBytes   184 Mbits/sec
[  3]  0.0-60.0 sec  1.28 GBytes   183 Mbits/sec
[  6]  0.0-60.0 sec  1.35 GBytes   193 Mbits/sec
[  7]  0.0-60.0 sec  1.35 GBytes   193 Mbits/sec
[SUM]  0.0-60.0 sec  6.55 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT, 1 Streams, 2.0% ขาดทุน

mpenning@mpenning-ThinkPad-T61:~$ sudo tc qdisc add dev eth0 root netem corrupt 2.0%

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report   --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 1.7%    60    0.2   0.2   0.2   0.2   0.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9004 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9004 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9004
TCP window size: 42.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.80 port 48910 connected with 172.16.1.5 port 9004
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-64.1 sec  5.45 GBytes   730 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT, 5 Streams, 2.0% สูญเสีย

[mpenning@tsunami]$ iperf -s -p 9005 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9005 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9005
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  7] local 172.16.1.80 port 50616 connected with 172.16.1.5 port 9005
[  3] local 172.16.1.80 port 50613 connected with 172.16.1.5 port 9005
[  5] local 172.16.1.80 port 50614 connected with 172.16.1.5 port 9005
[  4] local 172.16.1.80 port 50612 connected with 172.16.1.5 port 9005
[  6] local 172.16.1.80 port 50615 connected with 172.16.1.5 port 9005
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  1.74 GBytes   250 Mbits/sec
[  7]  0.0-60.0 sec   711 MBytes  99.3 Mbits/sec
[  4]  0.0-60.0 sec  1.28 GBytes   183 Mbits/sec
[  6]  0.0-60.0 sec  1.59 GBytes   228 Mbits/sec
[  5]  0.0-60.0 sec  1.24 GBytes   177 Mbits/sec
[SUM]  0.0-60.0 sec  6.55 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

ลบการจำลองการสูญหายของแพ็กเก็ต

mpenning@mpenning-ThinkPad-T61:~$ sudo tc qdisc del dev eth0 root

คุณสามารถอธิบายสิ่งที่เกิดขึ้นในสถานการณ์สุดท้าย (1,000BaseT, 5 stream, 2.0% loss) ได้ไหม? แม้ว่าจะมีการสูญหายของแพ็คเก็ต แต่ปริมาณงานทั้งหมดยังคงอิ่มตัวที่ 937 Mbits / วินาที เป้าหมายของฉันคือการบรรลุ TCP throughput สูงสุดที่เป็นไปได้ผ่าน WiFi ตามที่ฉันเข้าใจฉันควรเพิ่มจำนวนสตรีมเพื่อลดปริมาณงานที่เกิดจากการสูญหายของแพ็กเก็ต ถูกต้องหรือไม่ นอกจากนี้ในกรณีใดลำธารจำนวนมากเกินไปจะเริ่มมีผลกระทบในทางลบต่อปริมาณงานหรือไม่ สิ่งนี้อาจเกิดจากหน่วยความจำที่ จำกัด และ / หรือกำลังการประมวลผลหรือไม่?
elin05

@ elin05: การใช้หลายสตรีมกระจายการสูญเสียแพ็คเก็ตในหลายสตรีมดังนั้นเมื่อเกิดการสูญเสียแพ็คเก็ตเพียงสตรีมเดียวเท่านั้นที่จะลดขนาดของหน้าต่าง TCP ของมันทำให้สตรีมอื่นไม่ได้รับผลกระทบ
BatchyX

802.11g (54Mbps) โทร BDP สำหรับขนาดหน้าต่าง 54KB ด้วยความล่าช้า 8ms (16ms RTT / 2) เพื่อให้ท่อเต็มไปด้วยแพ็คเก็ตในเที่ยวบินหรือไม่? ขนาดหน้าต่างของฝั่งเซิร์ฟเวอร์เป็นเท่าไหร่
Generalnetworkerror

@generalnetworkerror หน้าต่าง TCP ไม่คงที่ ... พวกเขาเปลี่ยนไปตามความต้องการของ TCP ... ในระหว่างการดักจับนั้นขนาดหน้าต่างสูงสุดสึนามิที่โฆษณาคือ 1177600 ไบต์; หน้าต่างเฉลี่ยของสึนามิคือ 1045083 ไบต์และ RTT เฉลี่ยในการทดสอบ 60 วินาทีนั้น 32.2 มิลลิวินาที
Mike Pennington

@ MikePennington: ฉันต้องเข้าใจผิดว่า iperf ใช้ขนาดหน้าต่าง -w เป็นค่าสูงสุดตามที่ดูเหมือนว่าคุณกำลังบอกว่ามันโตเกินกว่าค่าเริ่มต้น 21K
generalnetworkerror

2

นี่คือการคำนวณสำหรับปริมาณงานสูงสุดของสตรีม tcp เดียว

(TCP Window [bytes]/RTT[seconds]) * 8 [bits/byte] = Max single tcp throughput in (bps)

ดังนั้นคุณมีปัญหาคอขวดและเวลาแฝงมีบทบาทใหญ่


0

อาจเป็นเพราะหลาย ๆ กระบวนการเทียบกับหนึ่งกระบวนการ ด้วย iperf 2.0.9 หนึ่งสามารถทดสอบนี้ผ่าน -P 2 บนไคลเอนต์ สิ่งนี้จะแยกสองเธรดแทนหนึ่งเธรด CPU ที่ทันสมัยส่วนใหญ่มีหลายคอร์ดังนั้นการใช้หลายเธรดจะสามารถใช้ประโยชน์ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.