Am o arhitectură de rețea cea mai simplă/comună.
Serverul web se află în spatele routerului în rețeaua locală. Acest router face iptables DNAT, astfel încât redirecționarea portului este realizată către serverul web.
Prin urmare, pot descărca fișierul de pe serverul 1 pe computerul meu pe internet.
Intrebarile mele
Care este reglarea adecvată a nucleului pentru a se asigura că routerul își folosește cel mai mult potențialul (pentru aproximativ 2000 de conexiuni și cel mai mare debit)? Am o problemă cu ORANGE
Parametrii kernelului arată bine pe Server 1?
Puteți explica de ce am doar 3 Mbps de la Server 1 în timp ce CPU și RAM nu sunt supraîncărcate? Deci, puteți vedea alte probleme în afară de nucleul Linux, CPU și RAM? Ați putea enumera aceste posibile probleme de explorat? interfețe de rețea de 1 gbps, porturi etc? 2x1.5ghz ARM este lent pentru rutare? versiunea iptables?
OS și resurse
Computer - nuclee CPU Mac OS 8 x86, 16G/32G RAM liberă
Router - Linux DD-WRT 2 nuclee CPU ARM, 270M/512M de RAM liberă
Server 1 - Linux Ubuntu 18.04 4 nuclee CPU x86, 240M/32G de RAM liberă (500M schimbat pe SSD)
Server 2 - nucleu CPU Linux Raspbian 1 ARM, 95M/512M de RAM liberă
MTU
Peste tot 1500
TXQUEUELEN
Peste tot 1000
Protocoale
Vitezele UDP sunt bune
Viteza TCP este afectată, orice port
Versiunea Iptables
Router - 1.3.7
Server 1 - 1.8.4
Server 2 - 1.6.0
versiuni Linux
Router - 4.9.207
Server 1 - 5.4.0-67-generic
Server 2 - 4.14.79+
Viteze de legătură teoretice
De la computerul meu la router - 30mbps / 3,75 MB/s
De la router la server web 1 - 1 gbps
De la router la server web 2 - 1 gbps
Viteze de descărcare de pe serverul web (fișierul este găzduit în RAM)
TEST 1: Server 2 -> Router = 800mbps
TEST 2: Server 2 -> Computer = 30mbps
TEST 3: Server 1 -> Router = 800mbps
TEST 4: Server 1 -> Computer folosind 15 conexiuni = 15mbps
TEST 5: Server 1 -> Computer = 3mbps (problema!)
Utilizarea procesorului este de aproximativ câteva procente pe orice dispozitiv. Media de încărcare a procesorului este de 0,0x pe toate dispozitivele, dar Server 1 - are o medie de încărcare de 4,6. Serverul 1 gestionează, de asemenea, aproximativ 500-1000 de conexiuni pentru alte lucruri în afara testelor, dar la aproximativ 1 Mbps, așa că nu ar trebui să afecteze în mod dramatic debitul de testare (cu excepția cazului în care aceste conexiuni înrăutăți cumva lucrurile indirect).
Indiferent că sarcina este mai mare, TEST 3 a funcționat foarte bine. Deci este încă greu să dai vina pe Server 1.
Nu există probleme în dmesg
pe orice dispozitiv.
Gandurile mele
Problema apare numai atunci când DNAT este pe router și numai cu Server 1, care are o cantitate mare de alte conexiuni (dar aceste conexiuni sunt aproape inactiv, așa că nu ar trebui să afecteze totul rău?).
Cel mai interesant test de descris în gândurile finale
Când fac descărcare web multi-thread (TEST 4) Server 1 funcționează mult mai bine.
Deci, este capabil să atingă viteze mai mari de descărcare. Dar de ce o singură conexiune nu poate atinge aceeași viteză cu cele mai multe?
Parametrii pe care i-am explorat
Puteți vedea ceva care nu este bine optimizat pentru routerul Linux?
net.core.wmem_max
- dimensiunea maximă a memoriei tampon de trimitere a soclului tcp (în octeți). Măriți memoria tampon de citire/scriere TCP pentru a permite scalarea la o dimensiune mai mare a ferestrei. Ferestrele mai mari cresc cantitatea de date care trebuie transferată înainte de a fi necesară o confirmare (ACK). Acest lucru reduce latența generală și are ca rezultat creșterea debitului.
Această setare este de obicei setată la o valoare foarte conservatoare de 262.144 de octeți. Se recomandă ca această valoare să fie setată la fel de mare pe cât permite nucleul. Valoarea folosită aici a fost de 4.136.960 de octeți. Cu toate acestea, nucleele 4.x acceptă valori de peste 16 MB.
Router - 180224
Server 1 - 212992
Server 2 - 163840
Folosit altundeva - 83886080
net.core.wmem_default
Router - 180224
Server 1 - 212992
Server 2 - 163840
Folosit altundeva - 83886080
net.ipv4.rmem_max
- dimensiunea maximă a memoriei tampon de primire a soclului tcp (în octeți)
Router - 180224
Server 1 - 212992
Server 2 - 163840
Folosit altundeva - 335544320
net.core.rmem_default
Router - 180224
Server 1 - 212992
Server 2 - 163840
Folosit altundeva - 335544320
net.ipv4.tcp_rmem
- Conține trei valori care reprezintă dimensiunea minimă, implicită și maximă a tamponului de primire a socketului TCP. Recomandarea este să utilizați valoarea maximă de 16M de octeți sau mai mare (în funcție de nivelul kernelului), în special pentru adaptoarele de 10 Gigabit.
Router - 4096 87380 3776288
Server 1 - 4096 131072 6291456
Server 2 - 4096 87380 3515840
Folosit în altă parte - 4096 87380 4136960 (IBM)
net.ipv4.tcp_wmem
- Similar cu net.ipv4.tcp_rmem, acest parametru este format din 3 valori, un minim, implicit și maxim. Recomandarea este să utilizați valoarea maximă de 16M de octeți sau mai mare (în funcție de nivelul kernelului), în special pentru adaptoarele de 10 Gigabit.
Router - 4096 16384 3776288
Server 1 - 4096 16384 4194304
Server 2 - 4096 16384 3515840
Folosit în altă parte - 4096 87380 4136960 (IBM)
net.ipv4.tcp_tw_reuse
- În mediile cu trafic intens, prizele sunt create și distruse la rate foarte mari. Acest parametru, atunci când este setat, permite utilizarea prizelor care nu mai sunt necesare și pe cale de a fi distruse pentru conexiuni noi. Când este activat, acest parametru poate ocoli supraîncărcarea de alocare și inițializare asociată în mod normal cu crearea socket-ului, economisind ciclurile CPU, încărcarea sistemului și timpul.
Valoarea implicită este 0 (dezactivat). Valoarea recomandată este 1 (pornit).
Router - 0
Server 1 - 2
Server 2 - 0
Folosit altundeva - 1
net.ipv4.tcp_tw_reuse
Router - 0
Server 1 - 2
Server 2 - 0
Folosit altundeva - 1
net.ipv4.tcp_max_tw_buckets
- Specifică numărul maxim de prize în starea âtime-waitâ permise să existe în orice moment. Dacă valoarea maximă este depășită, prizele aflate în starea „timp de așteptare” sunt imediat distruse și este afișat un avertisment. Această setare există pentru a contracara anumite tipuri de atacuri de tip Denial of Service. Trebuie avut grijă înainte de a scădea această valoare. Când este schimbată, valoarea sa ar trebui să crească, mai ales când a fost adăugată mai multă memorie la sistem sau când cerințele rețelei sunt mari și mediul este mai puțin expus la amenințări externe.
Router - 2048
Server 1 - 131072
Server 2 - 2048
Folosit în altă parte - 65536, 262144 (IBM), 45000 (IBM)
net.ipv4.tcp_tw_reuse
Router - 0
Server 1 - 2
Server 2 - 0
Folosit altundeva - 1
net.ipv4.tcp_fin_timeout
Router - 60
Server 1 - 60
Server 2 - 60
Folosit altundeva - 15
net.ipv4.tcp_max_syn_backlog
Router - 128
Server 1 - 2048
Server 2 - 128
Folosit în altă parte - 65536
net.ipv4.ip_local_port_range
- gama de porturi utilizate pentru conexiunile TCP de ieșire (utilă pentru a o schimba dacă aveți o mulțime de conexiuni de ieșire de la gazdă)
Router - 32768 60999
Server 1 - 32768 60999
Server 2 - 32768 60999
Folosit în altă parte - 1024 65535
net.core.netdev_max_backlog
- numărul de sloturi din bufferul de inel al receptorului pentru pachetele care sosesc (kernel-ul pune pachetele în această coadă dacă CPU nu este disponibil pentru a le procesa, de exemplu prin aplicație)
Router - 120
Server 1 - 1000
Server 2 - 1000
Folosit în altă parte - 100000, 1000 (IBM), 25000 (IBM)
net.ipv4.neigh.default.gc_thresh1
Router - 1
Server 1 - 128
Server 2 - 128
Folosit în altă parte - 128
net.ipv4.neigh.default.gc_thresh2
Router - 512
Server 1 - 512
Server 2 - 512
Folosit în altă parte - 512
net.ipv4.neigh.default.gc_thresh3
Router - 1024
Server 1 - 1024
Server 2 - 1024
Folosit în altă parte - 1024
net.ipv4.neigh.default.gc_thresh3
Router - 1024
Server 1 - 1024
Server 2 - 1024
Folosit în altă parte - 1024
net.core.somaxconn
- dimensiunea maximă a cozii de ascultare pentru socket-uri (setare utilă și adesea trecută cu vederea pentru echilibrarea încărcăturii, serverele web și serverele de aplicații (cum ar fi unicorn, php-fpm). Dacă toate procesele/thread-urile de server sunt ocupate, atunci conexiunile client de intrare sunt puse în âbacklogâ așteaptă să fie servit). Întârzierea totală face ca conexiunile client să fie imediat respinse, provocând eroare client.
Router - 128
Server 1 - 4096
Server 2 - 128
net.ipv4.tcp_mem
- Praguri de utilizare a memoriei tampon TCP pentru autotuning, în paginile de memorie (1 pagină = 4kb)
Router - 5529 7375 11058
Server 1 - 381144 508193 762288
Server 2 - 5148 6866 10296
net.nf_conntrack_max
- numărul maxim de conexiuni
Router - 32768
Server 1 - 262144
Server 2 - fără informații
net.netfilter.nf_conntrack_max
- numărul maxim de conexiuni? Dacă acesta este parametrul corect, atunci 1560 nu este suficient
Router - 1560
Server 1 - 262144
Server 2 - fără informații
/proc/sys/net/ipv4/tcp_congestion_control
- Congestia rețelei în rețelele de date [...] este calitatea redusă a serviciului care apare atunci când un nod de rețea transportă mai multe date decât poate gestiona. Efectele tipice includ întârzierea în coadă, pierderea pachetelor sau blocarea noilor conexiuni. Rețelele folosesc tehnici de control al congestiei și de evitare a congestionării pentru a încerca să evite colapsul congestiei.1
Router - westwood
Server 1 - cubic
Server 2 - cubic
net.ipv4.tcp_syn_retries
- Specifică de câte ori se încearcă retransmiterea pachetului SYN inițial pentru o încercare activă de conexiune TCP. Setarea curentă este 20, ceea ce înseamnă că există 20 de încercări de retransmisie înainte de expirarea conexiunii. Acest lucru poate dura câteva minute, în funcție de durata încercării de retransmisie.
Router - 6
Server 1 - 6
Server 2 - 6
net.ipv4.tcp_low_latency
- Valoarea implicită este 0 (dezactivat). Pentru sarcini de lucru sau medii în care latența este o prioritate mai mare, valoarea recomandată este 1 (activată).
Router - 0
Server 1 - 0
Server 2 - 0
net.ipv4.tcp_limit_output_bytes
- Folosind acest parametru, TCP controlează limitele de cozi mici pe socket TCP. TCP tinde să crească datele în timpul zborului până când sunt primite notificări de pierdere. Cu anumite aspecte ale reglajului automat al trimiterii TCP, cantități mari de date pot fi puse în coadă la dispozitivul de pe computerul local, ceea ce poate afecta negativ latența pentru alte fluxuri.tcp_limit_output_bytes limitează numărul de octeți de pe un dispozitiv pentru a reduce efectele de latență cauzate de o dimensiune mai mare a cozii.
Router - 262144
Server 1 - 1048576
Server 2 - 262144
Folosit în altă parte - 262.144 (IBM), 131.072 (IBM)