All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints
@ 2018-06-28 18:21 ` joel
  0 siblings, 0 replies; 156+ messages in thread
From: Joel Fernandes @ 2018-06-28 18:21 UTC (permalink / raw)
  To: linux-kernel
  Cc: Joel Fernandes (Google),
	Boqun Feng, Byungchul Park, Ingo Molnar, Julia Cartwright,
	linux-kselftest, Masami Hiramatsu, Mathieu Desnoyers,
	Namhyung Kim, Paul McKenney, Peter Zijlstra, Steven Rostedt,
	Thomas Glexiner, Tom Zanussi

From: "Joel Fernandes (Google)" <joel@joelfernandes.org>

This is a posting of v9 preempt/irq tracepoint clean up series rebased
onto v4.18-rc2. No changes in the series, just a rebase + repost.

All patches have a Reviewed-by tags now from reviewers. This series has
been well tested and is a simplification/refactoring of existing code,
along with giving a speed-up for tracepoints using the rcu-idle API.
With this our users will find it easier to use tools depending on
existing preempt tracepoints since it simplifies the configuration for
them.

Future enhancements/fixes I am developing for preempt-off tracer will
depend on these patches, so I suggest prioritizing these well reviewed
and tested patches for that reason as well.

Introduction to the series:
The preempt/irq tracepoints exist but not everything in the kernel is using it
whenever they need to be notified that a preempt disable/enable or an irq
disable/enable has occurred.  This makes things not work simultaneously (for
example, only either lockdep or irqsoff trace-events can be used at a time).

This is particularly painful to deal with, since turning on lockdep breaks
tracers that install probes on IRQ events, such as the BCC atomic critical
section tracer [1]. This constraint also makes it impossible to use synthetic
events to trace irqsoff sections with lockdep simulataneously turned on.

This series solves that, and also results in a nice clean up of relevant parts
of the kernel. Several ifdefs are simpler, and the design is more unified and
better. Also as a result of this, we also speeded performance all rcuidle
tracepoints since their handling is simpler.

[1] https://github.com/iovisor/bcc/blob/master/tools/criticalstat_example.txt

v8->v9:
- Small style changes to tracepoint code (Mathieu)
- Minor style fix to use PTR_ERR_OR_ZERO (0-day bot)
- Minor fix to test_atomic_sections to use unsigned long.
- Added Namhyung's, Mathieu's Reviewed-by to some patches.
- Added Acks from Matsami

v7->v8:
- Refactored irqsoff tracer probe defines (Namhyung)

v6->v7:
- Added a module to simulate an atomic section, a kselftest to load and
  and trigger it which verifies the preempt-tracer and this series.

- Fixed a new warning after I rebased in early boot, this is because
early_boot_irqs_disabled was set too early, I moved it after the lockdep
initialization.

- added back the softirq fix since it appears it wasn't picked up.

- Ran Ingo's locking API selftest suite which are passing with this
  series.

- Mathieu suggested ifdef'ing the tracepoint_synchronize_unregister
  function incase tracepoints aren't enabled, did that.


Joel Fernandes (Google) (6):
  srcu: Add notrace variant of srcu_dereference
  trace/irqsoff: Split reset into separate functions
  tracepoint: Make rcuidle tracepoint callers use SRCU
  tracing: Centralize preemptirq tracepoints and unify their usage
  lib: Add module to simulate atomic sections for testing preemptoff
    tracers
  kselftests: Add tests for the preemptoff and irqsoff tracers

Paul McKenney (1):
  srcu: Add notrace variants of srcu_read_{lock,unlock}

 include/linux/ftrace.h                        |  11 +-
 include/linux/irqflags.h                      |  11 +-
 include/linux/lockdep.h                       |   8 +-
 include/linux/preempt.h                       |   2 +-
 include/linux/srcu.h                          |  22 ++
 include/linux/tracepoint.h                    |  49 +++-
 include/trace/events/preemptirq.h             |  23 +-
 init/main.c                                   |   5 +-
 kernel/locking/lockdep.c                      |  35 +--
 kernel/sched/core.c                           |   2 +-
 kernel/trace/Kconfig                          |  22 +-
 kernel/trace/Makefile                         |   2 +-
 kernel/trace/trace_irqsoff.c                  | 253 ++++++------------
 kernel/trace/trace_preemptirq.c               |  71 +++++
 kernel/tracepoint.c                           |  16 +-
 lib/Kconfig.debug                             |   8 +
 lib/Makefile                                  |   1 +
 lib/test_atomic_sections.c                    |  77 ++++++
 tools/testing/selftests/ftrace/config         |   3 +
 .../test.d/preemptirq/irqsoff_tracer.tc       |  73 +++++
 20 files changed, 453 insertions(+), 241 deletions(-)
 create mode 100644 kernel/trace/trace_preemptirq.c
 create mode 100644 lib/test_atomic_sections.c
 create mode 100644 tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc

-- 
2.18.0.rc2.346.g013aa6912e-goog



^ permalink raw reply	[flat|nested] 156+ messages in thread
* [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints
@ 2018-06-21 22:32 Joel Fernandes
  2018-06-21 22:32   ` joel
  0 siblings, 1 reply; 156+ messages in thread
