Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Apr 2018 13:59:46 +0900
From:      YongHyeon PYUN <pyunyh@gmail.com>
To:        Dieter BSD <dieterbsd@gmail.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: AX88179 USB-to-Ethernet is slow and silently corrupts data
Message-ID:  <20180424045946.GB3123@michelle.fasterthan.co.kr>
In-Reply-To: <CAA3ZYrCW91_2NapFeELE4%2BdRBEXPdqGRpwN_UvakykHPfe3-Jw@mail.gmail.com>
References:  <CAA3ZYrCW91_2NapFeELE4%2BdRBEXPdqGRpwN_UvakykHPfe3-Jw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 10, 2018 at 03:54:58PM -0700, Dieter BSD wrote:
> 10.3-RELEASE
> amd64 with ECC memory
> VIA VL805 USB 3.0 controller
> ue0 is Siig USB-to-Ethernet  Chipset: AX88179
> 
> ugen0.7: <AX88179 ASIX Elec. Corp.> at usbus0, cfg=0 md=HOST
>    spd=SUPER (5.0Gbps) pwr=ON (124mA)
> 
> ue0: flags=8c43<UP,BROADCAST,RUNNING,OACTIVE,SIMPLEX,MULTICAST> metric 0
>      mtu 1500
>         options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
>         inet 10.0.210.66 netmask 0xffffff00 broadcast 10.0.210.255
>         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>         media: Ethernet autoselect (1000baseT <full-duplex>)
>         status: active
> 
> If media is set to "1000baseT <full-duplex>" it "works", but slowly, and
> received data is silently corrupted. :-(  Transmitted data is not
> corrupted (tested with > 30 GB).
> 
> ifconfig ue0 -txcsum
> "works", but still gives silent data corruption
> 
> ifconfig ue0 -rxcsum  (acts the same with or without txcsum)
>   ping out
>     netstat sees packets both directions, but ping doesn't see the response:
>     8 packets transmitted, 0 packets received, 100.0% packet loss
>   ping in
>    netstat sees packets in, but no responses going out
> 
> I can see that some Ethernet controllers would not support checksum offloading,
> but it seems to me that turning the checksum offloading off should always
> work? (at the expense of more cpu load)
> 
> Previously (2016 May):
>   # ifconfig ue0 media 100baseTX-FDX
>   fixed the input error problem and the data corruption problem,
>   at the expense of making it even slower.
> 
>   Sent data from machine A with 10Mbps Ethernet.  (Netgear Ethernet switch
>   converts 10Mbps to 1000Mbps) Netstat did not report any input errors on
>   ue0 and there was no data corruption.  So ue0 can handle gigabit data rate,
>   but gets input errors if packets arrive too frequently.
> 
>   I tried moving it to a USB-2 port.  No data corruption, but USB-2 is slow.
> 
>   The chip performs a lot better for tweaktown:
>   http://www.tweaktown.com/reviews/7243/vantec-cb-u300gna-usb-3-gigabit-network-adapter-review/index.html
>   (Vantec CB-U300GNA with the same Asix AX88179 chip)
>   "full duplex gigabit with 952 Mbps consistently across the chart"
> 
> http://www.vantecusa.com/products_detail.php?p_id=143&p_name=USB+3.0+Gigabit+Ethernet+Adapter&pc_id=21&pc_name=Network&pt_id=5&pt_name=Accessories
> 
>   Asix AX88179 chip:
>   http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112
>   "Supports Jumbo frame up to 4KB"
> 
>   But ifconfig rejects any value > 1500:
>   ifconfig ue0 mtu 1501
>   ifconfig: ioctl SIOCSIFMTU (set mtu): Invalid argument
> 
> I tried mtu of 100, 500, 1000, 1400 but they all give
> rcp: lost connection
> 
> USB disks are fast, so the USB controller seems to work ok.
> 
> I also tried a Tek Republic TUN-300 which has the same AX88179,
> and it acts the same as the Siig.
> 
> So, transmit works, but is slow.  Receive works if the amount of traffic
> is low enough (limit rate of data sent, limit Ethernet speed, or
> use USB-2). But if data is received too fast it gets silently corrupted.
> Setting -rxcsum does not work, and cannot set mtu other than 1500.
> 

[Removed freebsd-usb@, freebsd-hackers@ and freebsd-drivers@ in the CC list]

> Questions:
>  Why does -rxcsum not work?

The driver implements RX checksum offloading but it seems it has
some issue in RX data handling.

>  Why does attempting to set a larger mtu fail?

Jumbo frame support was not implemented in axge(4).

>  Why does setting a smaller mtu make rcp fail?
>  Why is the chip acting slow?
>  How do I get it to work properly? (fast and without data corruption)

In order to narrow down the issue it would be helpful to know:
- Disable all H/W checksum offloading features.
- Which phy driver is used for axge(4)?
  You can see the phy driver name below axge(4) attachment in dmesg
  output. 
- Do you use manual media configuration instead of
  auto-negotiation?
- Does the issue happen at which media speed(10Mbps, 100Mbps or
  1000Mbs)?
- Does the issue happen with which USB driver(ehci(4) or xhci(4))?
- Which direction of packet flow is broken(TX or RX or both)?
  You need two boxes(one with ue(4) and the other with good
  working system).  If TX flow of ue(4) is broken, your good
  working system will report number of bad input packets.  If
  RX flow of ue(4) is broken, you may receive corrupted data
  without errors.  Use TCP to test for TX/RX flow.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180424045946.GB3123>