xfs: allow disabling xfs tracepoints via Kconfig
diff mbox series

Message ID 20190204212035.9919-1-linux@rasmusvillemoes.dk
State New
Headers show
Series
  • xfs: allow disabling xfs tracepoints via Kconfig
Related show

Commit Message

Rasmus Villemoes Feb. 4, 2019, 9:20 p.m. UTC
linux/tracepoints.h allows individual subsystems to disable their
tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
reduces the resident size of xfs.ko by about a third, or ~350 KiB.

$ size /tmp/xfs/{a,b}/xfs.ko
   text    data     bss     dec     hex filename
 671726    4129     632  676487   a5287 /tmp/xfs/a/xfs.ko
 893192  166737     632 1060561  102ed1 /tmp/xfs/b/xfs.ko

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 fs/xfs/Kconfig     | 9 +++++++++
 fs/xfs/xfs_trace.h | 4 ++++
 2 files changed, 13 insertions(+)

Comments

Darrick J. Wong Feb. 4, 2019, 9:37 p.m. UTC | #1
On Mon, Feb 04, 2019 at 10:20:35PM +0100, Rasmus Villemoes wrote:
> linux/tracepoints.h allows individual subsystems to disable their
> tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
> reduces the resident size of xfs.ko by about a third, or ~350 KiB.

LOL. :)

> $ size /tmp/xfs/{a,b}/xfs.ko
>    text    data     bss     dec     hex filename
>  671726    4129     632  676487   a5287 /tmp/xfs/a/xfs.ko
>  893192  166737     632 1060561  102ed1 /tmp/xfs/b/xfs.ko
> 
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> ---
>  fs/xfs/Kconfig     | 9 +++++++++
>  fs/xfs/xfs_trace.h | 4 ++++

I think a similar thing ought to apply to fs/xfs/scrub/trace.h, right?

More general questions:

(a) Do we want to be doing this on a per-subsystem basis?

(b) Since xfs_scrub is a separate trace domain, do we want a separate
Kconfig item for toggling scrub trace, or is one big one enough?

(I can't think of why I'd want one on and the other off.)

--D

>  2 files changed, 13 insertions(+)
> 
> diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> index 457ac9f97377..d099e6d9f6c5 100644
> --- a/fs/xfs/Kconfig
> +++ b/fs/xfs/Kconfig
> @@ -141,3 +141,12 @@ config XFS_ASSERT_FATAL
>  	  result in warnings.
>  
>  	  This behavior can be modified at runtime via sysfs.
> +
> +config XFS_TRACEPOINTS
> +	bool "XFS tracepoints"
> +	default y
> +	depends on XFS_FS && TRACEPOINTS
> +	help
> +	  Say Y here to build XFS with tracepoints.
> +
> +	  You can say N here to reduce the size of the kernel image.
> diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
> index 6fcc893dfc91..5fb3d5c0483e 100644
> --- a/fs/xfs/xfs_trace.h
> +++ b/fs/xfs/xfs_trace.h
> @@ -6,6 +6,10 @@
>  #undef TRACE_SYSTEM
>  #define TRACE_SYSTEM xfs
>  
> +#ifndef CONFIG_XFS_TRACEPOINTS
> +#define NOTRACE
> +#endif
> +
>  #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)
>  #define _TRACE_XFS_H
>  
> -- 
> 2.20.1
>
Dave Chinner Feb. 4, 2019, 9:53 p.m. UTC | #2
On Mon, Feb 04, 2019 at 10:20:35PM +0100, Rasmus Villemoes wrote:
> linux/tracepoints.h allows individual subsystems to disable their
> tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
> reduces the resident size of xfs.ko by about a third, or ~350 KiB.

Ok, now we can't debug typical problems on live production systems
if tracepoints are turned off on the user/distro kernels.  So under
what circumstances would we ever want to turn off tracepoints on
XFS?

Cheers,

Dave.
Rasmus Villemoes Feb. 4, 2019, 10:12 p.m. UTC | #3
On 04/02/2019 22.53, Dave Chinner wrote:
> On Mon, Feb 04, 2019 at 10:20:35PM +0100, Rasmus Villemoes wrote:
>> linux/tracepoints.h allows individual subsystems to disable their
>> tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
>> reduces the resident size of xfs.ko by about a third, or ~350 KiB.
> 
> Ok, now we can't debug typical problems on live production systems
> if tracepoints are turned off on the user/distro kernels.  So under
> what circumstances would we ever want to turn off tracepoints on
> XFS?

