From: Jens Axboe <axboe@kernel.dk>
To: Chris Wilson <chris@chris-wilson.co.uk>,
intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org,
Daniel Vetter <daniel.vetter@ffwll.ch>,
Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
Eero Tamminen <eero.t.tamminen@intel.com>,
"Rantala, Valtteri" <valtteri.rantala@intel.com>,
stable@kernel.vger.org
Subject: Re: [PATCH 2/2] drm/i915: Limit the busy wait on requests to 2us not 10ms!
Date: Mon, 16 Nov 2015 09:48:09 -0700 [thread overview]
Message-ID: <564A08C9.8090508@kernel.dk> (raw)
In-Reply-To: <1447594364-4206-2-git-send-email-chris@chris-wilson.co.uk>
On 11/15/2015 06:32 AM, Chris Wilson wrote:
> When waiting for high frequency requests, the finite amount of time
> required to set up the irq and wait upon it limits the response rate. By
> busywaiting on the request completion for a short while we can service
> the high frequency waits as quick as possible. However, if it is a slow
> request, we want to sleep as quickly as possible. The tradeoff between
> waiting and sleeping is roughly the time it takes to sleep on a request,
> on the order of a microsecond. Based on measurements from big core, I
> have set the limit for busywaiting as 2 microseconds.
>
> The code currently uses the jiffie clock, but that is far too coarse (on
> the order of 10 milliseconds) and results in poor interactivity as the
> CPU ends up being hogged by slow requests. To get microsecond resolution
> we need to use a high resolution timer. The cheapest of which is polling
> local_clock(), but that is only valid on the same CPU. If we switch CPUs
> because the task was preempted, we can also use that as an indicator that
> the system is too busy to waste cycles on spinning and we should sleep
> instead.
I tried this (1+2), and it feels better. However, I added some counters
just to track how well it's faring:
[ 491.077612] i915: invoked=7168, success=50
so out of 6144 invocations, we only avoided going to sleep 49 of those
times. As a percentage, that's 99.3% of the time we spun 2usec for no
good reason other than to burn up more of my battery. So the reason
there's an improvement for me is that we're just not spinning the 10ms
anymore, however we're still just wasting time for my use case.
I'd recommend putting this behind some option so that people can enable
it and play with it if they want, but not making it default to on until
some more clever tracking has been added to dynamically adapt to on when
to poll and when not to. It should not be a default-on type of thing
until it's closer to doing the right thing for a normal workload, not
just some synthetic benchmark.
--
Jens Axboe
next prev parent reply other threads:[~2015-11-16 16:48 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-15 13:32 [PATCH 1/2] drm/i915: Break busywaiting for requests on pending signals Chris Wilson
2015-11-15 13:32 ` [PATCH 2/2] drm/i915: Limit the busy wait on requests to 2us not 10ms! Chris Wilson
2015-11-15 17:48 ` Chris Wilson
2015-11-16 10:24 ` Tvrtko Ursulin
2015-11-16 11:12 ` Chris Wilson
2015-11-16 12:08 ` Tvrtko Ursulin
2015-11-16 12:55 ` Chris Wilson
2015-11-16 13:09 ` Tvrtko Ursulin
2015-11-16 13:30 ` [Intel-gfx] " Ville Syrjälä
2015-11-16 16:48 ` Jens Axboe [this message]
2015-11-18 9:56 ` Limit busywaiting Chris Wilson
2015-11-18 9:56 ` [PATCH 1/3] drm/i915: Only spin whilst waiting on the current request Chris Wilson
2015-11-18 17:03 ` Daniel Vetter
2015-11-19 10:05 ` Tvrtko Ursulin
2015-11-19 10:12 ` Chris Wilson
2015-11-18 9:56 ` [PATCH 2/3] drm/i915: Convert __i915_wait_request to receive flags Chris Wilson
2015-11-18 9:56 ` [PATCH 3/3] drm/i915: Limit request busywaiting Chris Wilson
2015-11-19 15:22 ` Daniel Vetter
2015-11-19 16:29 ` Limit busywaiting Jens Axboe
2015-12-03 22:03 ` [PATCH 2/2] drm/i915: Limit the busy wait on requests to 2us not 10ms! Pavel Machek
2015-11-16 9:54 ` [PATCH 1/2] drm/i915: Break busywaiting for requests on pending signals Tvrtko Ursulin
2015-11-16 11:22 ` Chris Wilson
2015-11-16 11:40 ` Tvrtko Ursulin
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=564A08C9.8090508@kernel.dk \
--to=axboe@kernel.dk \
--cc=chris@chris-wilson.co.uk \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=eero.t.tamminen@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@kernel.vger.org \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=valtteri.rantala@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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox