linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] Add histogram measuring mmap_lock contention latency
@ 2020-05-28 23:52 Axel Rasmussen
  2020-05-29  0:24 ` Steven Rostedt
  2020-05-29  5:32 ` Thomas Gleixner
  0 siblings, 2 replies; 7+ messages in thread
From: Axel Rasmussen @ 2020-05-28 23:52 UTC (permalink / raw)
  To: Andrew Morton, David Rientjes, Davidlohr Bueso, Ingo Molnar,
	Ingo Molnar, Jerome Glisse, Laurent Dufour, Liam R . Howlett,
	Matthew Wilcox, Michel Lespinasse, Peter Zijlstra,
	Vlastimil Babka, Will Deacon
  Cc: linux-fsdevel, linux-kernel, linux-mm, AKASHI Takahiro,
	Aleksa Sarai, Alexander Potapenko, Alexey Dobriyan, Al Viro,
	Andrei Vagin, Ard Biesheuvel, Brendan Higgins, chenqiwu,
	Christian Brauner, Christian Kellner, Corentin Labbe,
	Daniel Jordan, Dan Williams, David Gow, David S. Miller,
	Dmitry V. Levin, Eric W. Biederman, Eugene Syromiatnikov,
	Jamie Liu, Jason Gunthorpe, John Garry, John Hubbard,
	Jonathan Adams, Junaid Shahid, Kees Cook, Kirill A. Shutemov,
	Konstantin Khlebnikov, Krzysztof Kozlowski, Mark Rutland,
	Masahiro Yamada, Masami Hiramatsu, Mathieu Desnoyers,
	Michal Hocko, Mikhail Zaslonko, Petr Mladek, Ralph Campbell,
	Randy Dunlap, Roman Gushchin, Shakeel Butt, Steven Rostedt,
	Tal Gilboa, Thomas Gleixner, Uwe Kleine-König,
	Vincenzo Frascino, Yang Shi, Yu Zhao, Axel Rasmussen

The overall goal of this patchset is to add a latency histogram which measures
`mmap_lock` acquisition time. This is useful to measure the impact of ongoing
work like maple trees and range locks (https://lwn.net/Articles/787629/), and
it is also useful to debug userspace processes which experience long waits due
to lock contention.

This patchset is built upon walken@google.com's new `mmap_lock` API
(https://lkml.org/lkml/2020/4/21/1307). In its current form, it should apply
cleanly to a 5.7-rc7 tree to which Michel's patchset has already been applied.

To summarize the changes being made at a high level:

- Add a histogram library: a `struct histogram` is effectively an array of
  thresholds (i.e., buckets), and an array of per-cpu `u64` counts of the
  number of samples in each bucket.

- Modify Michel's mmap_lock API to record samples in a histogram, owned by the
 `mm_struct`, on each lock acquisition. For contended lock acquisitions, we
 compute the amount of time spent waiting, which determines the bucket.

- For uncontended cases, we still record a sample, but with "0" latency. The
  reasoning for this is, a) we don't want to incur the overhead of actually
  measuring the time, but b) we still want to end up with an accurate count of
  acquisition attempts, as this lets us compute latency percentiles (e.g., "x%
  of lock acquisitions completed in <= y ns").

Changes since v1 (sent to a few folks within Google for initial review):

- Added a tracepoint to the contended case.
- Modified `mmap_write_lock_nested` to split the {un,}contended cases.
- Removed support for having more than one histogram in `mm_struct`.
- Removed any histogram code not explicitly used in this patchset.
- Whitespace cleanups.

Axel Rasmussen (7):
  histogram: add struct histogram
  histogram: add helper function to expose histograms to userspace
  mmap_lock: add a histogram structure to struct mm_struct
  mmap_lock: allocate histogram (if enabled) in mm_init
  mmap_lock: add /proc/<pid>/mmap_lock_contention interface
  mmap_lock: increment histogram whenever mmap_lock is acquired
  mmap_lock: add a tracepoint to contended acquisitions

 fs/proc/base.c                   |  25 +++
 include/linux/histogram.h        | 293 +++++++++++++++++++++++++++++++
 include/linux/mm_types.h         |  11 ++
 include/linux/mmap_lock.h        |  92 +++++++++-
 include/trace/events/mmap_lock.h |  34 ++++
 kernel/fork.c                    |  55 ++++++
 kernel/locking/rwsem.c           |   4 +-
 lib/Kconfig                      |   3 +
 lib/Makefile                     |   2 +
 lib/histogram.c                  | 212 ++++++++++++++++++++++
 mm/Kconfig                       |  13 ++
 mm/Makefile                      |   1 +
 mm/mmap_lock.c                   |  46 +++++
 13 files changed, 782 insertions(+), 9 deletions(-)
 create mode 100644 include/linux/histogram.h
 create mode 100644 include/trace/events/mmap_lock.h
 create mode 100644 lib/histogram.c
 create mode 100644 mm/mmap_lock.c

--
2.27.0.rc0.183.gde8f92d652-goog



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

end of thread, other threads:[~2020-05-29 22:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-28 23:52 [PATCH v2 0/7] Add histogram measuring mmap_lock contention latency Axel Rasmussen
2020-05-29  0:24 ` Steven Rostedt
2020-05-29  1:39   ` Axel Rasmussen
2020-05-29  8:09     ` Peter Zijlstra
2020-05-29 15:03       ` Masami Hiramatsu
2020-05-29 22:38         ` Axel Rasmussen
2020-05-29  5:32 ` Thomas Gleixner

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