Problem s overruns/rx_fifo_errors
Dalibor Toman
dtoman na fortech.cz
Čtvrtek Březen 16 10:47:28 CET 2017
DD,
resim takovy divny problem s narustajicim poctem poztracenych
prijimanych packetu na nekterych sitovkach. Mozna uz nekdo neco
podobneho resil a poradi.
- mam nekolik routeru (vsechno bezi na Scientific Linuxu 6.x), ktere
mezi paternim spojem a nejakou siti za routerem prehazuji packety,
delaji nejaky filtering pomoci iptables a shapuji pomoci htb.
- vetsina routeru ma e1000e driver a na nich problem nepozoruji.
- problem se zrejme vyskytuje jen na routerech s igb driverem. Pozoruju
ho ve vetsim meritku na 2 routerech, oba maji toky 1gbps+ (cca
100000pkts) jsou osazeny sitovkami s lepsim chipsetem, ktery rozdeluje
packety do front per cpu jadro, irq mam rozhazene po jadrech. Jeden
router pouziva chipset Intel i210 (on board sitovky), druhy Intel 82576
(externi 2 portove sitovky), na obou routerech jsou vytvorene 2
bondovane interfacy, vzdy ze 2 sitovek. Jednotlive sitovky v bondech
prenaseji cca stejne mnozstvi packetu
- projevuje se to narazovym zvysovanim counteru 'overruns' ve vypisu
'ifconfig ethx'. Cislo sedi s obsahem 'rx_fifo_errors' z 'ethtool -S
ethx' a 'rx_fifo_errors' zase sedi jako soucet jednotlivych
'rx_queue_Y_drops'. Narazove znamena, ze se delsi dobu (klidne dny)
nedeje nic a pak behem jedne vteriny se ztrati (resp zapocita) par set
az par desitek tisic packetu najednou.
- mam k dispozici grafy nekterych souvisejicich veci (rx packety,
rx_fifo_errors, cpu zatez, /proc/net/softnet_stat) odecitane kazdou
sekundu. Z nich je zatim videt, jen ze rx_fifo_counter najednou poskoci
a nic dalsiho podezreleho se nedeje. Zadny zvyseny tok packetu (nejaky
silny burst, DDOS) , pretizene CPU,..
Informace, ktere jsem k problemu sehnal rikaji, ze by melo dochazet k
zaplneni kruhoveho bufferu pro packety, kam sitovka DMAckem uklada
packety. Na zaklade toho jsem zkousel
- zvetsit ring buffer na sitovkach. Z defaultnich 256 packetu na 4096
pro RX. Problem pretrvava dokonce se zda, ze od te doby se narazove
ztraci vetsi mnozstvi packetu
- zvetsil jsem 'net.core.netdev_budget' aby SoftIRQ handler mol
vyzvednout vice packetu najednou ale nepomohlo. Poodle grafu navic
malokdy nastane situace, ze by SoftIRQ obsluha musela ukoncit praci
drive nez vyprazdni RX frontu a zatim to nikdy nenastalo v case, kdy se
ztrati packety
- cekal jsem, ze kdyz se ucpe fronta, bude se sitovka/driver snazit
signalizovat pomoci flow control switchi, ze ma zpomalit. Graf poctu
prijatych rxPause ramcu ze switche ale ukazuje, ze nic nechodi a i
'ethtool -S ethx | egrep flow' ukazuje nuly. Pravda je, ze si nejsem
jisty jak poznat na linuxu, ze sitovka opravdu pouziva flowcontrol
(switch tvrdi, ze je povoleno ale mam nastaveno natvrdo ON). Switche
zachazi s flowcontrol spravne (zvysuje prislusne citace atd) - overeny
na jinych portech s jinymi pripojenymi zarizenimi
- problem nastava v libovolnou denni dobu, nezda se, ze by byl zavisly
na mnozstvi provozu (je celkem jedno zda je spicka trafficu nebo utlum)
Jeste jsem nezkousel zakazat vyssi sleep stavy CPUckum...
Ve hre je take to, ze ten counter ze sitovky si vymysli. Nemam zatim
nijak potvrzeno, ze se nejake packety opravdu ztrati.
Diky
D. Toman
Další informace o konferenci Linux