>
>Glad that FreeBSD is committed to support it in v8.0. Man, on a
Windows
system with *multiple*What is amazing for me that Windows has ToE support (to some degree)
since
at least w2k, Linux and FreeBSD still have none, and there are myth
believers that consider these UNIXen to be faster then Windows.
If by “to some degree” you are talking about “Large Send Offload” (TCP &
UDP, RX & TX) and “Checksum Offload” (RX and TX) then Linux has had it
for quite a while.
In fact (to make it on-topic again, as I really would like to resolve
these problems), Windows 2003’s ToE is insufficient enough that making
it talk to Linux under Xenis a real pain. I have encountered the
following problems - I believe they are limitations of Windows/NDIS but
maybe the limitation is my understanding of NDIS:
(background) Under Xen, the interfaces that a Linux DomU sees support
checksum offload and large send offload. Linux can therefore send a 64K
TCP packet onto a bridge in Dom0 without calculating the checksum. If
the final destination of the packet lies on the other side of a physical
interface, and the physical interface supports Large Send then the
packet will just be handed to the interface and the interface will do
the offload, otherwise Linux will fake the offload and we are no worse
off than if the packet was checksummed and split up in the DomU (better
off, in fact, as only a single 64K packet had to traverse the bridge
rather than 40 1500 byte packets). If the final destination of the
packet is another DomU, the DomU will accept the packet in its ‘large’
form (even though it is >MTU), and never look at the checksum as it is
flagged as ‘checksum validated’.
(1) Windows refuses to accept a packet from my virtual interface that is
larger than the MTU, which means that my driver has to break up the
packet into MTU sized chunks. Lots of overhead which should be
unnecessary! I think I understand why the problem exists, but (IMHO) it
shows a bit of a lack of foresight on the part of NDIS.
(2) Windows appears to be double-checking the checksum, so if I give
Windows a packet and say “the checksum is correct”, Windows still
re-checks it and drops the packet (the checksum is blank because there
is no need to calculate a checksum when the packet has never been out on
the wire) which means I have to calculate the checksum before handing
the packet to NDIS. Again, pointless overhead.
This is NDIS5.1 (my drivers need to work under XP)… maybe these
problems are resolved in 6.x? If so, I’d consider maintaining both a 5.1
and a 6.x version of the drivers as the performance gains would be
significant.
Thanks
James