On Mon, Mar 21, 2022 at 2:30 AM Christian König <christian.koenig@xxxxxxx> wrote: > > Am 18.03.22 um 16:12 schrieb Rob Clark: > > On Fri, Mar 18, 2022 at 12:42 AM Christian König > > <christian.koenig@xxxxxxx> wrote: > >> Am 17.03.22 um 18:31 schrieb Rob Clark: > >>> On Thu, Mar 17, 2022 at 10:27 AM Daniel Vetter <daniel@xxxxxxxx> wrote: > >>>> [SNIP] > >>>>> (At some point, I'd like to use scheduler for the replay, and actually > >>>>> use drm_sched_stop()/etc.. but last time I looked there were still > >>>>> some sched bugs in that area which prevented me from deleting a bunch > >>>>> of code ;-)) > >>>> Not sure about your hw, but at least on intel replaying tends to just > >>>> result in follow-on fun. And that holds even more so the more complex a > >>>> workload is. This is why vk just dies immediately and does not try to > >>>> replay anything, offloading it to the app. Same with arb robusteness. > >>>> Afaik it's really only media and classic gl which insist that the driver > >>>> stack somehow recover. > >>> At least for us, each submit must be self-contained (ie. not rely on > >>> previous GPU hw state), so in practice replay works out pretty well. > >>> The worst case is subsequent submits from same process fail as well > >>> (if they depended on something that crashing submit failed to write > >>> back to memory.. but in that case they just crash as well and we move > >>> on to the next one.. the recent gens (a5xx+ at least) are pretty good > >>> about quickly detecting problems and giving us an error irq. > >> Well I absolutely agree with Daniel. > >> > >> The whole replay thing AMD did in the scheduler is an absolutely mess > >> and should probably be killed with fire. > >> > >> I strongly recommend not to do the same mistake in other drivers. > >> > >> If you want to have some replay feature then please make it driver > >> specific and don't use anything from the infrastructure in the DRM > >> scheduler. > > hmm, perhaps I was not clear, but I'm only talking about re-emitting > > jobs *following* the faulting one (which could be from other contexts, > > etc).. not trying to restart the faulting job. > > > > You *absolutely* need to replay jobs following the faulting one, they > > could be from unrelated contexts/processes. You can't just drop them > > on the floor. > > Well you can, it just means that their contexts are lost as well. Which is rather inconvenient when deqp-egl reset tests, for example, take down your compositor ;-) (Which for even more lolz, in CrOS restarts the android container or vm.. which makes running android-cts deqp kinda funny) > If you re-submit jobs which were already pushed to the hardware you > absolutely need to make a couple of things sure: > > 1. Don't race with your hardware. E.g. you need a way to stop processing > in case of a timeout and then double check once more if things haven't > finished in the meantime. > > 2. Make absolutely sure you never re-submit an operation when it's > dma-fence is already signaled. Otherwise you run into memory corruption. > > 3. When you have multiple engines it becomes really tricky because then > even innocent jobs might have already been started on different queues > which now hang. We force power-off/on the GPU to reset it which is a pretty good way to make sure we aren't racing with the GPU. It's worked like this since pretty much the beginning, and in the early days of bringing up mesa support for a new gen we tend to exercise the gpu hang/recovery path quite a lot.. so it at least seems pretty robust ;-) BR, -R > > > Currently it is all driver specific, but I wanted to delete a lot of > > code and move to using scheduler to handle faults/timeouts (but > > blocked on that until [1] is resolved) > > Please don't. > > Especially don't use the pending_list or any of the scheduler > infrastructure for GPU reset. We need to get rid of that again sooner or > later. > > This is extremely hardware dependent and pushing the amdgpu specific > handling into the GPU scheduler was a mistake we shouldn't repeat for > other drivers. > > Regards, > Christian. > > > > > [1] https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.kernel.org%2Fproject%2Fdri-devel%2Fpatch%2F1630457207-13107-2-git-send-email-Monk.Liu%40amd.com%2F&data=04%7C01%7Cchristian.koenig%40amd.com%7C1f6ddc253f9341231fa108da08f1afa9%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637832131381866493%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=e%2F1tOh3nxH3QfzKQKiJKjCU7Z5S6haX07F8rzwZhRVY%3D&reserved=0 > > > > BR, > > -R > > > >> Thanks, > >> Christian. > >> > >>> BR, > >>> -R > >>> > >>>> And recovering from a mess in userspace is a lot simpler than trying to > >>>> pull of the same magic in the kernel. Plus it also helps with a few of the > >>>> dma_fence rules, which is a nice bonus. > >>>> -Daniel > >>>> >