I don't expect any mainstream distros to turn it off. But for embedded
systems that use a hand-tuned .config, being able to shave off 100s of K
of the kernel image is quite valuable. Tracing _is_ useful,
also/especially when doing embedded development, which is why "just turn
off CONFIG_TRACING" isn't really an option.

Would the knob be more acceptable if it was under CONFIG_EXPERT?

Rasmus
Dave Chinner Feb. 4, 2019, 11:13 p.m. UTC | #4
On Mon, Feb 04, 2019 at 11:12:57PM +0100, Rasmus Villemoes wrote:
> On 04/02/2019 22.53, Dave Chinner wrote:
> > On Mon, Feb 04, 2019 at 10:20:35PM +0100, Rasmus Villemoes wrote:
> >> linux/tracepoints.h allows individual subsystems to disable their
> >> tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
> >> reduces the resident size of xfs.ko by about a third, or ~350 KiB.
> > 
> > Ok, now we can't debug typical problems on live production systems
> > if tracepoints are turned off on the user/distro kernels.  So under
> > what circumstances would we ever want to turn off tracepoints on
> > XFS?
> 
> I don't expect any mainstream distros to turn it off. But for embedded
> systems that use a hand-tuned .config, being able to shave off 100s of K
> of the kernel image is quite valuable.

However, small embedded systems don't use XFS because of it's size,
dependence on 64 bit capability (ie. 64BIT || LBDAF), its CPU and
memory overhead in comparison to other filesystems, etc. 

Increasing kconfig options increases the test matrix (even just the
"does this changeset compile" matrix) so these things don't come for
free.  XFS is firmly focussed on the other end of the scale (big,
lots, fast), so I'm not sure that increasing the kconfig combination
matrix to cater for really low end embedded systems is really that
worthwhile.

> Tracing _is_ useful,
> also/especially when doing embedded development, which is why "just turn
> off CONFIG_TRACING" isn't really an option.

Do you have a specific need for this, or is it just "I noticed this,
here's a patch"? If you need it and will use it, great, let's add
it. But config options that don't ever get used tend to rot....

Cheers,

Dave.
Rasmus Villemoes Feb. 5, 2019, 10 a.m. UTC | #5
On 05/02/2019 00.13, Dave Chinner wrote:
> On Mon, Feb 04, 2019 at 11:12:57PM +0100, Rasmus Villemoes wrote:
>> On 04/02/2019 22.53, Dave Chinner wrote:
>>> On Mon, Feb 04, 2019 at 10:20:35PM +0100, Rasmus Villemoes wrote:
>>>> linux/tracepoints.h allows individual subsystems to disable their
>>>> tracepoints. Add such a knob for xfs. Disabling XFS_TRACEPOINTS
>>>> reduces the resident size of xfs.ko by about a third, or ~350 KiB.
> 
> Do you have a specific need for this, or is it just "I noticed this,
> here's a patch"? 

A little of both, actually. I noticed it, did the patch for the kernel I
use on my laptop, and thought others might find it useful. But no, I
don't currently deal with any customer boards where it'd be relevant.

> If you need it and will use it, great, let's add
> it. But config options that don't ever get used tend to rot....

Fair enough, I'll just keep it privately and resend if I encounter a use
case in the wild.

Rasmus

Patch
diff mbox series

diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
index 457ac9f97377..d099e6d9f6c5 100644
--- a/fs/xfs/Kconfig
+++ b/fs/xfs/Kconfig
@@ -141,3 +141,12 @@  config XFS_ASSERT_FATAL
 	  result in warnings.
 
 	  This behavior can be modified at runtime via sysfs.
+
+config XFS_TRACEPOINTS
+	bool "XFS tracepoints"
+	default y
+	depends on XFS_FS && TRACEPOINTS
+	help
+	  Say Y here to build XFS with tracepoints.
+
+	  You can say N here to reduce the size of the kernel image.
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index 6fcc893dfc91..5fb3d5c0483e 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -6,6 +6,10 @@ 
 #undef TRACE_SYSTEM
 #define TRACE_SYSTEM xfs
 
+#ifndef CONFIG_XFS_TRACEPOINTS
+#define NOTRACE
+#endif
+
 #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)
 #define _TRACE_XFS_H