On 04/12/2018 02:47 AM, Minchan Kim wrote: > On Wed, Apr 11, 2018 at 09:00:07AM +0200, Vlastimil Babka wrote: >> cache_reap() is initially scheduled in start_cpu_timer() via >> schedule_delayed_work_on(). But then the next iterations are scheduled via >> schedule_delayed_work(), i.e. using WORK_CPU_UNBOUND. >> >> Thus since commit ef557180447f ("workqueue: schedule WORK_CPU_UNBOUND work on >> wq_unbound_cpumask CPUs") there is no guarantee the future iterations will run >> on the originally intended cpu, although it's still preferred. I was able to >> demonstrate this with /sys/module/workqueue/parameters/debug_force_rr_cpu. >> IIUC, it may also happen due to migrating timers in nohz context. As a result, >> some cpu's would be calling cache_reap() more frequently and others never. >> >> This patch uses schedule_delayed_work_on() with the current cpu when scheduling >> the next iteration. > > Could you write down part about "so what's the user effect on some condition?". > It would really help to pick up the patch. Ugh, so let's continue the last paragraph with something like: After this patch, cache_reap() executions will always remain on the expected cpu. This can save some memory that could otherwise remain indefinitely in array caches of some cpus or nodes, and prevent waste of cpu cycles by executing cache_reap() too often on other cpus.