MTU für trunk device erhöhen

boese_t

Member
Hallo,

ich habe mittels 2 gleichen Netzwerkkarten
Code:
# pcidump                  
Domain /dev/pci0:
....
4:0:0: Intel 82574L
5:0:0: Intel 82574L
ein trunk-device erstelllt:
Code:
# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
        index 4 priority 0 llprio 3
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet 127.0.0.1 netmask 0xff000000
em0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
        lladdr d0:50:99:c1:5c:8d
        index 1 priority 0 llprio 3
        trunk: trunkdev trunk0
        media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
        status: active
em1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
        lladdr d0:50:99:c1:5c:8d
        index 2 priority 0 llprio 3
        trunk: trunkdev trunk0
        media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
        status: active
enc0: flags=0<>
        index 3 priority 0 llprio 3
        groups: enc
        status: active
trunk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr d0:50:99:c1:5c:8d
        index 5 priority 0 llprio 3
        trunk: trunkproto roundrobin
                trunkport em1 active
                trunkport em0 master,active
        groups: trunk egress
        media: Ethernet autoselect
        status: active
        inet 192.168.178.41 netmask 0xffffff00 broadcast 192.168.178.255

Da ich nicht annähernd an die theoretische Geschwindigkeit herankomme (max 60 MB/s zu einem Debian mit einem Bonding Device mit 2 gleichen Netzwerkkarten über einen Netgear Switch mit LingAggregation) möchte ich die MTU erhöhen.

Mittels
Code:
# ifconfig em0 mtu 9000 up

erhalte ich
Code:
ifconfig: SIOCSIFMTU: Invalid argument

laut Google soll hier eine Limitierung seitens der Netzwerkkarte vorliegen.
In der Manpage von OpenBSD ist zur MTU nichts geschrieben. Die Free-BSD Manpapge sagt, dass eine MTU bis zu 16114 möglich ist. Natürlich weiß ich nicht in wie fern es sich um den gleichen Treiber handelt.

Ich habe mit verschiedenen Werten gespielt. Alles unter 1500 wird akzeptiert, alles darüber nicht.

Wie kann ich die MTU erhöhen, bzw. warum kann ich es nicht?

noch der auszug aus den Interfaces:
Code:
# cat /etc/hostname.em0                                                               
up
mtu 16114

# cat /etc/hostname.em1
up

# cat /etc/hostname.trunk0
trunkproto roundrobin trunkport em0 trunkport em1
dhcp
#mtu 1500
 
hi

also a. es gibt wohl ein problem mit udp packeten und jumbos , siehe man em.
wrum setzt du die mtu size erst auf 16xxx ( was meines wissens keine netztwerkkarte und switch kann , zumindestens keine juniper , cisco oder extrme switch)
um sie dann wieder auf 1500 zu beschränken.

deine perfomnace messungen laufen auf layer 3 und somit wuerdes du nur die 1500 mtu nutzen-


im übrigen muss ! die mtu als allen ! beteiligten devices gleich sein .( server , beitligten router , switch , client )


und ich glaube auch nicht daran das die langsame perfomance am den nicht vorhandene jumbos liegen , ein trunk zz. hat nix mit addieren
der Physischen geschwindigkeiten zu tun.

holger
 
@ double-p:
$ ifconfig em0 hwfeatures
em0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 150 0
hwfeatures=36<CSUM_TCPv4,CSUM_UDPv4,VLAN_MTU,VLAN_HWTAGGING> hardmtu 921 6
lladdr d0:50:99:c1:5c:8d
index 1 priority 0 llprio 3
trunk: trunkdev trunk0
media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
status: active

@mark05:
die 16xxx sind zufällig, ich habe mit vielen Werten gespielt, hätte ich vor dem Post entsprechend setzen müssen - sorry.
Das, was im Netz zum Thema MTU und Gigabit zu finden ist, sagt ebend genau dass aus, dass es einen Zusammenhang gibt. Beispiel
Ein Trunk im Loadbalancing mode addiert durchaus die Geschwindigkeiten (abzüglich overhead), wenn gleich ich nicht weiß wie es sich bei eine Verbindung verhält, aber bei mehreren eben schon. Unabhängig vom trunk device sollte ein einziger NIC in der Lage sein 100 oder mehr MB/s zu liefern.

Ich möchte auch gar nicht so sehr auf Sinn und unsinn eingehen, das wird sich zeigen wenn ich mit erhöhten MTU testen kann.
Im ersten Schritt möchte ich dahin kommen meine MTU auf 9000 setzen zu können.
 
hi

du wirst keine verdoppelung der geschwindigkeit mit LACP / triunk erreichen da es nicht geht auf dem layer.

