<div dir="auto"><div>Hi Christian,<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Christian König <<a href="mailto:christian.koenig@amd.com">christian.koenig@amd.com</a>> ezt írta (időpont: 2023. máj. 2., Ke 9:59):<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 02.05.23 um 03:26 schrieb André Almeida:<br>
> Em 01/05/2023 16:24, Alex Deucher escreveu:<br>
>> On Mon, May 1, 2023 at 2:58 PM André Almeida <<a href="mailto:andrealmeid@igalia.com" target="_blank" rel="noreferrer">andrealmeid@igalia.com</a>> <br>
>> wrote:<br>
>>><br>
>>> I know that devcoredump is also used for this kind of information, <br>
>>> but I believe<br>
>>> that using an IOCTL is better for interfacing Mesa + Linux rather <br>
>>> than parsing<br>
>>> a file that its contents are subjected to be changed.<br>
>><br>
>> Can you elaborate a bit on that? Isn't the whole point of devcoredump<br>
>> to store this sort of information?<br>
>><br>
><br>
> I think that devcoredump is something that you could use to submit to <br>
> a bug report as it is, and then people can read/parse as they want, <br>
> not as an interface to be read by Mesa... I'm not sure that it's <br>
> something that I would call an API. But I might be wrong, if you know <br>
> something that uses that as an API please share.<br>
><br>
> Anyway, relying on that for Mesa would mean that we would need to <br>
> ensure stability for the file content and format, making it less <br>
> flexible to modify in the future and probe to bugs, while the IOCTL is <br>
> well defined and extensible. Maybe the dump from Mesa + devcoredump <br>
> could be complementary information to a bug report.<br>
<br>
Neither using an IOCTL nor devcoredump is a good approach for this since <br>
the values read from the hw register are completely unreliable. They <br>
could not be available because of GFXOFF or they could be overwritten or <br>
not even updated by the CP in the first place because of a hang etc....<br>
<br>
If you want to track progress inside an IB what you do instead is to <br>
insert intermediate fence write commands into the IB. E.g. something <br>
like write value X to location Y when this executes.<br>
<br>
This way you can not only track how far the IB processed, but also in <br>
which stages of processing we where when the hang occurred. E.g. End of <br>
Pipe, End of Shaders, specific shader stages etc...<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Currently our biggest challenge in the userspace driver is debugging "random" GPU hangs. We have many dozens of bug reports from users which are like: "play the game for X hours and it will eventually hang the GPU". With the currently available tools, it is impossible for us to tackle these issues. André's proposal would be a step in improving this situation.</div><div dir="auto"><br></div><div dir="auto">We already do something like what you suggest, but there are multiple problems with that approach:</div><div dir="auto"><br></div><div dir="auto">1. we can only submit 1 command buffer at a time because we won't know which IB hanged</div><div dir="auto">2. we can't use chaining because we don't know where in the IB it hanged</div><div dir="auto">3. it needs userspace to insert (a lot of) extra commands such as extra synchronization and memory writes</div><div dir="auto">4. It doesn't work when GPU recovery is enabled because the information is already gone when we detect the hang<br></div><div dir="auto"><br></div><div dir="auto">Consequences:</div><div dir="auto"><br></div><div dir="auto">A. It has a huge perf impact, so we can't enable it always</div><div dir="auto">B. Thanks to the extra synchronization, some issues can't be reproduced when this kind of debugging is enabled</div><div dir="auto">C. We have to ask users to disable GPU recovery to collect logs for us</div><div dir="auto"><br></div><div dir="auto">In my opinion, the correct solution to those problems would be if the kernel could give userspace the necessary information about a GPU hang before a GPU reset. To avoid the massive peformance cost, it would be best if we could know which IB hung and what were the commands being executed when it hung (perhaps pointers to the VA of the commands), along with which shaders were in flight (perhaps pointers to the VA of the shader binaries).</div><div dir="auto"><br></div><div dir="auto">If such an interface could be created, that would mean we could easily query this information and create useful logs of GPU hangs without much userspace overhead and without requiring the user to disable GPU resets etc.</div><div dir="auto"><br></div><div dir="auto">If it's not possible to do this, we'd appreciate some suggestions on how to properly solve this without the massive performance cost and without requiring the user to disable GPU recovery.</div><div dir="auto"><br></div><div dir="auto">Side note, it is also extremely difficult to even determine whether the problem is in userspace or the kernel. While kernel developers usually dismiss all GPU hangs as userspace problems, we've seen many issues where the problem was in the kernel (eg. bugs where wrong voltages were set, etc.) - any idea for tackling those kind of issues is also welcome.<br></div><div dir="auto"><br></div><div dir="auto">Thanks & best regards,</div><div dir="auto">Timur</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>