Problém s občasnou latencí pingů na routeru

Ruda Hamak rhamak-lists na ktkadan.cz
Středa Srpen 8 10:14:39 CEST 2007


Dobrý den.
Mám následující problém s routerem.
Když pingám na některé ze 2 síťových rozhraní routeru, tak občas dochází 
ke zvýšení dob odezev a ke ztrátám paketů.
Příklad pingání po ½ sekundě:
64 bytes from xx.xx.xx.xx: icmp_seq=86 ttl=64 time=0.237 ms
64 bytes from xx.xx.xx.xx: icmp_seq=87 ttl=64 time=0.234 ms
64 bytes from xx.xx.xx.xx: icmp_seq=88 ttl=64 time=0.284 ms
64 bytes from xx.xx.xx.xx: icmp_seq=89 ttl=64 time=0.351 ms
64 bytes from xx.xx.xx.xx: icmp_seq=90 ttl=64 time=0.364 ms
64 bytes from xx.xx.xx.xx: icmp_seq=91 ttl=64 time=0.271 ms
64 bytes from xx.xx.xx.xx: icmp_seq=92 ttl=64 time=0.285 ms
64 bytes from xx.xx.xx.xx: icmp_seq=93 ttl=64 time=0.732 ms
64 bytes from xx.xx.xx.xx: icmp_seq=94 ttl=64 time=0.570 ms
64 bytes from xx.xx.xx.xx: icmp_seq=95 ttl=64 time=0.161 ms
64 bytes from xx.xx.xx.xx: icmp_seq=96 ttl=64 time=0.323 ms
64 bytes from xx.xx.xx.xx: icmp_seq=97 ttl=64 time=0.318 ms
64 bytes from xx.xx.xx.xx: icmp_seq=98 ttl=64 time=0.288 ms
64 bytes from xx.xx.xx.xx: icmp_seq=99 ttl=64 time=6.10 ms
64 bytes from xx.xx.xx.xx: icmp_seq=100 ttl=64 time=0.264 ms
64 bytes from xx.xx.xx.xx: icmp_seq=101 ttl=64 time=0.310 ms
64 bytes from xx.xx.xx.xx: icmp_seq=102 ttl=64 time=0.255 ms
64 bytes from xx.xx.xx.xx: icmp_seq=103 ttl=64 time=27.7 ms
64 bytes from xx.xx.xx.xx: icmp_seq=104 ttl=64 time=7.33 ms
64 bytes from xx.xx.xx.xx: icmp_seq=105 ttl=64 time=40.9 ms
64 bytes from xx.xx.xx.xx: icmp_seq=106 ttl=64 time=0.280 ms
64 bytes from xx.xx.xx.xx: icmp_seq=107 ttl=64 time=14.1 ms
64 bytes from xx.xx.xx.xx: icmp_seq=108 ttl=64 time=8.83 ms
64 bytes from xx.xx.xx.xx: icmp_seq=109 ttl=64 time=14.7 ms
64 bytes from xx.xx.xx.xx: icmp_seq=110 ttl=64 time=0.270 ms
64 bytes from xx.xx.xx.xx: icmp_seq=111 ttl=64 time=11.1 ms
64 bytes from xx.xx.xx.xx: icmp_seq=112 ttl=64 time=15.3 ms
64 bytes from xx.xx.xx.xx: icmp_seq=113 ttl=64 time=4.79 ms
64 bytes from xx.xx.xx.xx: icmp_seq=114 ttl=64 time=0.387 ms
64 bytes from xx.xx.xx.xx: icmp_seq=115 ttl=64 time=4.98 ms
64 bytes from xx.xx.xx.xx: icmp_seq=116 ttl=64 time=0.769 ms
64 bytes from xx.xx.xx.xx: icmp_seq=117 ttl=64 time=6.74 ms
64 bytes from xx.xx.xx.xx: icmp_seq=118 ttl=64 time=0.210 ms
64 bytes from xx.xx.xx.xx: icmp_seq=119 ttl=64 time=1.18 ms
64 bytes from xx.xx.xx.xx: icmp_seq=120 ttl=64 time=0.370 ms
64 bytes from xx.xx.xx.xx: icmp_seq=121 ttl=64 time=0.269 ms
64 bytes from xx.xx.xx.xx: icmp_seq=122 ttl=64 time=0.273 ms
64 bytes from xx.xx.xx.xx: icmp_seq=123 ttl=64 time=0.248 ms
64 bytes from xx.xx.xx.xx: icmp_seq=124 ttl=64 time=0.256 ms

V nejhorším případě jsou časy až 250 ms a ztráty paketů.
K problému dochází nepravidelně (několikrát během dne) a s mírnou 
závislostí na celkovém trafficu na routeru.
V době trvání problému se v "top" objevuje proces ksoftirgd/0 nebo 
ksoftirgd/1.

Nevím odkdy problém trvá.

Router slouží asi pro 2500 uživatelů internetu. Maximální traffic je 
kolem 120 Mb/s a 17 000 paketů za sekundu.

HW:
- IBM xSeries 346
- 2x CPU Xeon 3,6 Mhz
- 3 GB RAM (celkem nevyužita)
- 2 integrované síťovky Broadcom, 2 síťovky Intel PRO/1000 MT (všechny 
gigové)
- hyperthreading vypnutý

OS:
- Debian 3.1
- neupravované jádro 2.6.8-3-686-smp z distribuce
- testovány ovladače síťovek tg3 obsažené v jádře i kompilované bcm5700 
a pro Intel e1000 z distribuce
- zkoušeny různé kombinace síťovek na různých sběrnicích PCI-X
- řetězce iptables dosti rozsáhlé (pravidla pro každou klientskou IP – 
počítáme data) , ale mírně optimalizované rozdělením do několika větví. 
Vypnutí pravidel ale problém neřeší.
- shaping CBQ jen pro několik IP adres
- irqbalance běží
- mírně „poladěné“ proměnné nf_conntrack kvůli p2p klientům:
HASHSIZE = 24 576
ip_conntrack_max= 393 216
ip_conntrack_tcp_timeout_established = 16 380
- pomocí smp_affinity spravedlivě :-) rozdělena obsluha 2 síťovek na 
jednotlivé procesory

Možná by stačilo nějak poladit „TCP variables“, ale nevím jak přesně a 
nechci postupovat metodou pokus – omyl.
Nebo se jedná o nějaké útoky? Nemám s tím zkušenosti.
Nebo zkompilovat jádro a přidat ovladače síťovek do jádra?

Mohl byste mi poradit nějaké řešení?
Děkuji
Rudolf Hamák



Další informace o konferenci Linux