คุณจะทดสอบความเร็วเครือข่ายระหว่างสองกล่องได้อย่างไร


168

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

ดังนั้นคุณจะทดสอบความเร็วเครือข่ายระหว่างกล่อง Ubuntu ได้อย่างไร

คำตอบ:


272

iperfผมใช้ มันเป็นการจัดการเซิร์ฟเวอร์ของลูกค้าโดยที่คุณเรียกใช้ในโหมดเซิร์ฟเวอร์ที่ปลายด้านหนึ่งและเชื่อมต่อกับคอมพิวเตอร์เครื่องอื่นที่อยู่อีกด้านหนึ่งของเครือข่าย

หนึ่งทั้งสองเครื่องทำงาน:

sudo apt-get install iperf

เราจะเริ่มiperfเซิร์ฟเวอร์กับหนึ่งในเครื่อง:

iperf -s

จากนั้นบนคอมพิวเตอร์เครื่องอื่นบอกiperfให้เชื่อมต่อเป็นไคลเอนต์:

iperf -c <address of other computer>

บนเครื่องไคลเอนต์คุณจะเห็นสิ่งนี้:

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

แน่นอนถ้าคุณใช้ไฟร์วอลล์บนเครื่องเซิร์ฟเวอร์คุณจะต้องอนุญาตการเชื่อมต่อที่พอร์ต 5001 หรือเปลี่ยนพอร์ตด้วยการ-pตั้งค่าสถานะ


คุณสามารถทำสิ่งเดียวกันกับ old old ธรรมดาnc(netcat) ได้ถ้าคุณทำแบบนั้น บนเครื่องเซิร์ฟเวอร์:

nc -vvlnp 12345 >/dev/null

และท่อลูกค้าสามารถกิกะไบต์ของศูนย์ผ่านddเหนือncอุโมงค์

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

ในฐานะ demod:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

กำหนดเวลาที่กำหนดไว้ddแต่ควรมีความแม่นยำเพียงพอเนื่องจากสามารถส่งออกได้อย่างรวดเร็วเท่านั้นที่ท่อจะรับ หากคุณไม่มีความสุขกับสิ่งที่คุณสามารถทำได้ทั้งหมดในการtimeโทร

โปรดจำไว้ว่าผลลัพธ์นั้นมีหน่วยเป็นเมกะไบต์ดังนั้นคูณด้วย 8 เพื่อให้ได้เมกะบิต - ความเร็วต่อวินาที ตัวอย่างด้านบนใช้งานได้ที่ 944mbps


คนที่คุณมีคำตอบสำหรับคำถามของฉัน! เห็นได้ชัดว่าเครือข่ายของฉันไม่ได้ตั้งค่าเช่นเดียวกับการถ่ายโอนของคุณเท่านั้นที่ 714 MBytes และแบนด์วิดธ์ของ 598 Mbits / วินาที Dunno อาจมองว่าในอนาคต ขอบคุณ
Jacob Schoen

ในความเป็นธรรมกล่องอื่น ๆ อยู่ห่างออกไปเพียงสวิตช์เดียว (และห่างจาก cat5e 20 เมตร) และไม่มีความแออัด 600mbps ยังค่อนข้างเร็ว
Oli

นี่ยอดเยี่ยม แต่ฉันไม่มีสิทธิ์เข้าถึงรูทไปยังเซิร์ฟเวอร์
Geoff

ลอง -P 10. ผลลัพธ์ของฉันเมื่อใช้การเชื่อมต่อแบบเดียวจะคล้ายกับ jschoens แต่เมื่อใช้การเชื่อมต่อแบบขนาน 3+ การเชื่อมต่อแบบขนานจะผลักดัน 920Mbps อย่างต่อเนื่อง
wujj123456

1
@CMCDragonkai คุณอาจไม่ควรทดสอบแหล่งข้อมูลที่ไม่ใช่ของคุณ การทดสอบแบนด์วิดธ์หนักอาจส่งผลกระทบต่อเสถียรภาพระยะสั้น
Oli

22

