On Tue, Jan 11, 2022 at 11:58:07AM +0100, Christian König wrote:
More and more people are using sysfs/kernfs now for things that it wasAt bare minimum I suggest to use a work_struct instead of re-inventing thatThis is also not a problem due to the high number of DMA-BUF
exports during launch time, as even a single export can be delayed for
an unpredictable amount of time. We cannot eliminate DMA-BUF exports
completely during app-launches and we are unfortunately seeing reports
of the exporting process occasionally sleeping long enough to cause
user-visible jankiness :(
We also looked at whether any optimizations are possible from the
kernfs implementation side[1] but the semaphore is used quite extensively
and it looks like the best way forward would be to remove sysfs
creation/teardown from the DMA-BUF export/release path altogether. We
have some ideas on how we can reduce the code-complexity in the
current patch. If we manage to
simplify it considerably, would the approach of offloading sysfs
creation and teardown into a separate thread be acceptable Christian?
with kthread.
And then only put the exporting of buffers into the background and not the
teardown.
Which is exactly my feeling as well, yes.Thank you for the guidance!One worry I have here with doing this async that now userspace might
have a dma-buf, but the sysfs entry does not yet exist, or the dma-buf
is gone, but the sysfs entry still exists. That's a bit awkward wrt
semantics.
Also I'm pretty sure that if we can hit this, then other subsystems
using kernfs have similar problems, so trying to fix this in kernfs
with slightly more fine-grained locking sounds like a much more solid
approach. The linked patch talks about how the big delays happen due
to direct reclaim, and that might be limited to specific code paths
that we need to look at? As-is this feels a bit much like papering
over kernfs issues in hackish ways in sysfs users, instead of tackling
the problem at its root.
never designed for (i.e. high-speed statistic gathering). That's not
the fault of kernfs, it's the fault of people thinking it can be used
for stuff like that :)
But delays like this is odd, tearing down sysfs attributes should
normally _never_ be a fast-path that matters to system throughput. So
offloading it to a workqueue makes sense as the attributes here are for
objects that are on the fast-path.
thanks,
greg k-h