Problem: ~600Kbyte/s im 100Mbit-Netz

lulatsch

Member
Hallo an alle,
bin neu also erstmal Danke im Voraus.
Mein System:
freebsd5.4+i386+pf+altq+ADSL6000/768+User-Mode-PPP.
int_if und ext_if der Marke 3com.
Queueing auf $ext_if, ausgehend.
ca 10 Rechner im LAN.
Code:
# dmesg | grep -i cpu
CPU: Pentium/P54C (132.96-MHz 586-class CPU)
# top
Mem: 17M Active, 18M Inact, 23M Wired, 3604K Cache, 17M Buf, 8336K Free
Swap: 50M Total, 50M Free
# uname
FreeBSD 5.4-RELEASE Custom-Kernel

Mein Problem:

Bandbreite vom Router/int_if zu lan-hosts über 100Mbit NUR ~600kbyte/s. In beide Richtiungen.
die geschwindigkeit ist auch schlecht. Ein ping von einem anderen host ergab:
Code:
# ping -qc5 192.168.0.1
round-trip min/avg/max/stddev = 0.562/0.622/0.817/0.074 ms
Ping zu anderem Host im lan:
round-trip min/avg/max/stddev = 0.433/0.435/0.438/0.003 ms
Ich meine an pf liegt es nicht.
Szenario1: Mache ich zb einen ftp download aus dem Internet habe ich folgende Werte:
downloadrate: 200-350Kbyte/s
cpuload: ppp 30%
(pftop) altq queue outgoing: 50-300 acks/s schwankend
Range getesteter States: ca 100-8000

Szenario2: mache ich einen scp download bzw upload von einem anderen Host im LAN:
rate: schwankend, 200-500Kbyte/s
cpuload: sshd 30%
packets/s: weiss ich nicht wie es ohne altq auf $int_if per pftop anzeigbar ist.

Ich habe schon viel gelesen und viel probiert, brachte aber alles keinen Erfolg.

folgendes habe ich gemacht:
- ifconfig überprüft. ifconfig der Interfaces poste oder maile ich gerne.
- keine pf-regeln und kein altq auf $int_if.
--> keine Änderung. also schliesse ich aus dass pf das Problem ist.
- Überprüfen der Kernel-Konfiguration. (Poste oder maile ich gerne bei Bedarf)
- Neukompilieren des kernel
- setzen der $lan_if-MTU: 1500/1492/1454/1400
--> keine Anderung
- folgende sysctl-settings habe ich versucht:
Code:
net.inet.ip.subnets_are_local=1
net.inet.ip.rtmaxcache=256
net.inet.ip.rtminexpire=2
net.inet.ip.rtexpire=2

net.inet.tcp.local_slowstart_flightsize=65535
net.inet.tcp.delayed_ack=0 
net.inet.tcp.mssdflt=1460
net.inet.tcp.sendspace=65535
net.inet.tcp.recvspace=65535
net.inet.tcp.newreno=1
net.inet.tcp.icmp_may_rst=0

net.inet.udp.recvspace=73728
net.graph.nonstandard_pppoe=-1

kern.ipc.maxsockbuf=524288
kern.ipc.somaxconn=6500

Kann es sein dass $int_if einen Hardwaredefekt hat?
Oder spielt pf doch noch eine Rolle?
Sollte ich auf fbsd6.0 upgraden um "/etc/pf.conf: set skip on $lan_if" ausprobieren?
Ist der Pentium133 zu langsam? zuwenig RAM?

Ich habe keine Ideen mehr woran es liegen könnte. Bitte helft mir weiter.



Danke und Grüsse aus dem Schwarzwald

lulatsch
 
Zuletzt bearbeitet:
Erstmal Willkommen im Forum.

Richtig weiterhelfen kann ich dir leider nicht. Vieleicht hab ich auch was überlesen. Auffällig finde ich die Geschwindigkeit, welche ungefähr deiner Inetleitung entspricht. Hast du schonmal probiert mit abgezogenen Internet Daten auszutauschen? So könntest du auf alle fälle feststellen ob es an deinen Einstellungen oder an der Hardware liegt. Auch ein wechsel zwischen den Nics würde ich mal zu testzwecken in betracht ziehen.
 
ja werde gleich mal $int_if austauschen. Mal sehen...
Auffällig finde ich die Geschwindigkeit, welche ungefähr deiner Inetleitung entspricht.
ja wundert mich auch. habe schon gedacht vielleicht pf leitet pf die download-Bandreite von der upload-Bb ab, was unwahrscheinlich ist. Habe dann die up-bb am altq erhöht. aber leider auch keine änderung.

Hast du schonmal probiert mit abgezogenen Internet Daten auszutauschen?
werde ich auch versuchen.
Vielleicht Versuch1:
komplett ohne altq
Versuch2:
komplett ohne pf/altq und ppp
 
setzte die nics mal auf feste speeds und nicht auto-sensing.
also z.b. 100mbit fdx, etc.

viele karten/switches haben doch mal probleme in umgebungen die komplett auf auto-sending bauen
 
ok. am internen interface habe ich eingestellt:
# ifconfig xl0 media "100baseTX"

fconfig xl0 sagte vorher:
media: Ethernet autoselect (100baseTX <full-duplex>)

jetzt:
media: Ethernet 100baseTX

....brachte aber auch keine Änderung. :o/
 
mittlerweile hab ich pf ohne altq und ganz ohne pf/altq/ppp getestet. kein unterschied.
also hat es nichts mit denen zu tun meiner Meinung....
ich bin ratlos....
 
300Kbyte/s ist aber schon wenig oder? oder liegt das an dem langsamen Pentium?
aber wenn ich nen ftp download mach sollte es schon schneller gehn. also irgendwas ist faul.
 