เหมือนกับคำแนะนำของ Oli สำหรับ iperf แค่ต้องการเพิ่มหลายจุด:

  1. นอกจากนี้ยังมีไคลเอนต์ windows ที่เปิดใช้การทดสอบข้ามแพลตฟอร์ม
  2. -t <seconds>เปลี่ยนความยาวของการทดสอบ เปลี่ยนจำนวนการเชื่อมต่อพร้อมกัน ตัวอย่างเช่น ทดสอบ 10 การเชื่อมต่อเข้าด้วยกันเป็นเวลา 30 วินาทีและให้ผลลัพธ์รวมกับความเร็วในการเชื่อมต่อที่แยกต่างหาก 10-P <n>iperf -c [target IP] -P 10 -t 30
  3. คุณไม่ต้องการ sudo คุณก็สามารถดาวน์โหลดไบนารีที่http://iperf.fr/ มันควรจะทำงาน ดาวน์โหลดด้วยwgetทำให้ใช้chmodงานได้และคุณสามารถรันไบนารีได้โดยตรง มันทำงานได้อย่างสมบูรณ์

ฉันพบว่าการใช้การตั้งค่าเริ่มต้นความเร็วการเชื่อมต่อเดียวค่อนข้างผันผวนเล็กน้อย อย่างไรก็ตามด้วยการเชื่อมต่อแบบขนาน 3+ ผลลัพธ์จะมีความสอดคล้องกับสวิตช์กิกะไบต์ของฉันมากขึ้น (สม่ำเสมอที่ @ 910-920Mbps)


8

การใช้สคริปต์นี้คุณสามารถทดสอบความเร็วการเชื่อมต่อระหว่างเครื่องของคุณกับโฮสต์ระยะไกลบางตัวได้อย่างง่ายดาย ตัวอย่างการใช้งาน:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host คือโฮสต์ปลายทางของคุณ (คุณต้องมีการเข้าถึง ssh กับโฮสต์นี้)
  • 80000เป็นขนาดโดยประมาณของไฟล์ทดสอบ (เป็น kbs) ซึ่งจะได้รับไปยังรีโมตโฮสต์ มันไม่ได้เป็นข้อโต้แย้งที่บังคับ

4
ดูเหมือนว่าจะทดสอบความเร็วของการใช้งาน SCP ซึ่งจะต่ำกว่าการทดสอบที่ชั้นล่าง ตัวอย่างเช่น nc ใช้ L4 แน่นอนว่าเป็นสิ่งที่ดีถ้าคุณสนใจความเร็วของ SCP มากขึ้น
sudo

1
มีปัญหา: สคริปต์นี้เขียนและอ่านไฟล์ไปยังดิสก์ - ซึ่งช้ากว่าหน่วยความจำดังนั้นจึงอาจเป็นการชะลอตัวแบบประดิษฐ์ นอกจากนี้ยังส่งค่าศูนย์ในกรณีที่มีการบีบอัดซึ่งเป็นการเร่งความเร็วขนาดใหญ่ หากคุณต้องการข้อมูล pseudorandom อย่าใช้/dev/random(มันสามารถบล็อก) หรือurandom (ลิงก์ความคิดเห็นบอกว่า) พวกเขาอาจช้ามากเช่นกันแทนที่จะใช้ dm-crypt (ดูคำถามที่พบบ่อยของ cryptsetup 2.19 ฉันจะล้างอุปกรณ์ด้วย crypto- ได้อย่างไร ชั้นประถมศึกษาปี randomness? ) อาจมีไฟล์ใน ram
Xen2050

4

หากคุณต้องการทดสอบ Ethernet LAN ของคุณในระดับต่ำกว่าคุณสามารถใช้ Etherate ซึ่งเป็นเครื่องมือทดสอบ Linux CLI Ethernet ฟรี:

https://github.com/jwbensley/Etherate

การขว้างมันเป็นเครื่องมือเช่น iPerf (ซึ่งดีมาก!) ทำงานผ่าน IP และ TCP หรือ UDP Etherate ทำการทดสอบโดยตรงผ่าน Ethernet / OSI layer 2


2

คำสั่งด้านล่างไม่ต้องการแพคเกจเพิ่มเติม แต่การเข้าถึง SSH:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

ตัวอย่างผลลัพธ์:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

คำสั่งพิมพ์ไฟล์ดัมมีขนาด 3GB (1000 ^ 3 bytes) เต็มไปด้วยศูนย์ถึง stdout บนเซิร์ฟเวอร์ระยะไกลซึ่งถูกพิมพ์ (ถ่ายโอน) ผ่าน SSH ไปยัง stdout ของเซิร์ฟเวอร์ภายในจากนั้น piped ภายในเครื่อง/dev/null(เช่นถูกเพิกเฉย) คุณสามารถเห็นความคืบหน้าของการทดสอบขณะดำเนินการ

