On Mon, Apr 01, 2019 at 11:16:11PM +0900, Suwan Kim wrote: > Patch "USB: HCD: support giveback of URB in tasklet context"[1] > introduced giveback of urb in tasklet context. [1] This patch was > applied to ehci but not xhci. [2] This patch significantly reduces > the hard irq time of xhci. Especially for uvc driver, the hard irq > including the uvc completion function runs quite long but applying > this patch reduces the hard irq time of xhci. > > I have tested four SS devices to check if performance degradation > occurs when urb completion functions run in the tasklet context. > > As a result of the test, all devices works well and shows very > similar performance with the upstream kernel. Moreover, usb ethernet > adapter show better performance than the upstream kernel about 5% for > RX and 2% for TX. Four SS devices is as follows. > > SS devices for test > > 1. WD My Passport 2TB (external hard drive) > 2. Sandisk Ultra Flair USB 3.0 32GB > 3. Logitech Brio webcam > 4. Iptime 1gigabit ethernet adapter (Mediatek RTL8153) > > Test description > > 1. Mass storage (hard drive) performance test > - run below command 10 times and compute the average performance > > dd if=/dev/sdN iflag=direct of=/dev/null bs=1G count=1 > > 2. Mass storage (flash memory) performance test > - run below command 10 times and compute the average performance > > dd if=/dev/sdN iflag=direct of=/dev/null bs=1G count=1 > > 3. Webcam streaming performance test > - run simple capture program and get the average frame rate per second > - capture 1500 frames > - program link > > https://github.com/asfaca/Webcam-performance-analyzing-tool > > - video resolution : 4096 X 2160 (4K) at 30 or 24 fps > - device (Logitech Brio) spec url for the highest resolution and fps > > https://support.logitech.com/en_gb/product/brio-stream/specs > > 4. USB Ethernet adapter performance test > - directly connect two linux machines with ethernet cable > - run pktgen of linux kernel and send 1500 bytes packets > - run vnstat to measure the network bandwidth for 180 seconds > > Test machine > > - CPU : Intel i5-7600 @ 3.5GHz > > Test results > > 1. Mass storage (hard drive) performance test > > WD My Passport 2TB (external hard drive) > -------------------------------------------------------------------- > xhci without tasklet | xhci with tasklet > -------------------------------------------------------------------- > 103.667MB/s | 103.692MB/s > -------------------------------------------------------------------- > > 2. Mass storage (flash memory) performance test > > Sandisk Ultra Flair USB 3.0 32GB > -------------------------------------------------------------------- > xhci without tasklet | xhci with tasklet > -------------------------------------------------------------------- > 129.727MB/s | 130.2MB/s > -------------------------------------------------------------------- > > 3. Webcam streaming performance test > > Logitech Brio webcam > -------------------------------------------------------------------- > xhci without tasklet | xhci with tasklet > -------------------------------------------------------------------- > 26.4451 fps | 26.3949 fps > -------------------------------------------------------------------- > > 4. USB Ethernet adapter performance test > > Iptime 1gigabit ethernet adapter (Mediatek RTL8153) > -------------------------------------------------------------------- > xhci without tasklet | xhci with tasklet > -------------------------------------------------------------------- > RX 933.86 Mbit/s | 983.86 Mbit/s > -------------------------------------------------------------------- > TX 830.18 Mbit/s | 882.75 Mbit/s > -------------------------------------------------------------------- > > [1], https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=94dfd7edfd5c9b605caf7b562de7a813d216e011 > [2], https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=428aac8a81058e2303677a8fbf26670229e51d3a > > Signed-off-by: Suwan Kim <suwan.kim027@xxxxxxxxx> > > --- > v2 change: > - Add SS device test results and rewrite the description > --- > drivers/usb/host/xhci-ring.c | 2 -- > drivers/usb/host/xhci.c | 2 +- > 2 files changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c > index 40fa25c4d041..0ede5265e6e2 100644 > --- a/drivers/usb/host/xhci-ring.c > +++ b/drivers/usb/host/xhci-ring.c > @@ -644,10 +644,8 @@ static void xhci_giveback_urb_in_irq(struct xhci_hcd *xhci, > } > xhci_urb_free_priv(urb_priv); > usb_hcd_unlink_urb_from_ep(hcd, urb); > - spin_unlock(&xhci->lock); > trace_xhci_urb_giveback(urb); > usb_hcd_giveback_urb(hcd, urb, status); > - spin_lock(&xhci->lock); > } > > static void xhci_unmap_td_bounce_buffer(struct xhci_hcd *xhci, > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 7fa58c99f126..bb212b4669cf 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -5141,7 +5141,7 @@ static const struct hc_driver xhci_hc_driver = { > * generic hardware linkage > */ > .irq = xhci_irq, > - .flags = HCD_MEMORY | HCD_USB3 | HCD_SHARED, > + .flags = HCD_MEMORY | HCD_USB3 | HCD_SHARED | HCD_BH, > > /* > * basic lifecycle operations > -- > 2.20.1 Hi, I sent this patch a month ago but got no answer. Is there any feedback for this? Please let me know if there are any faults or it needs more tests. Regards Suwan Kim