sieh das mal wie eine autobahn mit geschwindigkeits begrenzung , eine zusätzliche spur bewirkt nur das mehr autos bei gleicher geschwindigkeit fahren koennen.

deswegen macht iscsi in kombination mit lacp , keinen sinn.

holger
 
Zwar Unter Linux, aber ein Artikel der die Bandbreitenerhöhung mittels Bündelung von NIC's beschreibt. Auch dort wurde die MTU auf 9000 hochgesetzt.
Wie kommst du auch iscs?
 
hi

wenn du genau lesen kannst habe ich von lacp und trunk gsprochen , und nicht von frickel loeungen ala linux
wenn du den artikel gelesen hat , wird dir aufgefallen sein das man werder lacp am pc oder am switch configurieren soll.

somit mach linux m bond vermutlich ein layer3 load balancing , wie es iscsi es auch kann.

openbsd haelt sich das eher an die standarts die klar definiert sind.

und 450 Mbit ist nicht wirklich was besonderes , gemessen am aufwand der betrieben wird ( 4x 1 Gbit ethernet )

holger
 
Hallo Holger,

danke für die Infos, mein OpenBSD-Horizont ist offensichtlich leider sehr begrenzt. Mal unabhängig von der trunk-Thematik, hast du eine Idee warum die MTU nicht hoch gesetzt werden kann? Das ist der einzige Flaschenhals, der aus meiner Sicht noch in Frage kommt.

450 MB/s (du hast versehentlich Mbit geschrieben) ist sicherlich nicht Atmemberaubend, aber immerhin verdreifachung eines NIC's.
Eines muss ich nochmal blöd nachfragen:
in der manpage von trunk steht:
Code:
loadbalance
    Distributes outgoing traffic through all active ports and accepts incoming traffic from any active port. A hash of the protocol header is used to maintain packet ordering. The hash includes the Ethernet source and destination address and, if available, the VLAN tag, and the IP source and destination address.

Das liest sich für mich schon nach dem, was auf der Seite unter Linux gemacht wurde. Bitte korrigiere mich, wenn ich das falsch interpretiere.


Gruß

Torsten
 
hi

bei eine trunk / LCAP find ein load sharing statt , wie ich schon schrieb , ambstens vorzustellen wie eine autobahn .

je mehr interfaces desto mehr verbindungen koennen parallel arbeiten , jedoch gilt pro verbindung die physik eiiner netzwerk karte.

anbei mal ein dokument welches bonding unter linux beschreibt , und auf fallstricke aufzeig.

wenn ich das richtig verstehe , funktioniert das "performance" bonding auch nur wenn alle beteiligten an einem switch hängen.
Die performance wird wohl dadurch erreich das am ziel immer nur ein und dieselbe mac addr auftaucht.

das ganze geht wohl auf ds beowulf projekt zurück

https://www.kernel.org/doc/Documentation/networking/bonding.txt

holger
 
Nochmal zum Thema MTU:

Am hilfreichsten ist es meist, in den Quelltext zu schauen.
https://github.com/openbsd/src/blob/master/sys/net/if_trunk.c

Das Trunk-Interface übernimmt die MTU des ersten Mitglieds.
Zeile 301: https://github.com/openbsd/src/blob/db092844d4c65edd6daf10ed2b3474be2c913f3d/sys/net/if_trunk.c#L301

Jedes weitere hinzuzufügende Mitglied muss die gleiche MTU besitzen.
Zeile 309: https://github.com/openbsd/src/blob/db092844d4c65edd6daf10ed2b3474be2c913f3d/sys/net/if_trunk.c#L309

Du musst also die MTU von em0 setzen, dann für em1 die gleiche setzen und danach das Trunk-Interface erstellen.

Sobald ein Interface Mitglied eines Trunks ist, kann die MTU dieses Interfaces nicht mehr geändert werden, daher erhältst du den Fehler (Invalid argument).
Zeile 501: https://github.com/openbsd/src/blob/db092844d4c65edd6daf10ed2b3474be2c913f3d/sys/net/if_trunk.c#L501

Rob
 
@KobRheTilla:
Der Hinweis war richtig, habe den beiden em's eine MTU von 4000 zugewiesen, das Trunk-Device hat diese übernommen.
die Übertragung via netperf konnte so von 504.05 auf 955.75 gesteigert werden.

Code:
# netperf -H fileserver -p 22113 -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to fileserver.fritz.box () port 0 AF_INET : demo
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

16384 16384 16384 60.00 504.05

Code:
# netperf -H fileserver  -l 20
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to fileserver.fritz.box () port 0 AF_INET : demo
Recv   Send    Send                         
Socket Socket  Message  Elapsed             
Size   Size    Size     Time     Throughput 
bytes  bytes   bytes    secs.    10^6bits/sec 

16384  16384  16384    20.00     955.75

 
Zurück
Oben