linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] fold per-CPU vmstats remotely
@ 2023-02-01 19:50 Marcelo Tosatti
  2023-02-01 19:50 ` [PATCH 1/5] mm/vmstat: remove remote node draining Marcelo Tosatti
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Marcelo Tosatti @ 2023-02-01 19:50 UTC (permalink / raw)
  To: Christoph Lameter
  Cc: Aaron Tomlin, Frederic Weisbecker, Andrew Morton, linux-kernel, linux-mm

This patch series addresses the following two problems:

    1. A customer provided some evidence which indicates that
       the idle tick was stopped; albeit, CPU-specific vmstat
       counters still remained populated.

       Thus one can only assume quiet_vmstat() was not
       invoked on return to the idle loop. If I understand
       correctly, I suspect this divergence might erroneously
       prevent a reclaim attempt by kswapd. If the number of
       zone specific free pages are below their per-cpu drift
       value then zone_page_state_snapshot() is used to
       compute a more accurate view of the aforementioned
       statistic.  Thus any task blocked on the NUMA node
       specific pfmemalloc_wait queue will be unable to make
       significant progress via direct reclaim unless it is
       killed after being woken up by kswapd
       (see throttle_direct_reclaim())

    2. With a SCHED_FIFO task that busy loops on a given CPU,
       and kworker for that CPU at SCHED_OTHER priority,
       queuing work to sync per-vmstats will either cause that
       work to never execute, or stalld (i.e. stall daemon)
       boosts kworker priority which causes a latency
       violation

By having vmstat_shepherd flush the per-CPU counters to the
global counters from remote CPUs.

This is done using cmpxchg to manipulate the counters,
both CPU locally (via the account functions),
and remotely (via cpu_vm_stats_fold).

Thanks to Aaron Tomlin for diagnosing issue 1 and writing
the initial patch series.

 include/linux/mmzone.h |    3 
 mm/vmstat.c            |  424 ++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------
 2 files changed, 230 insertions(+), 197 deletions(-)





^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-02-06 19:19 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-01 19:50 [PATCH 0/5] fold per-CPU vmstats remotely Marcelo Tosatti
2023-02-01 19:50 ` [PATCH 1/5] mm/vmstat: remove remote node draining Marcelo Tosatti
2023-02-01 19:50 ` [PATCH 2/5] mm/vmstat: switch counter modification to cmpxchg Marcelo Tosatti
2023-02-01 19:50 ` [PATCH 3/5] mm/vmstat: use cmpxchg loop in cpu_vm_stats_fold Marcelo Tosatti
2023-02-02 14:38   ` Christoph Lameter
2023-02-02 15:54     ` Marcelo Tosatti
2023-02-03  9:34       ` Christoph Lameter
2023-02-03 18:52         ` Marcelo Tosatti
2023-02-06  9:42           ` Christoph Lameter
2023-02-06 19:10             ` Marcelo Tosatti
2023-02-06 19:19   ` Matthew Wilcox
2023-02-01 19:50 ` [PATCH 4/5] mm/vmstat: switch vmstat shepherd to flush per-CPU counters remotely Marcelo Tosatti
2023-02-01 19:50 ` [PATCH 5/5] mm/vmstat: refresh stats remotely instead of via work item Marcelo Tosatti

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox