Ladies and Gentlemen,
we have a huge problem here. Our monolithic SCSI port driver uses custom
NDIS protocol
driver as lower edge (basically it’s ATA-over-Ethernet implementation…).
Everything works
fine (70+ MB/sec with 1500 ethernet frames and gigabit wire speed with Jumbo
frames) on
Intel/3Com/nVidia/etc ethernet adapters. However on some of the brands (f.e.
D-Link 528 or
530, some of the cheap Broadcoms) transfer rate drops to unreasonable slow
5-8 MB/sec…
When submitting a sequence of ethernet frames sometimes happens a situation
when NDIS
packet is submitted, completion status received (and it’s good one!) but the
packet is not physically
sent and is rather stored by NDIS miniport somewhere… So we treat this
packet as lost one and
do send it once again and “other side” on server receives now two identical
frames (first, swallowed
one and second, re-transmitted one…). Is there any reason why some of the
NDIS protocol drivers
could behave like this? I mean report packet as sent but instead of it they
keep it in buffer memory.
Could it be b/c we use NdisSendPackets and not NdisSend (DDK says we should
not use NdisSend
if possible as it’s obsolete…). However looks like f.e. TCP protocol
driver always use NdisSend. So
what could it be? BTW, it happens only in GbE mode! When adapter switched to
100 Mbit - this all
stuff never happen!
Thank you very much!
Regards,
Anton Kolomyeytsev
CEO, Rocket Division Software