[RFC PATCH 0/1] Add AMDGPU_INFO_GUILTY_APP ioctl
Marek Olšák
maraeo at gmail.com
Thu May 4 01:13:26 UTC 2023
On Wed, May 3, 2023, 14:53 André Almeida <andrealmeid at igalia.com> wrote:
> Em 03/05/2023 14:08, Marek Olšák escreveu:
> > GPU hangs are pretty common post-bringup. They are not common per user,
> > but if we gather all hangs from all users, we can have lots and lots of
> > them.
> >
> > GPU hangs are indeed not very debuggable. There are however some things
> > we can do:
> > - Identify the hanging IB by its VA (the kernel should know it)
>
> How can the kernel tell which VA range is being executed? I only found
> that information at mmCP_IB1_BASE_ regs, but as stated in this thread by
> Christian this is not reliable to be read.
>
The kernel receives the VA and the size via the CS ioctl. When user queues
are enabled, the kernel will no longer receive them.
> > - Read and parse the IB to detect memory corruption.
> > - Print active waves with shader disassembly if SQ isn't hung (often
> > it's not).
> >
> > Determining which packet the CP is stuck on is tricky. The CP has 2
> > engines (one frontend and one backend) that work on the same command
> > buffer. The frontend engine runs ahead, executes some packets and
> > forwards others to the backend engine. Only the frontend engine has the
> > command buffer VA somewhere. The backend engine only receives packets
> > from the frontend engine via a FIFO, so it might not be possible to tell
> > where it's stuck if it's stuck.
>
> Do they run at the same asynchronously or does the front end waits the
> back end to execute?
>
They run asynchronously and should run asynchronously for performance, but
they can be synchronized using a special packet (PFP_SYNC_ME).
Marek
> >
> > When the gfx pipeline hangs outside of shaders, making a scandump seems
> > to be the only way to have a chance at finding out what's going wrong,
> > and only AMD-internal versions of hw can be scanned.
> >
> > Marek
> >
> > On Wed, May 3, 2023 at 11:23 AM Christian König
> > <ckoenig.leichtzumerken at gmail.com
> > <mailto:ckoenig.leichtzumerken at gmail.com>> wrote:
> >
> > Am 03.05.23 um 17:08 schrieb Felix Kuehling:
> > > Am 2023-05-03 um 03:59 schrieb Christian König:
> > >> Am 02.05.23 um 20:41 schrieb Alex Deucher:
> > >>> On Tue, May 2, 2023 at 11:22 AM Timur Kristóf
> > >>> <timur.kristof at gmail.com <mailto:timur.kristof at gmail.com>>
> wrote:
> > >>>> [SNIP]
> > >>>>>>>> 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.
> > >>>>>>>>
> > >>>>>>> The fundamental problem here is that the kernel doesn't
> have
> > >>>>>>> that
> > >>>>>>> information either. We know which IB timed out and can
> > >>>>>>> potentially do
> > >>>>>>> a devcoredump when that happens, but that's it.
> > >>>>>>
> > >>>>>> Is it really not possible to know such a fundamental thing
> > as what
> > >>>>>> the
> > >>>>>> GPU was doing when it hung? How are we supposed to do any
> > kind of
> > >>>>>> debugging without knowing that?
> > >>
> > >> Yes, that's indeed something at least I try to figure out for
> years
> > >> as well.
> > >>
> > >> Basically there are two major problems:
> > >> 1. When the ASIC is hung you can't talk to the firmware engines
> any
> > >> more and most state is not exposed directly, but just through
> some
> > >> fw/hw interface.
> > >> Just take a look at how umr reads the shader state from the
> SQ.
> > >> When that block is hung you can't do that any more and basically
> > have
> > >> no chance at all to figure out why it's hung.
> > >>
> > >> Same for other engines, I remember once spending a week
> > figuring
> > >> out why the UVD block is hung during suspend. Turned out to be a
> > >> debugging nightmare because any time you touch any register of
> that
> > >> block the whole system would hang.
> > >>
> > >> 2. There are tons of things going on in a pipeline fashion or
> even
> > >> completely in parallel. For example the CP is just the beginning
> > of a
> > >> rather long pipeline which at the end produces a bunch of pixels.
> > >> In almost all cases I've seen you ran into a problem
> somewhere
> > >> deep in the pipeline and only very rarely at the beginning.
> > >>
> > >>>>>>
> > >>>>>> I wonder what AMD's Windows driver team is doing with this
> > problem,
> > >>>>>> surely they must have better tools to deal with GPU hangs?
> > >>>>> For better or worse, most teams internally rely on scan dumps
> via
> > >>>>> JTAG
> > >>>>> which sort of limits the usefulness outside of AMD, but also
> > gives
> > >>>>> you
> > >>>>> the exact state of the hardware when it's hung so the
> > hardware teams
> > >>>>> prefer it.
> > >>>>>
> > >>>> How does this approach scale? It's not something we can ask
> > users to
> > >>>> do, and even if all of us in the radv team had a JTAG device,
> we
> > >>>> wouldn't be able to play every game that users experience
> > random hangs
> > >>>> with.
> > >>> It doesn't scale or lend itself particularly well to external
> > >>> development, but that's the current state of affairs.
> > >>
> > >> The usual approach seems to be to reproduce a problem in a lab
> and
> > >> have a JTAG attached to give the hw guys a scan dump and they can
> > >> then tell you why something didn't worked as expected.
> > >
> > > That's the worst-case scenario where you're debugging HW or FW
> > issues.
> > > Those should be pretty rare post-bringup. But are there hangs
> caused
> > > by user mode driver or application bugs that are easier to debug
> and
> > > probably don't even require a GPU reset? For example most VM
> faults
> > > can be handled without hanging the GPU. Similarly, a shader in an
> > > endless loop should not require a full GPU reset. In the KFD
> compute
> > > case, that's still preemptible and the offending process can be
> > killed
> > > with Ctrl-C or debugged with rocm-gdb.
> >
> > We also have infinite loop in shader abort for gfx and page faults
> are
> > pretty rare with OpenGL (a bit more often with Vulkan) and can be
> > handled gracefully on modern hw (they just spam the logs).
> >
> > The majority of the problems is unfortunately that we really get hard
> > hangs because of some hw issues. That can be caused by unlucky
> timing,
> > power management or doing things in an order the hw doesn't expected.
> >
> > Regards,
> > Christian.
> >
> > >
> > > It's more complicated for graphics because of the more complex
> > > pipeline and the lack of CWSR. But it should still be possible to
> do
> > > some debugging without JTAG if the problem is in SW and not HW or
> > FW.
> > > It's probably worth improving that debugability without getting
> > > hung-up on the worst case.
> > >
> > > Maybe user mode graphics queues will offer a better way of
> > recovering
> > > from these kinds of bugs, if the graphics pipeline can be unstuck
> > > without a GPU reset, just by killing the offending user mode
> queue.
> > >
> > > Regards,
> > > Felix
> > >
> > >
> > >>
> > >> And yes that absolutely doesn't scale.
> > >>
> > >> Christian.
> > >>
> > >>>
> > >>> Alex
> > >>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230503/af05d1ac/attachment.htm>
More information about the dri-devel
mailing list