USB: chipidea: patchset for performance improvement
Get series with b4
b4 am 20150324103253.GC4707@Sanchayan-ArchVersions 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
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/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: 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