oh doch da ist was faul. scp ist zwar "lahm" aber nicht so.
hast du mal netzwerkkabel getauscht bzw einen rechner direkt via cross angeschlossen?
 
Noch eine Sache werfe ich noch hinzu. Schau mal, ob sich IRQ-Belegungen unterscheiden (inbesondere ob irgend ein anderes Gerät den IRQ Deiner Netzwerkkarte belegt). In der dmesg findest Du für jedes Gerät eine "irq=xx"-Angabe. Die alten Pentium-Mainboards neigen dazu, die Interrupts kaputt zu belegen.

Mit scp kriegst Du auch nicht so große Geschwindigkeiten hin. Die CPU schränkt hier ein, weil sie verschlüsseln muss. Nimm etwas einfaches, wie FTP, NFS, HTTP oder Samba zum Ermitteln der Geschwindigkeit.
 
30% CPU Last - ich wette fast, dass der Rest deiner CPU dafür drauf geht, dass die Platte in der Mühle mit PIO betrieben wird. Mach mal ein
Code:
atacontrol info ad0
Bzw. statt ad0 die entsprechende Platte von der/auf die du kopierst.
Beim kopieren kannst du auch mal auf die Interrupt-Last im top achten.
 
ja, die beiden nics(int und ext) haben die gleichen irqs. Wie änder ich das?

# atacontrol info ad0
atacontrol: Invalid ATA channel

# dmesg | grep ad0
ad0: 4112MB <ST34323A/3.02> [8912/15/63] at ata0-master BIOSPIO
 
lulatsch schrieb:
# atacontrol info ad0
atacontrol: Invalid ATA channel
Du hast wohl noch eine etwas ältere Version, da muss man die Kanalnummer angeben.
Code:
atacontrol info 0
Eventuell auch
Code:
atacontrol mode 0

# dmesg | grep ad0
ad0: 4112MB <ST34323A/3.02> [8912/15/63] at ata0-master BIOSPIO
Na, das sagt schon einiges. BIOSPIO -> extrem böse.
Das frisst den Rest deiner CPU, denn für jedes 16bit Wort, das der IDE-Kontroller übertragen möchte löst er einen Interrupt aus und die CPU darf das Wort dann von einem Port lesen. Viel langsamer und CPU-fressender geht es quasi nicht.
Schau dir in top die Interrupt-Last an, während was größeres auf der Platte passiert (Das Netzwerk muss nicht involviert sein). Du wirst sehen, dass die locker bei 60-70% liegt.
 
hier ein top mit sysprocs bei einem ftp-download per wget:
Code:
PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
11 root     171   52     0K     8K RUN     18.1H 42.19% 42.19% idle
226 root      86    0  3340K  1760K RUN     47:00 14.84% 14.84% ppp
29 root     -44 -163     0K     8K WAIT    21:49  4.69%  4.69% swi1: net
9224 root      77    0  3664K  1600K select   0:07  3.91%  3.91% wget
20 root     -68 -187     0K     8K RUN      9:10  0.00%  0.00% irq9: xl0 xl1

und ein top mit sysprocs bei einem cp einer datei auf eine andere partition der platte:
Code:
PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
11 root     171   52     0K     8K RUN     18.1H 43.75% 43.75% idle
25 root     -64 -183     0K     8K WAIT     0:39 16.41% 16.41% irq14: ata0
9274 root      -4    0  1280K   660K getblk   0:03  8.59%  8.59% cp
 
Zuletzt bearbeitet:
Zitat von s-tlk
oh doch da ist was faul. scp ist zwar "lahm" aber nicht so.
hast du mal netzwerkkabel getauscht bzw einen rechner direkt via cross angeschlossen?
nicht direkt über ein cross, aber ursprünglich war er über ein patch-panel am switch angeschlossen. da hab ich dann mal ein kabel genommen und direkt am switch angeschlossen.

wie kann ich xl0 oder xl1 einen anderen irq geben?
und wie kann ich die platte von pio auf dma stellen?
 
lulatsch schrieb:
wie kann ich xl0 oder xl1 einen anderen irq geben?[/QOUTE]
Steckplatz wechseln o. bei einem guten Board im Bios die IRQs händisch den Plätzen zuweisen. Das geht aber nur bei den guten Pentiumsboard, bei den schlechten musst du Plätze tauschen, frei nach dem Motto: Was man nicht im Kopf hat, hat man in den Beinen. :)

lulatsch schrieb:
und wie kann ich die platte von pio auf dma stellen?
Tja, Bios checken, wenn da dma eingestellt ist, prüfen ob im dmesg etwas wegen CRC-Fehlern auftaucht und der Kernel in pio runterschaltet. Wenn das der Fall ist, Board dahin werfen wo es hingehört...

Gruß c.
 
Zuletzt bearbeitet:
dma ist wohl aktiv laut sysctl:
#sysctl hw.ata.ata_dma
hw.ata.ata_dma: 1

im bios gibts nix einzustellen....
die nics hab ich auch soweit dass sie versch irqs benutzen.
abre immernoch langsame verbindungen.
 
Zuletzt bearbeitet:
hier nochmal ein aktuelles top während eines ftp download aus dem internet:
Code:
CPU states: 19.8% user,  0.0% nice, 28.2% system, 26.0% interrupt, 26.0% idle
PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
227 root      97    0  3340K  1812K RUN      0:46 24.22% 24.22% ppp
314 bind      20    0  5632K  4128K kserel   0:05  0.00%  0.00% named

und ein top während eines scp auf eine andere kiste im lan.
Code:
CPU states: 62.8% user,  0.0% nice, 25.0% system, 12.2% interrupt,  0.0% idle
PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
721 root     139    0  3452K  2028K RUN      1:06 71.88% 71.88% ssh
 
Zurück
Oben