Evimde kurulu bir gigabit ağı ve birkaç Ubuntu tabanlı kutu var. Tam bir meraktan iki kutu arasındaki hızı kontrol etmek istiyorum. Hız ya da herhangi bir şeyle ilgili herhangi bir sorun yaşamıyorum, bu gerçekten merak ediyorum sadece içimdeki inek. Artı, belki de sonuçlar iyileştirme için yer olup olmadığını veya yanlış yapılandırılmış bir şey olduğumu bana bildirir.
Peki Ubuntu kutuları arasındaki ağ hızını düzgün bir şekilde nasıl test ediyorsunuz?
iperf
kullanıyorum. Bir uçta sunucu modunda çalıştırmanız ve ağın diğer tarafındaki başka bir bilgisayardan bağlanmanız için bir istemci sunucu düzenlemesidir.
İki makineden biri çalışıyor:
Sudo apt-get install iperf
Makinelerden birinde iperf
sunucusunu başlatacağız:
iperf -s
Sonra diğer bilgisayarda, istemci olarak bağlanmasını iperf
:
iperf -c <address of other computer>
İstemci makinesinde şöyle bir şey görürsünüz:
[email protected]:~$ 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
Elbette, sunucu makinede bir güvenlik duvarı kullanıyorsanız, 5001 numaralı bağlantı noktasında bağlantılara izin vermeniz veya bağlantı noktasını -p
bayrağıyla değiştirmeniz gerekir.
Bu şekilde eğimli iseniz düz eski nc
(netcat) ile hemen hemen aynı şeyi yapabilirsiniz. Sunucu makinesinde:
nc -vvlnp 12345 >/dev/null
Ve müşteri dd
tüneli üzerinden nc
üzerinden bir gigabaytlık bir sıfır boru aktarabilir.
dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Demod olarak:
$ 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
Oradaki zamanlama dd
tarafından verilir, ancak yalnızca borunun alacağı kadar hızlı bir şekilde çıkabileceği kadar doğru olmalıdır. Bundan memnun değilseniz, her şeyi bir time
çağrısına sarabilirsiniz.
Unutmayın ki sonuç mega bytes bu yüzden mega almak için 8 ile çarpın bit - saniye başına hız. Yukarıdaki demo 944mbps'de çalışıyor.
Oli'nin iperf için önerdiği gibi. Sadece birkaç nokta eklemek istiyorum:
-t <seconds>
test uzunluğunu değiştirir. -P <n>
eşzamanlı bağlantı sayısını değiştirir. Örneğin, iperf -c [target IP] -P 10 -t 30
, 30 bağlantı için 10 bağlantıyı birlikte test eder ve 10 ayrı bağlantı hızı ile birlikte toplu sonuçlar verir.wget
ile indirin, chmod
ile çalıştırılabilir duruma getirin ve doğrudan ikili dosyayı çalıştırabilirsiniz. Mükemmel çalışıyor.Varsayılan ayarları kullanarak, tek bağlantı hızının biraz dalgalandığını öğrendim. Ancak, 3+ paralel bağlantıyla, sonuçlar gigabayt anahtarımda daha tutarlı. (sürekli olarak 910-920 Mbps'de)
bu betiği kullanarak makineniz ve uzaktaki bir ana bilgisayar arasındaki bağlantı hızını kolayca test edebilirsiniz. Kullanma örneği:
$ scp-speed-test.sh [email protected]_Host 80000
[email protected]_Host
, hedef Host cihazınızdır (bu Host cihazına ssh erişiminiz olmalıdır)80000
, uzak Ana Bilgisayar'a alınacak yaklaşık test dosyası boyutudur (kbs cinsinden). Zorunlu argüman değildir.Ethernet LAN'ınızı daha düşük bir seviyede test etmek istiyorsanız, ücretsiz bir Linux CLI Ethernet test aracı olan Etherate'i kullanabilirsiniz:
https://github.com/jwbensley/Etherate
Karışıma iPerf (çok iyi!) Gibi araçlar IP üzerinden ve TCP veya UDP üzerinden işler. Etherate, Ethernet/OSI katman 2 üzerinde doğrudan test eder.
Aşağıdaki komut ek paketler gerektirmez, SSH erişimi gerektirir:
ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress
Örnek çıktı:
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
Komut, uzak sunucudaki stdout'a sıfırlarla dolu bir 3GB (1000 ^ 3 baytlık) boş bir dosya yazdırır; bu, SSH aracılığıyla yerel sunucunun stdout'una basılır (aktarılır) ve yerel olarak /dev/null
(örneğin yok sayılır) ). Test sırasında testin ilerlemesini bile görebilirsiniz.
Kesinlikle diğer araçlar kadar kesin değil, ancak kullanım durumum, ağ hızının ek paketler yüklemeden sorun olup olmadığını test etmek istediğim bir yedekleme işleminde hata ayıklamaktı.
İki ana bilgisayar arasında bant genişliği kıyaslama yapmak için başka güzel komut satırı araçları da vardır:
server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address
server$ nepim
client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address
server$ goben
client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
en iyi cevabımdaki yorumumda belirttiğim gibi, bu çözüm yeterince iyi değil çünkü müşteri/sunucu --- optimize to ... squeeze Her hızda
çözümüm:
iki tarafa bir ramdisk yapın (bu nedenle, depolama hızıyla sınırlı değilsiniz ve onları tmpfs değil ramps ile yapmanızı öneririm, bu yüzden takas yapmayacaklar ... sadece en az 512M boş hafıza bırakmamaya dikkat edin sistem için giga ethernet'iniz varsa bu GEREKLİDİR, bu hızda bile SSD'ler işleri yavaşlatabilir) Apache'yi sunucuya kurun, sonra ramdisk için bir bağlantı oluşturun, ramdisk üzerinde birkaç büyük dosya oluşturun (100M-1G,/dev/random veya dd'den bazıları elinizde ise) daha sonra istemci tarafına gidin ve onları (o tarafın ramdiskinde) gelişmiş bir indirme programı ile indirin, kullandım lftp
peki, fark, iperf ve 9.5M/s netcat tarafından bildirilen 75 mbps'den büyüktü.
- 11.18M/s Çözümümle:
1591129421 bytes transferred in 136 seconds (11.18M/s)