Avem o conexiune de internet de 1 Gbps (sus/jos) la locul de muncă și am observat că performanța a fost groaznică atunci când comunicam cu serverele noastre din Cloud. Prin groaznic, vreau să spun, din cei 1000Mbps teoretici, primim 30Mbps. După lungi sesiuni de diagnosticare, ne-am dat seama că avem o problemă de performanță a rețelei atunci când primim date de la computerele noastre Windows Server. În mod ciudat, obținem viteze destul de decente atunci când serverul este un VM Linux (a trebuit să fac câteva ajustări pentru a permite o fereastră de congestie TCP mai mare – modificările exacte enumerate mai jos).
În timpul procesului de investigare am eliminat din ce în ce mai multe elemente pentru a reduce problema la forma sa cea mai simplă. Laptopul meu de testare este acum conectat direct la modem, fără niciun software care ar putea interfera cu performanța rețelei. Același lucru pentru VM-ul meu de testare în cloud (top 3 furnizor). Am folosit iperf pentru a evalua viteza de transfer. Din moment ce am eliminat firewall-ul din ecuație, rezultatul este foarte diferit și putem ajunge la sute de Mbps, dar încă nu pot înțelege următoarele:
VM Linux în cloud care trimite date la laptop: am obținut o medie de 640 Mbps din 60 de secunde ultima dată când am testat (cea mai mică secundă din acest test a fost de 530 Mbps)
Windows VM în cloud care trimite date către laptop: uneori începe la 400Mbps și poate ajunge chiar la 500Mbps pentru perioade scurte de timp, dar aproximativ 90% din timp începe la aproximativ 60Mbps în prima secundă, apoi scade la 30Mbps, apoi încet. urcă. Dacă las testul să meargă timp de 60 de secunde, va atinge viteze de aproximativ 400 Mbps după peste 20 de secunde, dar viteza de transfer este mult mai puțin stabilă decât Linux (de asemenea, pare să fie mai lent în general, dar este greu de evaluat acum. ).
Informatii suplimentare
- Laptop (clientul în transferul de date) este un PC Windows
- Când laptopul acționează ca server (încărcare), viteza este bună, indiferent de configurație (destinația poate fi Linux, Windows, firewall-ul de afaceri existent nu schimbă nimic)
- M-am jucat cu setările mașinii virtuale Windows (adaptor și TCP) în toate modurile imaginabile, fără niciun impact asupra problemei. Singurul câștig care conectează laptopul direct la modemul de la serviciu (aș trece apoi de la aproximativ 10Mbps la 30-400Mbps în funcție de tipul de test).
- Am folosit iperf3 pentru a face toate benchmark-urile (unele rezultate sunt afișate mai jos)
- Când am creat mașina virtuală Windows Server, am folosit sistemul de operare implicit oferit de furnizorul de cloud, așa că nu există nicio configurație exotică acolo.
- Ping-ul între biroul nostru și serverele noastre este de aproximativ 28 ms.
- În timp ce eram conectat la firewall, am făcut un test cu un coleg care are o conexiune de afaceri cu același furnizor de internet (aceeași viteză ca și noi la birou). Ping-ul de la laptopul meu la VM-ul Windows de la el a fost undeva între 2 și 3 ms. Debitul (VM-ul său acționând ca server) a fost de aproximativ 120 Mbps. Același test cu VM în cloud (28 ms ping) a fost de 10 Mbps.
- A trebuit să setez un parametru de fereastră mare când foloseam iperf din sistemul de operare Windows pentru a permite lățimea de bandă maximă (-w 5M), dar nu a fost necesar din Linux.
Impresia mea este că există o problemă cu scalarea ferestrelor de congestie Windows Server. Captura Wireshark arată o fereastră TCP mare nefolosită, dar nu știu cum să remediez problema sau să investighez în continuare în acest moment.
Am inclus câteva teste pe care le-am făcut mai jos, dar pot oferi mai multe dacă este necesar.
## IPERF (VM Linux în cloud care trimite date către laptopul de la birou)
superuser@testnr5linux:~$ iperf3 -c xx.xx.xx.xx -w 5M -t 60
Se conectează la gazda xx.xx.xx.xx, portul 5201
[ 5] portul local 10.4.0.4 47268 conectat la portul xx.xx.xx.xx 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0,00-1,00 sec 76,2 MBytes 640 Mbits/sec 343 2,54 MBytes
[ 5] 1,00-2,00 sec 80,0 MBytes 671 Mbits/sec 53 1,88 MBytes
[ 5] 2,00-3,00 sec 73,8 MBytes 619 Mbits/sec 0 1,98 MBytes
[ 5] 3,00-4,00 sec 77,5 MBytes 650 Mbits/sec 0 2,06 MBytes
[ 5] 4.00-5.00 sec 80.0 MBytes 671 Mbits/sec 0 2.11 MBytes
(încă 55 de secunde în medie 640 Mbps)
## Exemplu de viteză bună de la VM cloud (Windows) urmată de pornire lungă și lentă
C:\Utilizatori\superutilizator>iperf3.exe -c xx.xx.xx.xx -w 5M
Se conectează la gazda xx.xx.xx.xx, portul 5201
[ 4] portul local 10.3.0.4 51988 conectat la portul xx.xx.xx.xx 5201
[ ID] Lățimea de bandă de transfer pe interval
[ 4] 0,00-1,00 sec 17,4 MBytes 145 Mbits/sec
[ 4] 1,00-2,00 sec 28,9 MBytes 243 Mbits/sec
[ 4] 2,00-3,00 sec 53,1 MBytes 446 Mbits/sec
[ 4] 3,00-4,00 sec 54,0 MBytes 453 Mbits/sec
[ 4] 4,00-5,00 sec 54,0 MBytes 452 Mbits/sec
[ 4] 5,00-6,00 sec 54,9 MBytes 461 Mbits/sec
[ 4] 6,00-7,00 sec 55,5 MBytes 465 Mbits/sec
[ 4] 7.00-8.00 sec 56.2 MBytes 471 Mbits/sec
[ 4] 8.00-9.00 sec 58.2 MBytes 490 Mbits/sec
[ 4] 9.00-10.00 sec 60,5 MBytes 508 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Lățimea de bandă de transfer pe interval
[ 4] 0,00-10,00 sec 493 MBytes 413 Mbits/sec expeditor
[ 4] 0,00-10,00 sec 490 MBytes 411 Mbits/sec receptor
iperf Gata.
C:\Utilizatori\superutilizator>iperf3.exe -c xx.xx.xx.xx -w 5M
Se conectează la gazda xx.xx.xx.xx, portul 5201
[ 4] portul local 10.3.0.4 51996 conectat la portul xx.xx.xx.xx 5201
[ ID] Lățimea de bandă de transfer pe interval
[ 4] 0,00-1,01 sec 7,12 MBytes 59,0 Mbits/sec
[ 4] 1,01-2,01 sec 3,25 MBytes 27,4 Mbits/sec
[ 4] 2,01-3,00 sec 4,00 MBytes 33,8 Mbits/sec
[ 4] 3.00-4.00 sec 5.00 MBytes 41.9 Mbits/sec
[ 4] 4,00-5,01 sec 5,88 MBytes 49,0 Mbits/sec
[ 4] 5,01-6,00 sec 6,62 MBytes 56,0 Mbits/sec
[ 4] 6.00-7.00 sec 7.50 MBytes 62.9 Mbits/sec
[ 4] 7.00-8.01 sec 8.62 MBytes 71.8 Mbits/sec
[ 4] 8,01-9,00 sec 9,38 MBytes 79,5 Mbits/sec
[ 4] 9.00-10.01 sec 10.4 MBytes 86.3 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Lățimea de bandă de transfer pe interval
[ 4] 0,00-10,01 sec 67,8 MBytes 56,8 Mbits/sec expeditor
[ 4] 0,00-10,01 sec 63,1 MBytes 52,9 Mbits/sec receptor
## Modificări pe care a trebuit să le fac în /etc/sysctl.conf pentru a crește CWND.
# permite testarea cu buffere de până la 64 MB
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# crește limita de memorie tampon TCP de reglare automată Linux la 32 MB
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
Notă - Se pare că am nevoie de cel puțin 10 reputații pentru a posta imagini, dar aici sunt link-urile.. https://i.stack.imgur.com/IXhnS.png
https://i.stack.imgur.com/UyPYL.png