All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Colascione <dancol@google.com>
To: Olof Johansson <olof@lixom.net>
Cc: Joel Fernandes <joel@joelfernandes.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Qais Yousef <qais.yousef@arm.com>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Manoj Rao <linux@manojrajarao.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexei Starovoitov <ast@kernel.org>,
	atish patra <atishp04@gmail.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guenter Roeck <groeck@chromium.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Karim Yaghmour <karim.yaghmour@opersys.com>,
	Kees Cook <keescook@chromium.org>,
	Android Kernel Team <kernel-team@android.com>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>,
	linux-trace-devel@vger.kernel.org,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Shuah Khan <shuah@kernel.org>, Yonghong Song <yhs@fb.com>
Subject: Re: [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier
Date: Mon, 8 Apr 2019 09:37:28 -0700	[thread overview]
Message-ID: <CAKOZuetS6Bg0ubxQgCBKVKeWOzuwH_C=nCRn-OPmHYJvs6sybQ@mail.gmail.com> (raw)
In-Reply-To: <CAOesGMheoZda84OSz9spQ7p66wot5S_9aaqaKC=QYp+8utASXA@mail.gmail.com>

On Mon, Apr 8, 2019 at 9:29 AM Olof Johansson <olof@lixom.net> wrote:
>
> Hi,
>
> On Wed, Mar 20, 2019 at 9:31 AM Joel Fernandes (Google)
> <joel@joelfernandes.org> wrote:
> >
> > Introduce in-kernel headers and other artifacts which are made available
> > as an archive through proc (/proc/kheaders.tar.xz file). This archive makes
> > it possible to build kernel modules, run eBPF programs, and other
> > tracing programs that need to extend the kernel for tracing purposes
> > without any dependency on the file system having headers and build
> > artifacts.
> >
> > On Android and embedded systems, it is common to switch kernels but not
> > have kernel headers available on the file system. Further once a
> > different kernel is booted, any headers stored on the file system will
> > no longer be useful. By storing the headers as a compressed archive
> > within the kernel, we can avoid these issues that have been a hindrance
> > for a long time.
> >
> > The best way to use this feature is by building it in. Several users
> > have a need for this, when they switch debug kernels, they donot want to
> > update the filesystem or worry about it where to store the headers on
> > it. However, the feature is also buildable as a module in case the user
> > desires it not being part of the kernel image. This makes it possible to
> > load and unload the headers from memory on demand. A tracing program, or
> > a kernel module builder can load the module, do its operations, and then
> > unload the module to save kernel memory. The total memory needed is 3.8MB.
> >
> > By having the archive available at a fixed location independent of
> > filesystem dependencies and conventions, all debugging tools can
> > directly refer to the fixed location for the archive, without concerning
> > with where the headers on a typical filesystem which significantly
> > simplifies tooling that needs kernel headers.
> >
> > The code to read the headers is based on /proc/config.gz code and uses
> > the same technique to embed the headers.
> >
> > To build a module, the below steps have been tested on an x86 machine:
> > modprobe kheaders
> > rm -rf $HOME/headers
> > mkdir -p $HOME/headers
> > tar -xvf /proc/kheaders.tar.xz -C $HOME/headers >/dev/null
> > cd my-kernel-module
> > make -C $HOME/headers M=$(pwd) modules
> > rmmod kheaders
> >
> > Additional notes:
> > (1) external modules must be built on the same arch as the host that
> > built vmlinux. This can be done either in a qemu emulated chroot on the
> > target, or natively. This is due to host arch dependency of kernel
> > scripts.
> >
> > (2)
> > If module building is used, since Module.symvers is not available in the
> > archive due to a cyclic dependency with building of the archive into the
> > kernel or module binaries, the modules built using the archive will not
> > contain symbol versioning (modversion). This is usually not an issue
> > since the idea of this patch is to build a kernel module on the fly and
> > load it into the same kernel. An appropriate warning is already printed
> > by the kernel to alert the user of modules not having modversions when
> > built using the archive. For building with modversions, the user can use
> > traditional header packages. For our tracing usecases, we build modules
> > on the fly with this so it is not a concern.
> >
> > (3) I have left IKHD_ST and IKHD_ED markers as is to facilitate
> > future patches that would extract the headers from a kernel or module
> > image.
> >
> > (v4 was Tested-by the following folks,
> >  v5 only has minor changes and has passed my testing).
> > Tested-by: qais.yousef@arm.com
> > Tested-by: dietmar.eggemann@arm.com
> > Tested-by: linux@manojrajarao.com
> > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
>
> Sorry to be late at the party with this kind of feedback, but I find
> the whole ".tar.gz in procfs" to be an awkward solution, especially if
> there's expected to be userspace tooling that depends on this
> long-term.
> [snip]

The approaches you proposed were explored in detail on this thread and
other related threads. The tarball in proc approach is a simple,
pragmatic approach that allows makes a lot of scenarios Just Work
where they didn't before. Approaches like a new filesystem, a
mountable block device, a custom debuginfo format, and so on add
complexity without providing concrete gains in functionality. We'd
like to get this work into the tree sooner rather than later.

WARNING: multiple messages have this Message-ID (diff)
From: dancol at google.com (Daniel Colascione)
Subject: [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier
Date: Mon, 8 Apr 2019 09:37:28 -0700	[thread overview]
Message-ID: <CAKOZuetS6Bg0ubxQgCBKVKeWOzuwH_C=nCRn-OPmHYJvs6sybQ@mail.gmail.com> (raw)
In-Reply-To: <CAOesGMheoZda84OSz9spQ7p66wot5S_9aaqaKC=QYp+8utASXA@mail.gmail.com>

On Mon, Apr 8, 2019 at 9:29 AM Olof Johansson <olof at lixom.net> wrote:
>
> Hi,
>
> On Wed, Mar 20, 2019 at 9:31 AM Joel Fernandes (Google)
> <joel at joelfernandes.org> wrote:
> >
> > Introduce in-kernel headers and other artifacts which are made available
> > as an archive through proc (/proc/kheaders.tar.xz file). This archive makes
> > it possible to build kernel modules, run eBPF programs, and other
> > tracing programs that need to extend the kernel for tracing purposes
> > without any dependency on the file system having headers and build
> > artifacts.
> >
> > On Android and embedded systems, it is common to switch kernels but not
> > have kernel headers available on the file system. Further once a
> > different kernel is booted, any headers stored on the file system will
> > no longer be useful. By storing the headers as a compressed archive
> > within the kernel, we can avoid these issues that have been a hindrance
> > for a long time.
> >
> > The best way to use this feature is by building it in. Several users
> > have a need for this, when they switch debug kernels, they donot want to
> > update the filesystem or worry about it where to store the headers on
> > it. However, the feature is also buildable as a module in case the user
> > desires it not being part of the kernel image. This makes it possible to
> > load and unload the headers from memory on demand. A tracing program, or
> > a kernel module builder can load the module, do its operations, and then
> > unload the module to save kernel memory. The total memory needed is 3.8MB.
> >
> > By having the archive available at a fixed location independent of
> > filesystem dependencies and conventions, all debugging tools can
> > directly refer to the fixed location for the archive, without concerning
> > with where the headers on a typical filesystem which significantly
> > simplifies tooling that needs kernel headers.
> >
> > The code to read the headers is based on /proc/config.gz code and uses
> > the same technique to embed the headers.
> >
> > To build a module, the below steps have been tested on an x86 machine:
> > modprobe kheaders
> > rm -rf $HOME/headers
> > mkdir -p $HOME/headers
> > tar -xvf /proc/kheaders.tar.xz -C $HOME/headers >/dev/null
> > cd my-kernel-module
> > make -C $HOME/headers M=$(pwd) modules
> > rmmod kheaders
> >
> > Additional notes:
> > (1) external modules must be built on the same arch as the host that
> > built vmlinux. This can be done either in a qemu emulated chroot on the
> > target, or natively. This is due to host arch dependency of kernel
> > scripts.
> >
> > (2)
> > If module building is used, since Module.symvers is not available in the
> > archive due to a cyclic dependency with building of the archive into the
> > kernel or module binaries, the modules built using the archive will not
> > contain symbol versioning (modversion). This is usually not an issue
> > since the idea of this patch is to build a kernel module on the fly and
> > load it into the same kernel. An appropriate warning is already printed
> > by the kernel to alert the user of modules not having modversions when
> > built using the archive. For building with modversions, the user can use
> > traditional header packages. For our tracing usecases, we build modules
> > on the fly with this so it is not a concern.
> >
> > (3) I have left IKHD_ST and IKHD_ED markers as is to facilitate
> > future patches that would extract the headers from a kernel or module
> > image.
> >
> > (v4 was Tested-by the following folks,
> >  v5 only has minor changes and has passed my testing).
> > Tested-by: qais.yousef at arm.com
> > Tested-by: dietmar.eggemann at arm.com
> > Tested-by: linux at manojrajarao.com
> > Signed-off-by: Joel Fernandes (Google) <joel at joelfernandes.org>
>
> Sorry to be late at the party with this kind of feedback, but I find
> the whole ".tar.gz in procfs" to be an awkward solution, especially if
> there's expected to be userspace tooling that depends on this
> long-term.
> [snip]

The approaches you proposed were explored in detail on this thread and
other related threads. The tarball in proc approach is a simple,
pragmatic approach that allows makes a lot of scenarios Just Work
where they didn't before. Approaches like a new filesystem, a
mountable block device, a custom debuginfo format, and so on add
complexity without providing concrete gains in functionality. We'd
like to get this work into the tree sooner rather than later.

WARNING: multiple messages have this Message-ID (diff)
From: dancol@google.com (Daniel Colascione)
Subject: [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier
Date: Mon, 8 Apr 2019 09:37:28 -0700	[thread overview]
Message-ID: <CAKOZuetS6Bg0ubxQgCBKVKeWOzuwH_C=nCRn-OPmHYJvs6sybQ@mail.gmail.com> (raw)
Message-ID: <20190408163728.YdoebVydzr04rVV0EhtKK1W6FI0DAVrtfYztOXTSYZI@z> (raw)
In-Reply-To: <CAOesGMheoZda84OSz9spQ7p66wot5S_9aaqaKC=QYp+8utASXA@mail.gmail.com>

On Mon, Apr 8, 2019@9:29 AM Olof Johansson <olof@lixom.net> wrote:
>
> Hi,
>
> On Wed, Mar 20, 2019 at 9:31 AM Joel Fernandes (Google)
> <joel@joelfernandes.org> wrote:
> >
> > Introduce in-kernel headers and other artifacts which are made available
> > as an archive through proc (/proc/kheaders.tar.xz file). This archive makes
> > it possible to build kernel modules, run eBPF programs, and other
> > tracing programs that need to extend the kernel for tracing purposes
> > without any dependency on the file system having headers and build
> > artifacts.
> >
> > On Android and embedded systems, it is common to switch kernels but not
> > have kernel headers available on the file system. Further once a
> > different kernel is booted, any headers stored on the file system will
> > no longer be useful. By storing the headers as a compressed archive
> > within the kernel, we can avoid these issues that have been a hindrance
> > for a long time.
> >
> > The best way to use this feature is by building it in. Several users
> > have a need for this, when they switch debug kernels, they donot want to
> > update the filesystem or worry about it where to store the headers on
> > it. However, the feature is also buildable as a module in case the user
> > desires it not being part of the kernel image. This makes it possible to
> > load and unload the headers from memory on demand. A tracing program, or
> > a kernel module builder can load the module, do its operations, and then
> > unload the module to save kernel memory. The total memory needed is 3.8MB.
> >
> > By having the archive available at a fixed location independent of
> > filesystem dependencies and conventions, all debugging tools can
> > directly refer to the fixed location for the archive, without concerning
> > with where the headers on a typical filesystem which significantly
> > simplifies tooling that needs kernel headers.
> >
> > The code to read the headers is based on /proc/config.gz code and uses
> > the same technique to embed the headers.
> >
> > To build a module, the below steps have been tested on an x86 machine:
> > modprobe kheaders
> > rm -rf $HOME/headers
> > mkdir -p $HOME/headers
> > tar -xvf /proc/kheaders.tar.xz -C $HOME/headers >/dev/null
> > cd my-kernel-module
> > make -C $HOME/headers M=$(pwd) modules
> > rmmod kheaders
> >
> > Additional notes:
> > (1) external modules must be built on the same arch as the host that
> > built vmlinux. This can be done either in a qemu emulated chroot on the
> > target, or natively. This is due to host arch dependency of kernel
> > scripts.
> >
> > (2)
> > If module building is used, since Module.symvers is not available in the
> > archive due to a cyclic dependency with building of the archive into the
> > kernel or module binaries, the modules built using the archive will not
> > contain symbol versioning (modversion). This is usually not an issue
> > since the idea of this patch is to build a kernel module on the fly and
> > load it into the same kernel. An appropriate warning is already printed
> > by the kernel to alert the user of modules not having modversions when
> > built using the archive. For building with modversions, the user can use
> > traditional header packages. For our tracing usecases, we build modules
> > on the fly with this so it is not a concern.
> >
> > (3) I have left IKHD_ST and IKHD_ED markers as is to facilitate
> > future patches that would extract the headers from a kernel or module
> > image.
> >
> > (v4 was Tested-by the following folks,
> >  v5 only has minor changes and has passed my testing).
> > Tested-by: qais.yousef at arm.com
> > Tested-by: dietmar.eggemann at arm.com
> > Tested-by: linux at manojrajarao.com
> > Signed-off-by: Joel Fernandes (Google) <joel at joelfernandes.org>
>
> Sorry to be late at the party with this kind of feedback, but I find
> the whole ".tar.gz in procfs" to be an awkward solution, especially if
> there's expected to be userspace tooling that depends on this
> long-term.
> [snip]

The approaches you proposed were explored in detail on this thread and
other related threads. The tarball in proc approach is a simple,
pragmatic approach that allows makes a lot of scenarios Just Work
where they didn't before. Approaches like a new filesystem, a
mountable block device, a custom debuginfo format, and so on add
complexity without providing concrete gains in functionality. We'd
like to get this work into the tree sooner rather than later.

  reply	other threads:[~2019-04-08 16:37 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-20 16:31 [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier Joel Fernandes (Google)
2019-03-20 16:31 ` Joel Fernandes (Google)
2019-03-20 16:31 ` joel
2019-03-20 16:31 ` [PATCH v5 2/3] Add selftests for module build using in-kernel headers Joel Fernandes (Google)
2019-03-20 16:31   ` Joel Fernandes (Google)
2019-03-20 16:31   ` joel
2019-03-20 16:31 ` [PATCH v5 3/3] init/config: Do not select BUILD_BIN2C for IKCONFIG Joel Fernandes (Google)
2019-03-20 16:31   ` Joel Fernandes (Google)
2019-03-20 16:31   ` joel
2019-03-20 18:31 ` [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier Andrew Morton
2019-03-20 18:31   ` Andrew Morton
2019-03-20 18:31   ` akpm
2019-03-20 19:42   ` Joel Fernandes
2019-03-20 19:42     ` Joel Fernandes
2019-03-20 19:42     ` joel
2019-04-08 16:29 ` Olof Johansson
2019-04-08 16:29   ` Olof Johansson
2019-04-08 16:29   ` olof
2019-04-08 16:37   ` Daniel Colascione [this message]
2019-04-08 16:37     ` Daniel Colascione
2019-04-08 16:37     ` dancol
2019-04-08 16:53     ` Olof Johansson
2019-04-08 16:53       ` Olof Johansson
2019-04-08 16:53       ` olof
2019-04-08 20:36   ` Joel Fernandes
2019-04-08 20:36     ` Joel Fernandes
2019-04-08 20:36     ` joel
2019-04-10 15:07     ` Olof Johansson
2019-04-10 15:07       ` Olof Johansson
2019-04-10 15:07       ` olof
2019-04-10 15:50       ` Joel Fernandes
2019-04-10 15:50         ` Joel Fernandes
2019-04-10 15:50         ` joelaf
2019-04-10 16:34         ` Olof Johansson
2019-04-10 16:34           ` Olof Johansson
2019-04-10 16:34           ` olof
2019-04-10 17:33           ` Joel Fernandes
2019-04-10 17:33             ` Joel Fernandes
2019-04-10 17:33             ` joelaf
2019-04-10 17:35           ` Daniel Colascione
2019-04-10 17:35             ` Daniel Colascione
2019-04-10 17:35             ` dancol
2019-04-11  3:15           ` Alexei Starovoitov
2019-04-11  3:15             ` Alexei Starovoitov
2019-04-11  3:15             ` alexei.starovoitov
2019-04-11 16:30             ` Joel Fernandes
2019-04-11 16:30               ` Joel Fernandes
2019-04-11 16:30               ` joel
2019-04-14 19:38             ` Olof Johansson
2019-04-14 19:38               ` Olof Johansson
2019-04-14 19:38               ` olof
2019-04-15  9:41               ` Enrico Weigelt, metux IT consult
2019-04-15  9:41                 ` Enrico Weigelt, metux IT consult
2019-04-15  9:41                 ` lkml
2019-04-15 13:52                 ` Joel Fernandes
2019-04-15 13:52                   ` Joel Fernandes
2019-04-15 13:52                   ` joel
2019-04-15 14:05               ` Joel Fernandes
2019-04-15 14:05                 ` Joel Fernandes
2019-04-15 14:05                 ` joel
2019-04-15 14:41               ` Steven Rostedt
2019-04-15 14:41                 ` Steven Rostedt
2019-04-15 14:41                 ` rostedt
2019-04-16  3:50                 ` Kees Cook
2019-04-16  3:50                   ` Kees Cook
2019-04-16  3:50                   ` keescook
2019-04-16 12:33                   ` Steven Rostedt
2019-04-16 12:33                     ` Steven Rostedt
2019-04-16 12:33                     ` rostedt
2019-04-16 12:49                     ` Greg Kroah-Hartman
2019-04-16 12:49                       ` Greg Kroah-Hartman
2019-04-16 12:49                       ` gregkh
2019-04-16 13:04                       ` Joel Fernandes
2019-04-16 13:04                         ` Joel Fernandes
2019-04-16 13:04                         ` joel
2019-04-16 13:32                         ` Karim Yaghmour
2019-04-16 13:32                           ` Karim Yaghmour
2019-04-16 13:32                           ` karim.yaghmour
2019-04-16 13:45                           ` Steven Rostedt
2019-04-16 13:45                             ` Steven Rostedt
2019-04-16 13:45                             ` rostedt
2019-04-16 14:21                             ` Joel Fernandes
2019-04-16 14:21                               ` Joel Fernandes
2019-04-16 14:21                               ` joel
2019-04-16 14:22                             ` Greg Kroah-Hartman
2019-04-16 14:22                               ` Greg Kroah-Hartman
2019-04-16 14:22                               ` gregkh
2019-04-16 14:43                               ` Steven Rostedt
2019-04-16 14:43                                 ` Steven Rostedt
2019-04-16 14:43                                 ` rostedt
2019-04-16 16:42                                 ` Olof Johansson
2019-04-16 16:42                                   ` Olof Johansson
2019-04-16 16:42                                   ` olof
2019-04-16 16:46                               ` Alexei Starovoitov
2019-04-16 16:46                                 ` Alexei Starovoitov
2019-04-16 16:46                                 ` alexei.starovoitov
2019-04-16 16:57                                 ` Olof Johansson
2019-04-16 16:57                                   ` Olof Johansson
2019-04-16 16:57                                   ` olof
2019-04-16 17:22                                   ` Joel Fernandes
2019-04-16 17:22                                     ` Joel Fernandes
2019-04-16 17:22                                     ` joel
2019-04-16 17:30                                   ` Alexei Starovoitov
2019-04-16 17:30                                     ` Alexei Starovoitov
2019-04-16 17:30                                     ` alexei.starovoitov
2019-04-16 16:47                           ` Olof Johansson
2019-04-16 16:47                             ` Olof Johansson
2019-04-16 16:47                             ` olof
2019-04-10 19:19       ` Arnd Bergmann
2019-04-10 19:19         ` Arnd Bergmann
2019-04-10 19:19         ` arnd
2019-04-12 16:16         ` Enrico Weigelt, metux IT consult
2019-04-12 16:16           ` Enrico Weigelt, metux IT consult
2019-04-12 16:16           ` lkml
2019-04-12 17:25           ` Steven Rostedt
2019-04-12 17:25             ` Steven Rostedt
2019-04-12 17:25             ` rostedt
2019-04-08 20:52   ` Karim Yaghmour
2019-04-08 20:52     ` Karim Yaghmour
2019-04-08 20:52     ` karim.yaghmour
2019-04-10 15:15     ` Olof Johansson
2019-04-10 15:15       ` Olof Johansson
2019-04-10 15:15       ` olof
2019-04-10 15:44       ` Daniel Colascione
2019-04-10 15:44         ` Daniel Colascione
2019-04-10 15:44         ` dancol

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKOZuetS6Bg0ubxQgCBKVKeWOzuwH_C=nCRn-OPmHYJvs6sybQ@mail.gmail.com' \
    --to=dancol@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=ast@kernel.org \
    --cc=atishp04@gmail.com \
    --cc=corbet@lwn.net \
    --cc=dan.j.williams@intel.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=groeck@chromium.org \
    --cc=joel@joelfernandes.org \
    --cc=karim.yaghmour@opersys.com \
    --cc=keescook@chromium.org \
    --cc=kernel-team@android.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=linux@manojrajarao.com \
    --cc=mhiramat@kernel.org \
    --cc=olof@lixom.net \
    --cc=qais.yousef@arm.com \
    --cc=rdunlap@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=shuah@kernel.org \
    --cc=yamada.masahiro@socionext.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.