From: Douglas Anderson <dianders@chromium.org> To: John Youn <John.Youn@synopsys.com>, balbi@ti.com Cc: "Yunzhi Li" <lyz@rock-chips.com>, "Heiko Stübner" <heiko@sntech.de>, linux-rockchip@lists.infradead.org, "Julius Werner" <jwerner@chromium.org>, gregory.herrero@intel.com, yousaf.kaukab@intel.com, dinguyen@opensource.altera.com, "Douglas Anderson" <dianders@chromium.org>, johnyoun@synopsys.com, gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 0/3] dwc2: Speed up the interrupt handler quite a bit Date: Wed, 4 Nov 2015 14:53:02 -0800 [thread overview] Message-ID: <1446677585-28582-1-git-send-email-dianders@chromium.org> (raw) The dwc2 interrupt handler is quite slow. On rk3288 with a few things plugged into the ports and with cpufreq locked at 696MHz (to simulate real world idle system), I can easily observe dwc2_handle_hcd_intr() taking > 120 us, sometimes > 150 us. Note that SOF interrupts come every 125 us with high speed USB, so taking > 120 us in the interrupt handler is a big deal. The patches here will speed up the interrupt controller significantly. After this series, I have a hard time seeing the interrupt controller taking > 20 us and I don't ever see it taking > 30 us ever in my tests unless I bring the cpufreq back down. With the cpufreq at 126 MHz I can still see the interrupt handler take > 50 us, so I'm sure we could improve this further. ...but hey, it's a start. In addition to the speedup, this series also has the advantage of simplifying dwc2 and making it more like everyone else (introducing the possibility of future simplifications). Picking this series up will help your diffstat and likely win you friends. ;) === Steps for gathering data with ftrace: cd /sys/devices/system/cpu/cpu0/cpufreq/ echo userspace > scaling_governor echo 696000 > scaling_setspeed cd /sys/kernel/debug/tracing echo 0 > tracing_on echo "" > trace echo nop > current_tracer echo function_graph > current_tracer echo dwc2_handle_hcd_intr > set_graph_function echo dwc2_handle_common_intr >> set_graph_function echo dwc2_handle_hcd_intr > set_ftrace_filter echo dwc2_handle_common_intr >> set_ftrace_filter echo funcgraph-abstime > trace_options echo 70 > tracing_thresh echo 1 > /sys/kernel/debug/tracing/tracing_on sleep 2 cat trace === NOTE: This series doesn't replace any other patches I've submitted recently, it merely adds another set of changes that upstream could benefit from. Douglas Anderson (3): usb: dwc2: rockchip: Make the max_transfer_size automatic usb: dwc2: host: Giveback URB in tasklet context usb: dwc2: host: Get aligned DMA in a more supported way drivers/usb/dwc2/core.c | 21 +----- drivers/usb/dwc2/hcd.c | 170 ++++++++++++++++++++----------------------- drivers/usb/dwc2/hcd.h | 10 --- drivers/usb/dwc2/hcd_intr.c | 65 ----------------- drivers/usb/dwc2/hcd_queue.c | 7 +- drivers/usb/dwc2/platform.c | 2 +- 6 files changed, 85 insertions(+), 190 deletions(-) -- 2.6.0.rc2.230.g3dd15c0
WARNING: multiple messages have this Message-ID (diff)
From: Douglas Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> To: John Youn <John.Youn-HKixBCOQz3hWk0Htik3J/w@public.gmane.org>, balbi-l0cyMroinI0@public.gmane.org Cc: "Yunzhi Li" <lyz-TNX95d0MmH7DzftRWevZcw@public.gmane.org>, "Heiko Stübner" <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, "Julius Werner" <jwerner-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>, gregory.herrero-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, yousaf.kaukab-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, dinguyen-yzvPICuk2ABMcg4IHK0kFoH6Mc4MB0Vx@public.gmane.org, "Douglas Anderson" <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>, johnyoun-HKixBCOQz3hWk0Htik3J/w@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [PATCH 0/3] dwc2: Speed up the interrupt handler quite a bit Date: Wed, 4 Nov 2015 14:53:02 -0800 [thread overview] Message-ID: <1446677585-28582-1-git-send-email-dianders@chromium.org> (raw) The dwc2 interrupt handler is quite slow. On rk3288 with a few things plugged into the ports and with cpufreq locked at 696MHz (to simulate real world idle system), I can easily observe dwc2_handle_hcd_intr() taking > 120 us, sometimes > 150 us. Note that SOF interrupts come every 125 us with high speed USB, so taking > 120 us in the interrupt handler is a big deal. The patches here will speed up the interrupt controller significantly. After this series, I have a hard time seeing the interrupt controller taking > 20 us and I don't ever see it taking > 30 us ever in my tests unless I bring the cpufreq back down. With the cpufreq at 126 MHz I can still see the interrupt handler take > 50 us, so I'm sure we could improve this further. ...but hey, it's a start. In addition to the speedup, this series also has the advantage of simplifying dwc2 and making it more like everyone else (introducing the possibility of future simplifications). Picking this series up will help your diffstat and likely win you friends. ;) === Steps for gathering data with ftrace: cd /sys/devices/system/cpu/cpu0/cpufreq/ echo userspace > scaling_governor echo 696000 > scaling_setspeed cd /sys/kernel/debug/tracing echo 0 > tracing_on echo "" > trace echo nop > current_tracer echo function_graph > current_tracer echo dwc2_handle_hcd_intr > set_graph_function echo dwc2_handle_common_intr >> set_graph_function echo dwc2_handle_hcd_intr > set_ftrace_filter echo dwc2_handle_common_intr >> set_ftrace_filter echo funcgraph-abstime > trace_options echo 70 > tracing_thresh echo 1 > /sys/kernel/debug/tracing/tracing_on sleep 2 cat trace === NOTE: This series doesn't replace any other patches I've submitted recently, it merely adds another set of changes that upstream could benefit from. Douglas Anderson (3): usb: dwc2: rockchip: Make the max_transfer_size automatic usb: dwc2: host: Giveback URB in tasklet context usb: dwc2: host: Get aligned DMA in a more supported way drivers/usb/dwc2/core.c | 21 +----- drivers/usb/dwc2/hcd.c | 170 ++++++++++++++++++++----------------------- drivers/usb/dwc2/hcd.h | 10 --- drivers/usb/dwc2/hcd_intr.c | 65 ----------------- drivers/usb/dwc2/hcd_queue.c | 7 +- drivers/usb/dwc2/platform.c | 2 +- 6 files changed, 85 insertions(+), 190 deletions(-) -- 2.6.0.rc2.230.g3dd15c0 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
next reply other threads:[~2015-11-04 22:53 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-11-04 22:53 Douglas Anderson [this message] 2015-11-04 22:53 ` [PATCH 0/3] dwc2: Speed up the interrupt handler quite a bit Douglas Anderson 2015-11-04 22:53 ` [PATCH 1/3] usb: dwc2: rockchip: Make the max_transfer_size automatic Douglas Anderson 2015-11-04 22:53 ` [PATCH 2/3] usb: dwc2: host: Giveback URB in tasklet context Douglas Anderson 2015-11-04 22:53 ` Douglas Anderson 2015-11-05 0:30 ` Doug Anderson 2015-11-05 0:30 ` Doug Anderson 2015-11-05 15:19 ` Alan Stern 2015-11-06 0:29 ` Doug Anderson 2015-11-06 15:40 ` Alan Stern 2015-11-07 1:26 ` Doug Anderson 2015-11-07 15:09 ` Alan Stern 2015-11-04 22:53 ` [PATCH 3/3] usb: dwc2: host: Get aligned DMA in a more supported way Douglas Anderson 2015-11-05 19:18 ` [PATCH 0/3] dwc2: Speed up the interrupt handler quite a bit Heiko Stuebner 2015-11-05 19:18 ` Heiko Stuebner
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1446677585-28582-1-git-send-email-dianders@chromium.org \ --to=dianders@chromium.org \ --cc=John.Youn@synopsys.com \ --cc=balbi@ti.com \ --cc=dinguyen@opensource.altera.com \ --cc=gregkh@linuxfoundation.org \ --cc=gregory.herrero@intel.com \ --cc=heiko@sntech.de \ --cc=johnyoun@synopsys.com \ --cc=jwerner@chromium.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rockchip@lists.infradead.org \ --cc=linux-usb@vger.kernel.org \ --cc=lyz@rock-chips.com \ --cc=yousaf.kaukab@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.