แน่นอนไม่แม่นยำเหมือนเครื่องมืออื่น ๆ แต่กรณีการใช้งานของฉันคือการดีบักกระบวนการสำรองข้อมูลที่ฉันต้องการทดสอบว่าความเร็วของเครือข่ายเป็นปัญหาโดยไม่ต้องติดตั้งแพ็กเกจเพิ่มเติมหรือไม่


1

นอกจากนี้ยังมีเครื่องมือบรรทัดคำสั่งอื่นที่ดีสำหรับการเปรียบเทียบแบนด์วิดท์ระหว่างโฮสต์สองเครื่อง:

nuttcp

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

nepim

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address

2
สิ่งเหล่านี้แตกต่างจากกันและจาก iperf อย่างไร พวกเขาทำงานเหมือนกันพวกเขาทำอะไร nuttcp อยู่ใน Debian & apparently "nuttcp ใช้ nttcp ซึ่งเป็นการปรับปรุงโดยคนที่ Silicon Graphics (SGI) บน ttcp ดั้งเดิมซึ่งเขียนโดย Mike Muuss ที่ BRL ก่อนธันวาคม 2527 เพื่อเปรียบเทียบประสิทธิภาพของ TCP stack โดย UC Berkeley และ BBN เพื่อช่วย DARPA ตัดสินใจว่าจะวางเวอร์ชันใดใน BSD Unix รุ่นแรก "
Xen2050

0

ในขณะที่ฉันชี้ให้เห็นในความคิดเห็นของฉันที่คำตอบที่ดีที่สุดทางออกที่ไม่ดีพอที่จะทำให้ลูกค้า / เซิร์ฟเวอร์ไม่ได้รับการปรับให้ ... บีบความเร็วทุกบิต

ทางออกของฉัน:

ทำ ramdisk ทั้งสองด้าน (ดังนั้นคุณไม่ จำกัด ด้วยความเร็วในการจัดเก็บและฉันขอแนะนำให้คุณสร้าง ramfs ไม่ใช่ tmpfs ดังนั้นพวกเขาจะไม่ไปแลกเปลี่ยน ... เพียงระวังอย่าปล่อยหน่วยความจำว่างอย่างน้อย 512M สำหรับระบบนี่เป็นสิ่งจำเป็นถ้าคุณมี giga ethernet ที่ความเร็วนั้นแม้ SSD อาจช้าลง) ติดตั้ง apache บนเซิร์ฟเวอร์จากนั้นสร้างลิงค์ไปยัง ramdisk สร้างไฟล์ขนาดใหญ่บน ramdisk (100M-1G) คุณสามารถสร้างมันขึ้นมาด้วย วันที่จาก / dev / สุ่มหรือคัดลอกถ้าคุณมีบางอย่างในมือ) จากนั้นไปที่ฝั่งไคลเอ็นต์และดาวน์โหลดพวกเขา (ยังบน ramdisk ของด้านนั้น) ด้วยโปรแกรมดาวน์โหลดขั้นสูงฉันใช้ lftp

โอ้ดีความแตกต่างสำคัญจาก 75mbps ที่รายงานโดย iperf และ 9.5M / s netcat

ถึง11.18M / sด้วยโซลูชันของฉัน:

1591129421 bytes transferred in 136 seconds (11.18M/s)

9.5M * 8 = 76 mbps มันค่อนข้างใกล้ถึง 75 mbps
ซอฟต์แวร์ Fusca

-4

มันง่ายต่อการเสียบคอมพิวเตอร์ของคุณลงในกล่องแรกเสียบกล่องอื่นเข้ากับกล่องแรก จากนั้นคอมพิวเตอร์ของคุณ ping กล่องแรกบันทึกผลลัพธ์, ping กล่องอื่นแล้วทำ substraction


10
นั่นแสดงเวลาแฝงของเครือข่ายซึ่งเป็นเพียงส่วนหนึ่งของความเร็ว ตัวอย่างเช่นการเชื่อมต่อ 3G ในโทรศัพท์ของฉันมีความหน่วงแฝง (100-300ms) แต่ก็ยังสามารถจัดการปริมาณงานได้ 5mbps
Oli

ไม่ใช่ความผิดของฉันถ้าเขาถามความเร็ว แต่ต้องการปริมาณงาน
Nyamiou The Galeanthrope

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