Skip to content

USB: chipidea: patchset for performance improvement

victorascroft at gmail.com linux-arm-kernel linux-devicetree 1 version New

Get series with b4
b4 am 20150324103253.GC4707@Sanchayan-Arch

Versions newest first

  1. v1 Latest0 of 12 patches 0 repliesNew

Patches in v1 No applies recorded yet

None of the 12 patches the cover letter announces are in this archive.

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 00/12] USB: chipidea: patchset for performance improvement

Hello Peter,

Quoted 32 lines · Peter Chen

Hi all,

In this patch set, I add some interfaces for tuning the performance of chipidea usb driver. With this set, the USB performance can be improved at some user cases with suitable parameters. The main changes:

- Interface to tune interrupt threshold control, and set 'Immediate' for default value
- The glue layer can disable stream mode according to USB role
- Interface to tune AHB burst configuration at SBUSCFG
- Interface to tune tx/rx burst size
- i.mx changes for achieving better performance, it can reduce the latecy between bus and USB FIFO, and reduce the overrun and underrun occurrences, it is useful for the system bus is busy. we see great improvement for ISO transfer, eg, high resolution USB camera when the bus is busy.

Below are some test results at imx6sx sdb board (set ehci_hcd.park=3 at bootargs), the tests are done at v4.0 kernel, no other bus loading during the tests, so we have not seen performance change for some use cases.

USB Mass Storage (Host mode)
With Patch Set Without Patch Set
R: 26.9 MB/s 27 MB/s
W: 25.2 MB/s 24.5 MB/s

1G USB Ethernet Card
With Patch Set Without Patch Set
TX: 186 Mb/s 185 Mb/s
RX: 219 Mb/s 216 Mb/s

Quoted 5 lines

g_ncm (Device Mode)
With Patch Set Without Patch Set
TX: 166MB/s 163MB/s
RX: 230MB/s 184MB/s

I tested these patches on a Colibri Vybrid VF61. Have not applied the 7th and 11th patch, but, the changes these patches introduce, I added them to our device tree node. These would be the addition of ahb-burst-config = <0x0> and tx-burst-size-dword = <0x10> and rx-burst-size-dword = <0x10> to the usb node in vfxxx.dtsi file for both the peripheral and host usb nodes.

I used hdparm and dd for the tests. Some of the readings are below.

With this patchset applied

Reads
hdparm -t --direct /dev/sda

/dev/sda:
Timing O_DIRECT disk reads: 36 MB in 3.05 seconds = 11.80 MB/sec

Writes
root at colibri-vf:~# time dd if=/dev/zero bs=128k count=4096 of=/media/sda1/tmpfile
4096+0 records in
4096+0 records out

real    1m11.671s
user    0m0.010s
sys     0m10.130s

USB Client - RNDIS

root at colibri-vf:~# iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.2 port 41317 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 105 MBytes 88.2 Mbits/sec

Without this patchset applied

Reads
hdparm -t --direct /dev/sda

/dev/sda:
Timing O_DIRECT disk reads: 78 MB in 3.06 seconds = 25.50 MB/sec

Writes
root at colibri-vf:~# time dd if=/dev/zero bs=128k count=4096 of=/media/sda1/tmpfil
4096+0 records in
4096+0 records out

real    0m43.807s
user    0m0.050s
sys     0m9.960s

USB Client - RNDIS

root at colibri-vf:~# iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.2 port 49857 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 138 MBytes 116 Mbits/sec

Perhaps I am missing something? I have the ehci_hcd.park=3 set.

root at colibri-vf:~# cat /proc/cmdline
ehci_hcd.park=3 ubi.mtd=ubi root=ubi0:rootfs rootfstype=ubifs ubi.fm_autoconvert=1 mtdparts=vf610_nfc:128k(vf-bcb)ro,1408k( u-boot)ro,512k(u-boot-env),-(ubi) fec_mac= consoleblank=0 console=tty1 console=ttyLP0,115200n8 mem=256M

Is there any other parameter or variable I need to set?

- Sanchayan

Quoted 36 lines

Peter Chen (12):
Doc: usb: ci-hdrc-imx: add gadget-itc-setting for binding doc
usb: chipidea: set ITC to 0 for device mode
usb: chipidea: define stream mode disable for both roles
usb: chipidea: imx: add stream mode enable for device mode at
imx6sl/imx6sx
usb: chipidea: introduce ci_platform_config
Doc: usb: ci-hdrc-imx: add ahb-burst-config for binding doc
ARM: imx6: set ahb-burst-config as 0 for USB
usb: chipidea: add ahb burst configuration
usb: chipidea: usbmisc_imx: add unburst setting for imx6
Doc: usb: ci-hdrc-imx: add tx(rx)-burst-config-dword for binding doc
ARM: imx6: change default burst size for USB
usb: chipidea: add burst size configuration interface

 .../devicetree/bindings/usb/ci-hdrc-imx.txt        |  12 +++
 arch/arm/boot/dts/imx6qdl.dtsi                     |  12 +++
 arch/arm/boot/dts/imx6sl.dtsi                      |   9 ++
 arch/arm/boot/dts/imx6sx.dtsi                      |   9 ++
 drivers/usb/chipidea/bits.h                        |   7 ++
 drivers/usb/chipidea/ci.h                          |   3 +
 drivers/usb/chipidea/ci_hdrc_imx.c                 |  14 ++-
 drivers/usb/chipidea/core.c                        | 119 +++++++++++++++++++--
 drivers/usb/chipidea/host.c                        |   6 +-
 drivers/usb/chipidea/usbmisc_imx.c                 |  12 ++-
 include/linux/usb/chipidea.h                       |  11 +-
 11 files changed, 191 insertions(+), 23 deletions(-)
Signature · 7 lines
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel