Ah ja, hatte ich halt noch nicht auf einem "normalen PC". Vielleicht mangels geeigneter Hardware oder weil ich Debian und Ubuntu nicht ernsthaft verwende, sondern nur dann, wenn es wg. Freetz bei anderen eingesetzt wird und ich es somit tatsächlich in Form einiger VM auch ab und an mal starte.
Da ich dann WireShark-Mitschnitte auch immer auf dem VM-Host mache (wenn die Daten dort die physikalische Netzwerk-Karte verlassen), habe ich das auch noch nicht in einem FRITZ!Box-Mitschnitt gesehen.
Für ein Offloading-Szenario empfinde ich persönlich (anhand dessen, was ich z.B. von Windows kenne, wo dann die (effektive) TCP-Window-Size auch schon mal > 11.500 geht, wobei sogar Werte von 64K gesetzt sind als "Wunsch" seitens des PCs) die Werte für das TCP-Window dann wieder recht konservativ, weil natürlich der TCP-Stack des Betriebssystems nur so lange Daten hinterherschickt, bis das (kleinere) Window ausgereizt ist.
Im LAN sollten da jetzt auch nicht großartig irgendwelche Pakete oder die passenden ACKs verloren gehen, die ein Verkleinern des Windows "rechtfertigen" würden und der Offload-Code sollte ja auch das Window in Richtung System entsprechend an das anpassen, was er selbst puffern kann - mir fehlt da gerade die Phantasie (und das Wissen, was da im TCP-Stack alles hineinspielen könnte an zusätzlichen Variablen), warum das Fenster dann überhaupt verkleinert (bzw. immer wieder verändert) wird, wenn die Buffer im Offload-Prozessor doch immer dieselbe Größe haben müßten/sollten. Da sollte das doch aus meiner Sicht eine Einbahnstraße sein ... es wird mit jeder erfolgreichen Übertragung die Paketgröße so lange verdoppelt (die Segmentierung erfolgt später), bis die Window-Size erreicht ist. Was führt jetzt dazu, daß diese Window-Size wieder reduziert wird ... immer unter der Annahme, daß tatsächlich keine Pakete verloren gehen, also die Übertragung im LAN zu 100% "reliable" ist.
Bisher sind mir solche Offloading-Szenarien eigentlich nur dadurch aufgefallen, daß es häufig doppelte ACKs gibt und daß bei den empfangenen Paketen, die über die pcap-Schnittstelle abgefangen werden, in der Regel die "Frame check sequence" nicht mehr stimmt, wenn da auch noch LRO oder GRO eingeschaltet ist. Zumindest bei einigen NICs offensichtlich (konkret hier ein Marvell Yukon 88E8056) ... da wird wohl auf die Berechnung einer korrekten Prüfsumme für die Frames, die an das System weitergereicht werden, verzichtet (auch das Bilden der Prüfsummen kann/muß ja dann ausgelagert werden aus dem TCP-Stack des Systems).
Mehr oder weniger gestartet als "Beschleuniger" für 10G-Karten, mag es sein, daß TSO oder GSO inzwischen auch auf Embedded-Systems als Funktion im Netzwerk-Prozessor angekommen ist, weil es dort die eher schwachen Prozessoren bei der Verarbeitung von Netzwerk-Paketen entlasten kann.
Vielleicht gibt es inzwischen auch nur noch "normale" GbE-NICs, die bereits GSO/TSO unterstützen ... auf einem normalen (Linux-)PC ist es mir persönlich (aber das muß man auch nicht überbewerten, meine "Bastlerzeiten" sind seit 4-5 Jahren auch endgültig gestorben, seitdem man auch passende Systeme "von der Stange" kriegt) noch nicht untergekommen; das liegt also vermutlich wirklich an der falschen Hardware oder am falschen System (unter Windows kenne ich die Einstellungen bei den entsprechenden Treibern allerdings, würde die jedoch als "aus" im Standardfall annehmen, ohne das jetzt zu überprüfen).
(M)Ein Realtek-NIC (unter openSuSE) unterstützt dann offenbar auch kein Offloading oder das System fordert es nur in sehr begrenztem Umfang an:
Code:
[COLOR="#0000FF"]# lspci -k -s 01:00.0[/COLOR]
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
Subsystem: Realtek Semiconductor Co., Ltd. Device 0123
Kernel driver in use: r8169
Kernel modules: r8169
[COLOR="#0000FF"]# ethtool --show-offload eth0 | grep "[^i]on"[/COLOR]
rx-checksumming: on
generic-receive-offload: on
rx-vlan-offload: on
tx-vlan-offload: on
[COLOR="#0000FF"]# ethtool --show-offload eth0[/COLOR]
Features for eth0:
rx-checksumming: on
tx-checksumming: off
tx-checksum-ipv4: off
tx-checksum-ip-generic: off [fixed]
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: off
tx-scatter-gather: off
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp6-segmentation: off [fixed]
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: off
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-ipip-segmentation: off [fixed]
tx-sit-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
busy-poll: off [fixed]
GRO ist ja wesentlich restriktiver als LRO (und damit "neutraler" ggü. dem System-Stack), wenn es um das Zusammenfassen von mehreren Segmenten zu einem neuen, größeren Paket geht ... mit der Folge, daß durch GRO zusammengefaßte Pakete auch wieder neu segmentiert werden können, während bei LRO dann wichtige Informationen auf der Strecke bleiben (weil unterschiedliche Zustände in den ursprünglichen TCP-Headern "vermischt" werden können beim LRO).
@stoney0815:
Wenn das tatsächlich Offloading ist, dann sollten ja bei der FRITZ!Box wieder korrekte Pakete ankommen (bliebe der Switch mit Mirror-Port und ein dort aufgezeichneter Mitschnitt als "Beweismittel") und dann fällt das (sofern dann nicht die TOE (TCPIP Offload Engine) selbst das Problem ist, weil sich der FTP-Server im Bootloader vielleicht atypisch verhält) als denkbare Ursache wieder aus.