Re: [PATCH v9 6/6] drm/i915: Cache last IRQ seqno to reduce IRQ overhead

John Harrison
2016-06-16T12:10:17Z

On 07/06/2016 13:47, Maarten Lankhorst wrote:
> Op 01-06-16 om 19:07 schreef John.C.Harrison@Intel.com:
>> From: John Harrison <John.C.Harrison@Intel.com>
>>
>> The notify function can be called many times without the seqno
>> changing. Some are to prevent races due to the requirement of not
>> enabling interrupts until requested. However, when interrupts are
>> enabled the IRQ handler can be called multiple times without the
>> ring's seqno value changing. E.g. two interrupts are generated by
>> batch buffers completing in quick succession, the first call to the
>> handler processes both completions but the handler still gets executed
>> a second time. This patch reduces the overhead of these extra calls by
>> caching the last processed seqno value and early exiting if it has not
>> changed.
> How significant is this overhead?
Doing the cache check hits the early exit approx 98% of the time when
running GLBenchmark. Although the vast majority of duplicate calls are
from having to call the notify function from
i915_gem_retire_requests_ring() and that being called at least once for
every execbuf IOCTL (possibly multiple times). I have just made a couple
of tweaks to further reduce the number of these calls and their impact,
but there are still a lot of them.

>
> Patch looks reasonable otherwise.
>
> ~Maarten