From: Joel Fernandes @ 2018-06-21 22:32 UTC (permalink / raw)
  To: linux-kernel
  Cc: kernel-team, Joel Fernandes (Google),
	Boqun Feng, Byungchul Park, Erick Reyes, Ingo Molnar,
	Julia Cartwright, linux-kselftest, Masami Hiramatsu,
	Mathieu Desnoyers, Namhyung Kim, Paul McKenney, Peter Zijlstra,
	Shuah Khan, Steven Rostedt, Thomas Glexiner, Todd Kjos,
	Tom Zanussi, Will Deacon

From: "Joel Fernandes (Google)" <joel@joelfernandes.org>

This is a posting of v9 preempt/irq tracepoint clean up series rebased
onto v4.18-rc1. No changes in the series, just a rebase + repost.
Maintainers, this series has been well tested and is a simplification/
refactoring of existing code, along with giving a speed-up for
tracepoints using the rcu-idle API. I'm hoping for your consideration of
this series for the kernel. I am also eager for this so that our users
will find it easier to use tools depending on existing preempt
tracepoints since it simplifies the configuration for them.

All patches now have a Reviewed-by tag except for the kselftest script (7/7).
Peter, Ingo, Steve, others, your feedback and Acks are welcomed.

Introduction to the series:
The preempt/irq tracepoints exist but not everything in the kernel is using it
whenever they need to be notified that a preempt disable/enable or an irq
disable/enable has occurred.  This makes things not work simultaneously (for
example, only either lockdep or irqsoff trace-events can be used at a time).

This is particularly painful to deal with, since turning on lockdep breaks
tracers that install probes on IRQ events, such as the BCC atomic critical
section tracer [2]. This constraint also makes it not possible to use synthetic
events to trace irqsoff sections with lockdep simulataneously turned on.

This series solves that, and also results in a nice clean up of relevant parts
of the kernel. Several ifdefs are simpler, and the design is more unified and
better. Also as a result of this, we also speeded performance all rcuidle
tracepoints since their handling is simpler.

[1] https://lkml.org/lkml/2018/6/7/1135
[2] https://github.com/iovisor/bcc/pull/1801/

v8->v9:
- Small style changes to tracepoint code (Mathieu)
- Minor style fix to use PTR_ERR_OR_ZERO (0-day bot)
- Minor fix to test_atomic_sections to use unsigned long.
- Added Namhyung's, Mathieu's Reviewed-by to some patches.

v7->v8:
- Refactored irqsoff tracer probe defines (Namhyung)

