Puncte:2

Ajustarea routerului și serverului Linux pentru o performanță mai bună / rezolvarea unei conexiuni TCP unice cu viteză mică

drapel au

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.

introduceți descrierea imaginii aici

Intrebarile mele

  1. 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

  2. Parametrii kernelului arată bine pe Server 1?

  3. 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)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.