Am 3 servere în funcție de rețea configurate după cum urmează
- A este un DELL R710 care rulează Linux 5.13.19-1-pve Proxmox VE 7.1 si are 4 NIC-uri au făcut echipă într-un
echilibru-rr
legătură de mod.
- B este un DELL R610 care rulează Linux 5.13.19-1-pve Proxmox VE 7.1 si are 4 NIC-uri au făcut echipă într-un
echilibru-rr
legătură de mod.
- C este un DELL R710 care rulează FreeBSD 12.2-RELEASE-p1 cu un decalaj peste 8 NIC-uri în
round-robin
(aceasta este o distribuție TrueNAS).
Toate NIC-urile sunt de 1 GBps.
Când alerg iperf3
între bladele Linux, am max la aproximativ 3 GBps, iar fereastra urcă la o medie de ~300 KiB. Cu toate acestea, între blade TrueNAS (FreeBSD) și blade Linux, fluxul TCP atinge maxim 1,20 Gbps și limitează fereastra la o medie de ~60 KiB. Dacă rulez fluxuri paralele (adică, iperf3...-P 8
) Pot satura legătura. Pe de altă parte, așa cum era de așteptat, numărul de retransmisii este destul de mare în ambele cazuri. Deci, întrebările mele sunt,
- De ce FreeBSD nu atinge același debit dacă se presupune că ambii abordează problema în același mod? (poate că acolo mă înșel).
- Există o opțiune de reglare sau o combinație de opțiuni pentru a face stiva TCP mai tolerantă la necomanda, fără a declanșa retransmiteri imediate? (Sunt vag familiarizat cu 3-ACK reTX, elementele de bază ale controlului congestiei TCP și așa mai departe).
Voi include aici câteva reglabile și opțiuni pe care le-am folosit în timpul testării mele.
- Toate iface-urile sunt setate să utilizeze cadre jumbo (MTU 9000).
- Cutiile Linux sunt reglate după cum urmează
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.ipv4.tcp_mem = 1638400 1638400 1638400
net.ipv4.tcp_rmem = 10240 87380 16777216
net.ipv4.tcp_rmem = 10240 87380 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_reordering = 127
net.ipv4.tcp_max_reordering = 1000
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = reno
- Caseta FreeBSD (TrueNAS Core ~= FreeNAS) este reglată după cum urmează
kern.ipc.maxsockbuf=614400000
kern.ipc.somaxconn=1024
net.route.netisr_maxqlen=8192
net.inet.ip.intr_queue_maxlen=8192
net.inet.tcp.mssdflt=8948
net.inet.tcp.reass.maxqueuelen=1000
net.inet.tcp.recvbuf_inc=65536
net.inet.tcp.sendbuf_inc=65536
net.inet.tcp.sendbuf_max=307200000
net.inet.tcp.recvbuf_max=307200000
net.inet.tcp.recvspace=65228
net.inet.tcp.sendspace=65228
net.inet.tcp.minmss=536
net.inet.tcp.abc_l_var=52
net.inet.tcp.initcwnd_segments=52 # începe rapid
net.inet.udp.recvspace=1048576
net.inet.udp.sendspace=1048576