v6->v7:
- Added a module to simulate an atomic section, a kselftest to load and
  and trigger it which verifies the preempt-tracer and this series.

- Fixed a new warning after I rebased in early boot, this is because
early_boot_irqs_disabled was set too early, I moved it after the lockdep
initialization.

- added back the softirq fix since it appears it wasn't picked up.

- Ran Ingo's locking API selftest suite which are passing with this
  series.

- Mathieu suggested ifdef'ing the tracepoint_synchronize_unregister
  function incase tracepoints aren't enabled, did that.

Joel Fernandes (Google) (6):
  srcu: Add notrace variant of srcu_dereference
  trace/irqsoff: Split reset into separate functions
  tracepoint: Make rcuidle tracepoint callers use SRCU
  tracing: Centralize preemptirq tracepoints and unify their usage
  lib: Add module to simulate atomic sections for testing preemptoff
    tracers
  kselftests: Add tests for the preemptoff and irqsoff tracers

Paul McKenney (1):
  srcu: Add notrace variants of srcu_read_{lock,unlock}

 include/linux/ftrace.h                        |  11 +-
 include/linux/irqflags.h                      |  11 +-
 include/linux/lockdep.h                       |   8 +-
 include/linux/preempt.h                       |   2 +-
 include/linux/srcu.h                          |  22 ++
 include/linux/tracepoint.h                    |  49 +++-
 include/trace/events/preemptirq.h             |  23 +-
 init/main.c                                   |   5 +-
 kernel/locking/lockdep.c                      |  35 +--
 kernel/sched/core.c                           |   2 +-
 kernel/trace/Kconfig                          |  22 +-
 kernel/trace/Makefile                         |   2 +-
 kernel/trace/trace_irqsoff.c                  | 253 ++++++------------
 kernel/trace/trace_preemptirq.c               |  71 +++++
 kernel/tracepoint.c                           |  16 +-
 lib/Kconfig.debug                             |   8 +
 lib/Makefile                                  |   1 +
 lib/test_atomic_sections.c                    |  77 ++++++
 tools/testing/selftests/ftrace/config         |   3 +
 .../test.d/preemptirq/irqsoff_tracer.tc       |  74 +++++
 20 files changed, 454 insertions(+), 241 deletions(-)
 create mode 100644 kernel/trace/trace_preemptirq.c
 create mode 100644 lib/test_atomic_sections.c
 create mode 100644 tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc

-- 
2.18.0.rc2.346.g013aa6912e-goog

