2021-05-31 20:24:22

by Bill Wendling

[permalink] [raw]
Subject: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

Future PGO features may create other files in /sys/kernel/debug/pgo. So
rename the kernel's raw profile data file to "vmlinux.profraw" to make
which part of the kernel the file is for more explicit.

Note that future files in /sys/kernel/debug/pgo should follow a similar
naming convention.

Signed-off-by: Bill Wendling <[email protected]>
---
Documentation/dev-tools/pgo.rst | 6 +++---
kernel/pgo/Kconfig | 7 ++++---
kernel/pgo/fs.c | 2 +-
3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/Documentation/dev-tools/pgo.rst b/Documentation/dev-tools/pgo.rst
index b7f11d8405b7..0200449c4843 100644
--- a/Documentation/dev-tools/pgo.rst
+++ b/Documentation/dev-tools/pgo.rst
@@ -76,7 +76,7 @@ The PGO kernel support creates the following files in debugfs:
``/sys/kernel/debug/pgo/reset``
Global reset file: resets all coverage data to zero when written to.

-``/sys/kernel/debug/profraw``
+``/sys/kernel/debug/pgo/vmlinux.profraw``
The raw PGO data that must be processed with ``llvm_profdata``.


@@ -108,7 +108,7 @@ using the result to optimize the kernel:

.. code-block:: sh

- $ cp -a /sys/kernel/debug/pgo/profraw /tmp/vmlinux.profraw
+ $ cp -a /sys/kernel/debug/pgo/vmlinux.profraw /tmp/vmlinux.profraw

5) (Optional) Download the raw profile data to the HOST machine.

@@ -120,7 +120,7 @@ using the result to optimize the kernel:

Note that multiple raw profile data files can be merged during this step.

-7) Rebuild the kernel using the profile data (PGO disabled)
+7) Rebuild the kernel using the processed profile data (PGO disabled)

.. code-block:: sh

diff --git a/kernel/pgo/Kconfig b/kernel/pgo/Kconfig
index 76a640b6cf6e..d2053df1111c 100644
--- a/kernel/pgo/Kconfig
+++ b/kernel/pgo/Kconfig
@@ -17,10 +17,11 @@ config PGO_CLANG

Run a representative workload for your application on a kernel
compiled with this option and download the raw profile file from
- /sys/kernel/debug/pgo/profraw. This file needs to be processed with
- llvm-profdata. It may be merged with other collected raw profiles.
+ /sys/kernel/debug/pgo/vmlinux.profraw. This file needs to be
+ processed with llvm-profdata. It may be merged with other collected
+ raw profiles.

- Copy the resulting profile file into vmlinux.profdata, and enable
+ Copy the processed profile file into vmlinux.profdata, and enable
KCFLAGS=-fprofile-use=vmlinux.profdata to produce an optimized
kernel.

diff --git a/kernel/pgo/fs.c b/kernel/pgo/fs.c
index 449f16beb2cf..ef985159dad3 100644
--- a/kernel/pgo/fs.c
+++ b/kernel/pgo/fs.c
@@ -365,7 +365,7 @@ static int __init pgo_init(void)
if (!directory)
goto err_remove;

