Message ID | 20230831165611.2610118-1-yosryahmed@google.com (mailing list archive) |
---|---|
Headers | show |
Series | memcg: non-unified flushing for userspace stats | expand |
On 8/31/23 12:56, Yosry Ahmed wrote: > Most memcg flushing contexts using "unified" flushing, where only one > flusher is allowed at a time (others skip), and all flushers need to > flush the entire tree. This works well with high concurrency, which > mostly comes from in-kernel flushers (e.g. reclaim, refault, ..). > > For userspace reads, unified flushing leads to non-deterministic stats > staleness and reading cost. This series clarifies and documents the > differences between unified and non-unified flushing (patches 1 & 2), > then opts userspace reads out of unified flushing (patch 3). > > This patch series is a follow up on the discussion in [1]. That was a > patch that proposed that userspace reads wait for ongoing unified > flushers to complete before returning. There were concerns about the > latency that this introduces to userspace reads, especially with ongoing > reports of expensive stat reads even with unified flushing. Hence, this > series follows a different approach, by opting userspace reads out of > unified flushing completely. The cost of userspace reads are now > determinstic, and depend on the size of the subtree being read. This > should fix both the *sometimes* expensive reads (due to flushing the > entire tree) and occasional staless (due to skipping flushing). > > I attempted to remove unified flushing completely, but noticed that > in-kernel flushers with high concurrency (e.g. hundreds of concurrent > reclaimers). This sort of concurrency is not expected from userspace > reads. More details about testing and some numbers in the last patch's > changelog. > > v4 -> v5: > - Fixed build error in the last patch with W=1 because of a missed > 'static'. > > v4: https://lore.kernel.org/lkml/20230830175335.1536008-1-yosryahmed@google.com/ > > Yosry Ahmed (4): > mm: memcg: properly name and document unified stats flushing > mm: memcg: add a helper for non-unified stats flushing > mm: memcg: let non-unified root stats flushes help unified flushes > mm: memcg: use non-unified stats flushing for userspace reads > > include/linux/memcontrol.h | 8 +-- > mm/memcontrol.c | 106 +++++++++++++++++++++++++++---------- > mm/vmscan.c | 2 +- > mm/workingset.c | 4 +- > 4 files changed, 85 insertions(+), 35 deletions(-) > LGTM Acked-by: Waiman Long <longman@redhat.com>