^ permalink raw reply	[flat|nested] 156+ messages in thread
* [PATCH v9 0/7] Centralize and unify usage of preempt/irq
@ 2018-06-07 20:38 Joel Fernandes
  2018-06-07 20:38   ` joelaf
  0 siblings, 1 reply; 156+ messages in thread
From: Joel Fernandes @ 2018-06-07 20:38 UTC (permalink / raw)
  To: linux-kernel
  Cc: kernel-team, Joel Fernandes (Google),
	Boqun Feng, Byungchul Park, Erick Reyes, Ingo Molnar,
	Julia Cartwright, linux-kselftest, Masami Hiramatsu,
	Mathieu Desnoyers, Namhyung Kim, Paul McKenney, Peter Zijlstra,
	Shuah Khan, Steven Rostedt, Thomas Glexiner, Todd Kjos,
	Tom Zanussi

From: "Joel Fernandes (Google)" <joel@joelfernandes.org>

This is the next (hopefully close to final) revision of preempt/irq tracepoint
centralization and unified usage across the kernel. This revision mostly has
minor style corrections, reviewed-by tag additions and an improvement to the
test module. All patches now have a Reviewed-by tag except for the kselftest
script (patch 7/7). I have also now split out the softirq fix which really
should go into an -rc cycle and is independent of this series (see [1]).

The preempt/irq tracepoints exist but not everything in the kernel is using it
whenever they need to be notified that a preempt disable/enable or an irq
disable enable has occurred.  This makes things not work simultaneously (for
example, only either lockdep or irqsoff trace-events can be used at a time).

This is particular painful to deal with, since turning on lockdep breaks
tracers that install probes on IRQ events, such as the BCC atomic critical
section tracer [2]. This constraint also makes it not possible to use synthetic
events to trace irqsoff sections with lockdep simulataneously turned on.

This series solves that, and also results in a nice clean up of relevant parts
of the kernel. Several ifdefs are simpler, and the design is more unified and
better. Also as a result of this, we also speeded performance all rcuidle
tracepoints since their handling is simpler.

[1] https://lkml.org/lkml/2018/6/7/1135
[2] https://github.com/iovisor/bcc/pull/1801/

v8->v9:
- Small style changes to tracepoint code (Mathieu)
- Minor style fix to use PTR_ERR_OR_ZERO (0-day bot)
- Minor fix to test_atomic_sections to use unsigned long.
- Added Namhyung's, Mathieu's Reviewed-by to some patches.

v7->v8:
- Refactored irqsoff tracer probe defines (Namhyung)

v6->v7:
- Added a module to simulate an atomic section, a kselftest to load and
  and trigger it which verifies the preempt-tracer and this series.

- Fixed a new warning after I rebased in early boot, this is because
early_boot_irqs_disabled was set too early, I moved it after the lockdep
initialization.

- added back the softirq fix since it appears it wasn't picked up.

- Ran Ingo's locking API selftest suite which are passing with this
  series.

- Mathieu suggested ifdef'ing the tracepoint_synchronize_unregister
  function incase tracepoints aren't enabled, did that.

Joel Fernandes (Google) (6):
  srcu: Add notrace variant of srcu_dereference
  trace/irqsoff: Split reset into separate functions
  tracepoint: Make rcuidle tracepoint callers use SRCU
  tracing: Centralize preemptirq tracepoints and unify their usage
  lib: Add module to simulate atomic sections for testing preemptoff
    tracers
  kselftests: Add tests for the preemptoff and irqsoff tracers

Paul McKenney (1):
  srcu: Add notrace variants of srcu_read_{lock,unlock}

 include/linux/ftrace.h                        |  11 +-
 include/linux/irqflags.h                      |  11 +-
 include/linux/lockdep.h                       |   8 +-
 include/linux/preempt.h                       |   2 +-
 include/linux/srcu.h                          |  22 ++
 include/linux/tracepoint.h                    |  49 +++-
 include/trace/events/preemptirq.h             |  23 +-
 init/main.c                                   |   5 +-
 kernel/locking/lockdep.c                      |  35 +--
 kernel/sched/core.c                           |   2 +-
 kernel/trace/Kconfig                          |  22 +-
 kernel/trace/Makefile                         |   2 +-
 kernel/trace/trace_irqsoff.c                  | 253 ++++++------------
 kernel/trace/trace_preemptirq.c               |  71 +++++
 kernel/tracepoint.c                           |  16 +-
 lib/Kconfig.debug                             |   8 +
 lib/Makefile                                  |   1 +
 lib/test_atomic_sections.c                    |  77 ++++++
 tools/testing/selftests/ftrace/config         |   3 +
 .../test.d/preemptirq/irqsoff_tracer.tc       |  74 +++++
 20 files changed, 454 insertions(+), 241 deletions(-)
 create mode 100644 kernel/trace/trace_preemptirq.c
 create mode 100644 lib/test_atomic_sections.c
 create mode 100644 tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc

-- 
2.17.1.1185.g55be947832-goog

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

end of thread, other threads:[~2018-07-12 20:31 UTC | newest]

Thread overview: 156+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-28 18:21 [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints Joel Fernandes
2018-06-28 18:21 ` Joel Fernandes
2018-06-28 18:21 ` joel
2018-06-28 18:21 ` [PATCH v9 1/7] srcu: Add notrace variants of srcu_read_{lock,unlock} Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 2/7] srcu: Add notrace variant of srcu_dereference Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 3/7] trace/irqsoff: Split reset into separate functions Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11 12:49   ` Peter Zijlstra
2018-07-11 12:49     ` Peter Zijlstra
2018-07-11 12:49     ` peterz
2018-07-11 13:00     ` Steven Rostedt
2018-07-11 13:00       ` Steven Rostedt
2018-07-11 13:00       ` rostedt
2018-07-11 14:27       ` Paul E. McKenney
2018-07-11 14:27         ` Paul E. McKenney
2018-07-11 14:27         ` paulmck
2018-07-11 14:46         ` Steven Rostedt
2018-07-11 14:46           ` Steven Rostedt
2018-07-11 14:46           ` rostedt
2018-07-11 15:15           ` Paul E. McKenney
2018-07-11 15:15             ` Paul E. McKenney
2018-07-11 15:15             ` paulmck
2018-07-11 20:56             ` Joel Fernandes
2018-07-11 20:56               ` Joel Fernandes
2018-07-11 20:56               ` joel
2018-07-12  1:22               ` Steven Rostedt
2018-07-12  1:22                 ` Steven Rostedt
2018-07-12  1:22                 ` rostedt
2018-07-12  2:35                 ` Joel Fernandes
2018-07-12  2:35                   ` Joel Fernandes
2018-07-12  2:35                   ` joel
2018-07-11 20:52           ` Joel Fernandes
2018-07-11 20:52             ` Joel Fernandes
2018-07-11 20:52             ` joel
2018-07-12  3:21             ` Steven Rostedt
2018-07-12  3:21               ` Steven Rostedt
2018-07-12  3:21               ` rostedt
2018-07-12  4:28               ` Joel Fernandes
2018-07-12  4:28                 ` Joel Fernandes
2018-07-12  4:28                 ` joel
2018-07-12 13:35                 ` Steven Rostedt
2018-07-12 13:35                   ` Steven Rostedt
2018-07-12 13:35                   ` rostedt
2018-07-12 19:17                   ` Joel Fernandes
2018-07-12 19:17                     ` Joel Fernandes
2018-07-12 19:17                     ` joel
2018-07-12 20:15                     ` Steven Rostedt
2018-07-12 20:15                       ` Steven Rostedt
2018-07-12 20:15                       ` rostedt
2018-07-12 20:29                       ` Joel Fernandes
2018-07-12 20:29                         ` Joel Fernandes
2018-07-12 20:29                         ` joel
2018-07-12 20:31                         ` Steven Rostedt
2018-07-12 20:31                           ` Steven Rostedt
2018-07-12 20:31                           ` rostedt
2018-07-11 12:53   ` Peter Zijlstra
2018-07-11 12:53     ` Peter Zijlstra
2018-07-11 12:53     ` peterz
2018-07-12  2:32     ` Joel Fernandes
2018-07-12  2:32       ` Joel Fernandes
2018-07-12  2:32       ` joel
2018-07-11 12:56   ` Peter Zijlstra
2018-07-11 12:56     ` Peter Zijlstra
2018-07-11 12:56     ` peterz
2018-07-11 13:06     ` Steven Rostedt
2018-07-11 13:06       ` Steven Rostedt
2018-07-11 13:06       ` rostedt
2018-07-11 15:17       ` Peter Zijlstra
2018-07-11 15:17         ` Peter Zijlstra
2018-07-11 15:17         ` peterz
2018-07-11 15:26         ` Steven Rostedt
2018-07-11 15:26           ` Steven Rostedt
2018-07-11 15:26           ` rostedt
2018-07-11 16:46           ` Mathieu Desnoyers
2018-07-11 16:46             ` Mathieu Desnoyers
2018-07-11 16:46             ` mathieu.desnoyers
2018-07-11 16:40         ` Mathieu Desnoyers
2018-07-11 16:40           ` Mathieu Desnoyers
2018-07-11 16:40           ` mathieu.desnoyers
2018-07-12  0:31       ` Joel Fernandes
2018-07-12  0:31         ` Joel Fernandes
2018-07-12  0:31         ` joel
2018-07-12  1:26         ` Steven Rostedt
2018-07-12  1:26           ` Steven Rostedt
2018-07-12  1:26           ` rostedt
2018-06-28 18:21 ` [PATCH v9 5/7] tracing: Centralize preemptirq tracepoints and unify their usage Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-06 22:06   ` Steven Rostedt
2018-07-06 22:06     ` Steven Rostedt
2018-07-06 22:06     ` rostedt
2018-07-07  4:20     ` Joel Fernandes
2018-07-07  4:20       ` Joel Fernandes
2018-07-07  4:20       ` joel
2018-07-10 14:20   ` Steven Rostedt
2018-07-10 14:20     ` Steven Rostedt
2018-07-10 14:20     ` rostedt
2018-07-10 17:33     ` Joel Fernandes
2018-07-10 17:33       ` Joel Fernandes
2018-07-10 17:33       ` joel
2018-07-11 13:12   ` Peter Zijlstra
2018-07-11 13:12     ` Peter Zijlstra
2018-07-11 13:12     ` peterz
2018-07-11 13:19     ` Steven Rostedt
2018-07-11 13:19       ` Steven Rostedt
2018-07-11 13:19       ` rostedt
2018-07-11 13:22       ` Steven Rostedt
2018-07-11 13:22         ` Steven Rostedt
2018-07-11 13:22         ` rostedt
2018-07-12  8:38       ` Joel Fernandes
2018-07-12  8:38         ` Joel Fernandes
2018-07-12  8:38         ` joel
2018-07-12 13:37         ` Steven Rostedt
2018-07-12 13:37           ` Steven Rostedt
2018-07-12 13:37           ` rostedt
2018-07-12  0:44     ` Joel Fernandes
2018-07-12  0:44       ` Joel Fernandes
2018-07-12  0:44       ` joel
2018-06-28 18:21 ` [PATCH v9 6/7] lib: Add module to simulate atomic sections for testing preemptoff tracers Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11  0:47   ` Steven Rostedt
2018-07-11  0:47     ` Steven Rostedt
2018-07-11  0:47     ` rostedt
2018-07-11  5:26     ` Joel Fernandes
2018-07-11  5:26       ` Joel Fernandes
2018-07-11  5:26       ` joel
2018-06-28 18:21 ` [PATCH v9 7/7] kselftests: Add tests for the preemptoff and irqsoff tracers Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11  0:49   ` Steven Rostedt
2018-07-11  0:49     ` Steven Rostedt
2018-07-11  0:49     ` rostedt
2018-07-11  5:27     ` Joel Fernandes
2018-07-11  5:27       ` Joel Fernandes
2018-07-11  5:27       ` joel
2018-07-03 14:15 ` [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints Joel Fernandes
2018-07-03 14:15   ` Joel Fernandes
2018-07-03 14:15   ` joel
2018-07-03 14:23   ` Steven Rostedt
2018-07-03 14:23     ` Steven Rostedt
2018-07-03 14:23     ` rostedt
  -- strict thread matches above, loose matches on Subject: below --
2018-06-21 22:32 Joel Fernandes
2018-06-21 22:32 ` [PATCH v9 5/7] tracing: Centralize preemptirq tracepoints and unify their usage Joel Fernandes
2018-06-21 22:32   ` Joel Fernandes
2018-06-21 22:32   ` joel
2018-06-07 20:38 [PATCH v9 0/7] Centralize and unify usage of preempt/irq Joel Fernandes
2018-06-07 20:38 ` [PATCH v9 5/7] tracing: Centralize preemptirq tracepoints and unify their usage Joel Fernandes
2018-06-07 20:38   ` Joel Fernandes
2018-06-07 20:38   ` joelaf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.