On 2025/3/31 11:14, Sandeep Dhavale wrote:
Hi Gao,
Do we really need to destroy workers on the last mount?Android devices go through suspend and resume cycles aggressively.
it could cause many unnecessary init/uninit cycles.
Or your requirement is just to defer per-CPU workers to
the first mount?
If your case is the latter, I guess you could just call
erofs_init_percpu_workers() in z_erofs_init_super().
+{
+ if (atomic_dec_and_test(&erofs_mount_count))
So in that case, we won't need erofs_mount_count anymore,
you could just add a pcpu_worker_initialized atomic bool
to control that.
And currently long running traces showed that erofs_workers being
created and destroyed without active erofs mount.
Your suggestion is good and could work for devices which do not use
erofs at all.
But if erofs is used once (and unmounted later),> we will not destroy the percpu workers.
Is there a real use case in Android like this? It
would be really useful to write down something in the
commit message.
Can you please expand a little bit more on your concern
it could cause many unnecessary init/uninit cycles.Did you mean on the cases where only one erofs fs
is mounted at time? Just trying to see if there is a better
way to address your concern.
My concern is that it could slow down the mount time (on
the single mount/unmount) if there are too many CPUs
(especially on the server side.. 96 CPUs or more...)
Or I guess if kworker CPU hotplug is not used at all
for Android if "suspend and resume" latency is really
important, could we just add a mode to always initialize
pcpu kworkers for all possible CPUs.