- if (!debugfs_create_file("profraw", 0600, directory, NULL,
+ if (!debugfs_create_file("vmlinux.profraw", 0600, directory, NULL,
&prf_fops))
goto err_remove;

--
2.32.0.rc0.204.g9fa02ecfa5-goog


2021-05-31 20:35:09

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

On 5/31/2021 1:20 PM, Bill Wendling wrote:
> Future PGO features may create other files in /sys/kernel/debug/pgo. So
> rename the kernel's raw profile data file to "vmlinux.profraw" to make
> which part of the kernel the file is for more explicit.
>
> Note that future files in /sys/kernel/debug/pgo should follow a similar
> naming convention.
>
> Signed-off-by: Bill Wendling <[email protected]>

Guess this clears up my confusion around the module patches :)

Reviewed-by: Nathan Chancellor <[email protected]>

> ---
> Documentation/dev-tools/pgo.rst | 6 +++---
> kernel/pgo/Kconfig | 7 ++++---
> kernel/pgo/fs.c | 2 +-
> 3 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/dev-tools/pgo.rst b/Documentation/dev-tools/pgo.rst
> index b7f11d8405b7..0200449c4843 100644
> --- a/Documentation/dev-tools/pgo.rst
> +++ b/Documentation/dev-tools/pgo.rst
> @@ -76,7 +76,7 @@ The PGO kernel support creates the following files in debugfs:
> ``/sys/kernel/debug/pgo/reset``
> Global reset file: resets all coverage data to zero when written to.
>
> -``/sys/kernel/debug/profraw``
> +``/sys/kernel/debug/pgo/vmlinux.profraw``
> The raw PGO data that must be processed with ``llvm_profdata``.
>
>
> @@ -108,7 +108,7 @@ using the result to optimize the kernel:
>
> .. code-block:: sh
>
> - $ cp -a /sys/kernel/debug/pgo/profraw /tmp/vmlinux.profraw
> + $ cp -a /sys/kernel/debug/pgo/vmlinux.profraw /tmp/vmlinux.profraw
>
> 5) (Optional) Download the raw profile data to the HOST machine.
>
> @@ -120,7 +120,7 @@ using the result to optimize the kernel:
>
> Note that multiple raw profile data files can be merged during this step.
>
> -7) Rebuild the kernel using the profile data (PGO disabled)
> +7) Rebuild the kernel using the processed profile data (PGO disabled)
>
> .. code-block:: sh
>
> diff --git a/kernel/pgo/Kconfig b/kernel/pgo/Kconfig
> index 76a640b6cf6e..d2053df1111c 100644
> --- a/kernel/pgo/Kconfig
> +++ b/kernel/pgo/Kconfig
> @@ -17,10 +17,11 @@ config PGO_CLANG
>
> Run a representative workload for your application on a kernel
> compiled with this option and download the raw profile file from
> - /sys/kernel/debug/pgo/profraw. This file needs to be processed with
> - llvm-profdata. It may be merged with other collected raw profiles.
> + /sys/kernel/debug/pgo/vmlinux.profraw. This file needs to be
> + processed with llvm-profdata. It may be merged with other collected
> + raw profiles.
>
> - Copy the resulting profile file into vmlinux.profdata, and enable
> + Copy the processed profile file into vmlinux.profdata, and enable
> KCFLAGS=-fprofile-use=vmlinux.profdata to produce an optimized
> kernel.
>
> diff --git a/kernel/pgo/fs.c b/kernel/pgo/fs.c
> index 449f16beb2cf..ef985159dad3 100644
> --- a/kernel/pgo/fs.c
> +++ b/kernel/pgo/fs.c
> @@ -365,7 +365,7 @@ static int __init pgo_init(void)
> if (!directory)
> goto err_remove;
>
> - if (!debugfs_create_file("profraw", 0600, directory, NULL,
> + if (!debugfs_create_file("vmlinux.profraw", 0600, directory, NULL,
> &prf_fops))
> goto err_remove;
>
>

2021-06-01 08:28:15

by Bill Wendling

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

On Mon, May 31, 2021 at 1:29 PM Nathan Chancellor <[email protected]> wrote:
>
> On 5/31/2021 1:20 PM, Bill Wendling wrote:
> > Future PGO features may create other files in /sys/kernel/debug/pgo. So
> > rename the kernel's raw profile data file to "vmlinux.profraw" to make
> > which part of the kernel the file is for more explicit.
> >
> > Note that future files in /sys/kernel/debug/pgo should follow a similar
> > naming convention.
> >
> > Signed-off-by: Bill Wendling <[email protected]>
>
> Guess this clears up my confusion around the module patches :)
>
To clarify, Jarmo did those patches on his own. I just wanted to
clarify the naming convention. :-)

-bw

