USB: chipidea: patchset for performance improvement
Get series with b4
b4 am 20150324122146.GC2293@shlinux2Versions newest first
- 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.
Cover letter [PATCH 00/12] USB: chipidea: patchset for performance improvement
Quoted 111 lines · victorascroft at gmail.com
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/s1G USB Ethernet Card
With Patch Set Without Patch Set
TX: 186 Mb/s 185 Mb/s
RX: 219 Mb/s 216 Mb/sQuoted 5 lines
g_ncm(Device Mode)
With Patch Set Without Patch Set
TX: 166MB/s 163MB/s
RX: 230MB/s 184MB/sI 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 invfxxx.dtsifile 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:
TimingO_DIRECTdisk reads: 36 MB in 3.05 seconds = 11.80 MB/secWrites
root at colibri-vf:~# time dd if=/dev/zero bs=128k count=4096 of=/media/sda1/tmpfile
4096+0 records in
4096+0 records outreal 1m11.671s user 0m0.010s sys 0m10.130sUSB 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/secWithout this patchset applied
Reads
hdparm -t --direct/dev/sda
/dev/sda:
TimingO_DIRECTdisk reads: 78 MB in 3.06 seconds = 25.50 MB/secWrites
root at colibri-vf:~# time dd if=/dev/zero bs=128k count=4096 of=/media/sda1/tmpfil
4096+0 records in
4096+0 records outreal 0m43.807s user 0m0.050s sys 0m9.960sUSB 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/secPerhaps I am missing something? I have the ehci_hcd.park=3 set.
Quoted 7 lines
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=256MIs there any other parameter or variable I need to set?
Hi Sanchayan,
The dts setting is specific for i.mx6 (maybe i.mx5 is applicate), and it needs below patch to co-work with it, it is an i.mx controller specific improvement (not in core).
Quoted 1 line
Quoted 1 line
usb: chipidea:
usbmisc_imx: add unburst setting for imx6
Other chipidea SoCs may have optimized parameters than default ones, it needs to check with IC guys.
Enable stream mode should improve tx performance, you can have a try.
Quoted 40 lines
- 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: introduceci_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
Signature · 2 lines
Best Regards, Peter Chen