[Intel-gfx] [PATCH v2 1/9] drm/i915/perf: store the associated engine of a stream

Lionel Landwerlin lionel.g.landwerlin at intel.com
Wed Oct 9 14:15:55 UTC 2019


On 09/10/2019 17:10, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-10-09 14:48:42)
>> On 09/10/2019 16:40, Chris Wilson wrote:
>>> Quoting Lionel Landwerlin (2019-10-09 14:34:49)
>>>> On 09/10/2019 15:45, Chris Wilson wrote:
>>>>> Quoting Lionel Landwerlin (2019-10-09 13:43:32)
>>>>>> Do you have branch somewhere with this series?
>>>>> https://cgit.freedesktop.org/~ickle/linux-2.6/log/?h=wip-perf
>>>>> -Chris
>>>>>
>>>> Cheers,
>>>>
>>>>
>>>> I've modified the top patch to set the nopreempt flag for as long as the
>>>> context has been flagged (as long at the perf stream is opened) :
>>>> https://github.com/djdeath/linux/commit/d3327b30c6141fac98a3d46f3398c87fe70976aa
>>> That means you are not passing in the ext_perf_config to every batch that
>>> is using it, right? The oa_config tracking also hinges on that you do.
>>> -Chris
>>>
>> Like I mentioned, there are empty batch to drain the context that we
>> emit without OA reconfiguration.
>>
>> There could also be a sequence such as :
>>
>>       - batch0 (includes perf query config=42)
>>
>>       - batch1 (no perf query, includes timestamp or pipeline query)
> But this execbuf is not using the oa_config, so why should it?


I was just working about the problem I guess.

With the patch you sent earlier to not merge request with different 
flags, that's probably useless.


>   The
> direction you've suggested is that we should attach the perf state to
> the context.
>
> eb_oa_config():
> 	struct i915_perf_stream *stream;
>
> 	/* attached/removed by perf_ioctl */
> 	stream = rcu_get(eb->gem_context->perf);
> 	if (!stream)
> 		return;
>
> 	if (stream->oa_config != stream->perf->oa_config) {
> 		mutex_lock(&perf->lock);
> 		...
> 		mutex_unlock(&perf->lock);
> 	}
>
> 	if (stream->hold_preemption)
> 		eb->request->flags |= NOPREEMPT;
> 	
> 	i915_perf_stream_put(stream);
>
> Then instead of an execbuf extension it would either be a perf ioctl to
> update the oa_config on the attached specified context, or a context
> param. Using the perf ioctl does not seem amiss.
>
>>       - batch2 (includes perf query config=42)
>>
>>       - batch3 (includes perf query config=43)
>>
>>
>> It sounds reasonable to ensure that all the requests are flagged with
>> nopreempt to ensure we don't preempt one because we don't have
>> visibility on what's completed when reloading the execlists ports.
>>
>> This entire sequence above would be surrounded by open/close of the perf
>> stream. Once close() returns, then any new request won't be flagged with
>> nopreempt but it's the application's responsability to have collected
>> all the queries' results before closing the stream.
> Are you happy with associating the i915_perf_stream with the
> specific_ctx and controlling all the parameters via perf-ioctl?
> -Chris
>

Yeah sounds like it should work, I would like to test the whole setup.

If you can share the patches changing the config through a perf stream 
ioctl, I'll update my driver and test.


Thanks a lot,


-Lionel



More information about the Intel-gfx mailing list