> Reviewed-by: Nathan Chancellor <[email protected]>
>
> > ---
> > Documentation/dev-tools/pgo.rst | 6 +++---
> > kernel/pgo/Kconfig | 7 ++++---
> > kernel/pgo/fs.c | 2 +-
> > 3 files changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/Documentation/dev-tools/pgo.rst b/Documentation/dev-tools/pgo.rst
> > index b7f11d8405b7..0200449c4843 100644
> > --- a/Documentation/dev-tools/pgo.rst
> > +++ b/Documentation/dev-tools/pgo.rst
> > @@ -76,7 +76,7 @@ The PGO kernel support creates the following files in debugfs:
> > ``/sys/kernel/debug/pgo/reset``
> > Global reset file: resets all coverage data to zero when written to.
> >
> > -``/sys/kernel/debug/profraw``
> > +``/sys/kernel/debug/pgo/vmlinux.profraw``
> > The raw PGO data that must be processed with ``llvm_profdata``.
> >
> >
> > @@ -108,7 +108,7 @@ using the result to optimize the kernel:
> >
> > .. code-block:: sh
> >
> > - $ cp -a /sys/kernel/debug/pgo/profraw /tmp/vmlinux.profraw
> > + $ cp -a /sys/kernel/debug/pgo/vmlinux.profraw /tmp/vmlinux.profraw
> >
> > 5) (Optional) Download the raw profile data to the HOST machine.
> >
> > @@ -120,7 +120,7 @@ using the result to optimize the kernel:
> >
> > Note that multiple raw profile data files can be merged during this step.
> >
> > -7) Rebuild the kernel using the profile data (PGO disabled)
> > +7) Rebuild the kernel using the processed profile data (PGO disabled)
> >
> > .. code-block:: sh
> >
> > diff --git a/kernel/pgo/Kconfig b/kernel/pgo/Kconfig
> > index 76a640b6cf6e..d2053df1111c 100644
> > --- a/kernel/pgo/Kconfig
> > +++ b/kernel/pgo/Kconfig
> > @@ -17,10 +17,11 @@ config PGO_CLANG
> >
> > Run a representative workload for your application on a kernel
> > compiled with this option and download the raw profile file from
> > - /sys/kernel/debug/pgo/profraw. This file needs to be processed with
> > - llvm-profdata. It may be merged with other collected raw profiles.
> > + /sys/kernel/debug/pgo/vmlinux.profraw. This file needs to be
> > + processed with llvm-profdata. It may be merged with other collected
> > + raw profiles.
> >
> > - Copy the resulting profile file into vmlinux.profdata, and enable
> > + Copy the processed profile file into vmlinux.profdata, and enable
> > KCFLAGS=-fprofile-use=vmlinux.profdata to produce an optimized
> > kernel.
> >
> > diff --git a/kernel/pgo/fs.c b/kernel/pgo/fs.c
> > index 449f16beb2cf..ef985159dad3 100644
> > --- a/kernel/pgo/fs.c
> > +++ b/kernel/pgo/fs.c
> > @@ -365,7 +365,7 @@ static int __init pgo_init(void)
> > if (!directory)
> > goto err_remove;
> >
> > - if (!debugfs_create_file("profraw", 0600, directory, NULL,
> > + if (!debugfs_create_file("vmlinux.profraw", 0600, directory, NULL,
> > &prf_fops))
> > goto err_remove;
> >
> >

2021-06-01 19:16:50

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

On Tue, Jun 01, 2021 at 01:24:39AM -0700, 'Bill Wendling' via Clang Built Linux wrote:
> On Mon, May 31, 2021 at 1:29 PM Nathan Chancellor <[email protected]> wrote:
> >
> > On 5/31/2021 1:20 PM, Bill Wendling wrote:
> > > Future PGO features may create other files in /sys/kernel/debug/pgo. So
> > > rename the kernel's raw profile data file to "vmlinux.profraw" to make
> > > which part of the kernel the file is for more explicit.
> > >
> > > Note that future files in /sys/kernel/debug/pgo should follow a similar
> > > naming convention.
> > >
> > > Signed-off-by: Bill Wendling <[email protected]>
> >
> > Guess this clears up my confusion around the module patches :)
> >
> To clarify, Jarmo did those patches on his own. I just wanted to
> clarify the naming convention. :-)

Is the expectation that there would be 1 file per module in
/sys/kernel/debug/pgo/ after the modules patch?

>
> -bw
>
> > Reviewed-by: Nathan Chancellor <[email protected]>
> >
> > > ---
> > > Documentation/dev-tools/pgo.rst | 6 +++---
> > > kernel/pgo/Kconfig | 7 ++++---
> > > kernel/pgo/fs.c | 2 +-
> > > 3 files changed, 8 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/Documentation/dev-tools/pgo.rst b/Documentation/dev-tools/pgo.rst
> > > index b7f11d8405b7..0200449c4843 100644
> > > --- a/Documentation/dev-tools/pgo.rst
> > > +++ b/Documentation/dev-tools/pgo.rst
> > > @@ -76,7 +76,7 @@ The PGO kernel support creates the following files in debugfs:
> > > ``/sys/kernel/debug/pgo/reset``
> > > Global reset file: resets all coverage data to zero when written to.
> > >
> > > -``/sys/kernel/debug/profraw``
> > > +``/sys/kernel/debug/pgo/vmlinux.profraw``
> > > The raw PGO data that must be processed with ``llvm_profdata``.
> > >
> > >
> > > @@ -108,7 +108,7 @@ using the result to optimize the kernel:
> > >
> > > .. code-block:: sh
> > >
> > > - $ cp -a /sys/kernel/debug/pgo/profraw /tmp/vmlinux.profraw
> > > + $ cp -a /sys/kernel/debug/pgo/vmlinux.profraw /tmp/vmlinux.profraw

And if so, these instructions would change (in the future) to something
like:

$ cp -a /sys/kernel/debug/pgo/*.profraw /tmp/prof/

?

-Kees

--
Kees Cook

2021-06-01 19:19:59

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

On Mon, 31 May 2021 13:20:44 -0700, Bill Wendling wrote:
> Future PGO features may create other files in /sys/kernel/debug/pgo. So
> rename the kernel's raw profile data file to "vmlinux.profraw" to make
> which part of the kernel the file is for more explicit.
>
> Note that future files in /sys/kernel/debug/pgo should follow a similar
> naming convention.

Applied to for-next/clang/features, thanks!

[1/1] pgo: rename the raw profile file to vmlinux.profraw
https://git.kernel.org/kees/c/001eaf3fd0e3

--
Kees Cook

2021-06-01 21:42:19

by Jarmo Tiitto

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

Kees Cook wrote tiistaina 1. kes?kuuta 2021 22.13.21 EEST:
> On Tue, Jun 01, 2021 at 01:24:39AM -0700, 'Bill Wendling' via Clang Built
Linux wrote:
> > On Mon, May 31, 2021 at 1:29 PM Nathan Chancellor <[email protected]>
wrote:
> > > On 5/31/2021 1:20 PM, Bill Wendling wrote:
> > > > Future PGO features may create other files in /sys/kernel/debug/pgo.
> > > > So
> > > > rename the kernel's raw profile data file to "vmlinux.profraw" to make
> > > > which part of the kernel the file is for more explicit.
> > > >
> > > > Note that future files in /sys/kernel/debug/pgo should follow a
> > > > similar
> > > > naming convention.
> > > >
> > > > Signed-off-by: Bill Wendling <[email protected]>
> > >
> > > Guess this clears up my confusion around the module patches :)
> >
> > To clarify, Jarmo did those patches on his own. I just wanted to
> > clarify the naming convention. :-)
>
> Is the expectation that there would be 1 file per module in
> /sys/kernel/debug/pgo/ after the modules patch?
>
> > -bw
> >
> > > Reviewed-by: Nathan Chancellor <[email protected]>
> > >
> > > > ---
> > > >
> > > > Documentation/dev-tools/pgo.rst | 6 +++---
> > > > kernel/pgo/Kconfig | 7 ++++---
> > > > kernel/pgo/fs.c | 2 +-
> > > > 3 files changed, 8 insertions(+), 7 deletions(-)
> > > >
> > > > diff --git a/Documentation/dev-tools/pgo.rst
> > > > b/Documentation/dev-tools/pgo.rst index b7f11d8405b7..0200449c4843
> > > > 100644
> > > > --- a/Documentation/dev-tools/pgo.rst
> > > > +++ b/Documentation/dev-tools/pgo.rst
> > > >
> > > > @@ -76,7 +76,7 @@ The PGO kernel support creates the following files in
debugfs:
> > > > ``/sys/kernel/debug/pgo/reset``
> > > >
> > > > Global reset file: resets all coverage data to zero when written
> > > > to.
> > > >
> > > > -``/sys/kernel/debug/profraw``
> > > > +``/sys/kernel/debug/pgo/vmlinux.profraw``
> > > >
> > > > The raw PGO data that must be processed with ``llvm_profdata``.
> > > >
> > > > @@ -108,7 +108,7 @@ using the result to optimize the kernel:
> > > > .. code-block:: sh
> > > >
> > > > - $ cp -a /sys/kernel/debug/pgo/profraw /tmp/vmlinux.profraw
> > > > + $ cp -a /sys/kernel/debug/pgo/vmlinux.profraw
> > > > /tmp/vmlinux.profraw
>
> And if so, these instructions would change (in the future) to something
> like:
>
> $ cp -a /sys/kernel/debug/pgo/*.profraw /tmp/prof/
>
> ?
>
> -Kees

Hi,

To be clear the mucked up patches I sent are more like of RFC to get in
contact with the development.
Back to the code:

Yes, my future intention is that there will be one *.profraw file per module.
And curiously I would also have renamed the current profile data file to
"vmlinux.profraw" to disambiguate it from what part of kernel generated it.

I already wrote an small fix up that I think should be part of the upstream
code so that profiling the vmlinux works better.
It filters out any module originated content from vmlinux.profraw.

Above will be probably a good exercise for me.

Next, my future v2 module profiling machinery
would probably follow on top of your work.

-Jarmo


2021-06-01 23:00:06

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH] pgo: rename the raw profile file to vmlinux.profraw

On Wed, Jun 02, 2021 at 12:40:25AM +0300, [email protected] wrote:
> Yes, my future intention is that there will be one *.profraw file per module.
> And curiously I would also have renamed the current profile data file to
> "vmlinux.profraw" to disambiguate it from what part of kernel generated it.
>
> I already wrote an small fix up that I think should be part of the upstream
> code so that profiling the vmlinux works better.
> It filters out any module originated content from vmlinux.profraw.
>
> Above will be probably a good exercise for me.
>
> Next, my future v2 module profiling machinery
> would probably follow on top of your work.

Okay, great; thanks for digging into it! :)

--
Kees Cook