Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3113716yba; Mon, 8 Apr 2019 11:24:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqwOXA2+HB6axHGqNaW7t99qVKqMkHRCgYMYWLJqqi9EP8B9/k0KXCPDEDEnWNrSJVygwNaW X-Received: by 2002:a17:902:9341:: with SMTP id g1mr32358859plp.81.1554747859360; Mon, 08 Apr 2019 11:24:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554747859; cv=none; d=google.com; s=arc-20160816; b=qzlC6uuxgGEz+Cn+EXdWFQEbG3Oy8zS1ZyYNWVAI7skQLvOpncRvklzhf3559peD+Z uJFdXo9yGxRA/G1yj3eIN+ssiujx3C8do0qAvSIOvqJg0yzD/c4bPt0j4K/cyOW6LY3B LouA21r5NoG+y4nfpy40ZYgdt/r3UZuc9A8NbnDmM/c14IVj4GNIgwV9c/lS7TjtMDdr wY9RRtXys5nErhYonq0lzkNDfx1Suq4ED4XXAoQMRH8cKUMentpNFcLqwUvHgeLMXZ2B jSJuyfRU66b9vqbTFmfddVx9bm2BDAh0O93PI1tAQd7RUwsaeSDMGeT4W8XOgbbpUoNF +l3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=iTUAGD6lWza4tKmi+pA/GqOUIGhro2T5N3WoQ+3jgyE=; b=Vkn09FZOXYAO6dgay4CCrxD00getu/Ar3X5K1fcHzqzlpawwChZrf7hXYk+FvoXLLe 4SuZorqliubhLekganWtbR1kwAi/782f2wCKaMeYzNuLMTdI4qxMCmgTb4Iu+V30OmvN 15u/64hRgl9k78v2R+pcMBJ6nLO7G9APiCRd1szhc8JGcH00QOVRXvgOCi+nYrT/u5VU ahPfHTH9Tz0p3RZ5Ntvna4dISZh5/JtPLHY7PwmS9Rm1iIlkIXbbR5xIeQnCxS8XIOkE Ej8S5eyike4qFmduMN0glTlMQD7dThzNUA6HAOltcmhG5ETEM8e2ZKzM5islOjx9WQhf fECA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lixom-net.20150623.gappssmtp.com header.s=20150623 header.b=kYBqsms4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u4si17407276pga.245.2019.04.08.11.24.04; Mon, 08 Apr 2019 11:24:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@lixom-net.20150623.gappssmtp.com header.s=20150623 header.b=kYBqsms4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729051AbfDHQyH (ORCPT + 99 others); Mon, 8 Apr 2019 12:54:07 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:37990 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728995AbfDHQyH (ORCPT ); Mon, 8 Apr 2019 12:54:07 -0400 Received: by mail-it1-f196.google.com with SMTP id f22so194161ita.3 for ; Mon, 08 Apr 2019 09:54:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lixom-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=iTUAGD6lWza4tKmi+pA/GqOUIGhro2T5N3WoQ+3jgyE=; b=kYBqsms4GyP2kEAhIkWfhkPdLjMOxT9glTqJSYGlAbP7WcJXOaCvc6t9QIZ6wcM/h+ Qu+uCoLvLKjC/sCtJxRMpHTrTYUFOrukcPgGjkY+8VfYBMIY2TgAB3otfGn4aC3yZ+oL MNXXtIGNuFb6z3lEeErFuntZ/f301f5F0+xqNx0L/Sen9u9uVMNnZrs24Ievi7yZpNGb Ny5RZ2sm06AkR2RhI4yg2Jp5aqBMKq0l7wNiLpFsVssB417UzE0xLdjZ9tc6TtUYsBfU SLTh9Khpk6nmhGl8/y24ZvS0H2gyN3BA8/3EgJCJ/Ey8E4AhSS3LLQUbE/yEfHnn9Q2p rTjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=iTUAGD6lWza4tKmi+pA/GqOUIGhro2T5N3WoQ+3jgyE=; b=r/3iLtZhxfgJs3bvCBWwDpdTlmDKOps8aOVSYd/OBcLSaVLiJSIB+zBsvyL9kxOyGn 4dOohIVz5KrqLv1zkz6E2Nz2bndboj73oUUPJjm3CGOrzXj8SfT98B8/ULAkxXZbhFsm UV09MscXgOgVQrHoWPu2PMPoDcZPqJ2IL2SoamiEklgFKhxgnVWGZSbzWftXpL/7pTJw ws80SnCJo5jRtk/FcA5VxeEqrgAgF4jdmr5h3Rl6cqq97YbXt92a0W5f9TnGqirQG1U6 5giBbGA6vYMF1UNyX/27gI4e8EXM97PCGv7i2S2fd8MUSJ51VIW/i0PnlBpHX7AS8/Hc jfeQ== X-Gm-Message-State: APjAAAX969QVMcMBRTUVILnV2ypQXuSli8RQ3OFJ0p2KLmX1A/Q5e1O2 aHP5HTq8wUWsG5ZzOXUCGuqW5tDz0T36g9nFswPk9w== X-Received: by 2002:a24:7c9:: with SMTP id f192mr2921343itf.97.1554742446016; Mon, 08 Apr 2019 09:54:06 -0700 (PDT) MIME-Version: 1.0 References: <20190320163116.39275-1-joel@joelfernandes.org> In-Reply-To: From: Olof Johansson Date: Mon, 8 Apr 2019 09:53:54 -0700 Message-ID: Subject: Re: [PATCH v5 1/3] Provide in-kernel headers to make extending kernel easier To: Daniel Colascione Cc: Joel Fernandes , Linux Kernel Mailing List , Qais Yousef , Dietmar Eggemann , Manoj Rao , Andrew Morton , Alexei Starovoitov , atish patra , Dan Williams , Greg Kroah-Hartman , Guenter Roeck , Jonathan Corbet , Karim Yaghmour , Kees Cook , Android Kernel Team , "open list:DOCUMENTATION" , "open list:KERNEL SELFTEST FRAMEWORK" , linux-trace-devel@vger.kernel.org, Masahiro Yamada , Masami Hiramatsu , Randy Dunlap , Steven Rostedt , Shuah Khan , Yonghong Song Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Apr 8, 2019 at 9:37 AM Daniel Colascione wrote: > > On Mon, Apr 8, 2019 at 9:29 AM Olof Johansson wrote: > > > > Hi, > > > > On Wed, Mar 20, 2019 at 9:31 AM Joel Fernandes (Google) > > 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) > > > > 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. Not on this thread, but maybe on others. Since they weren't linked and referenced, I didn't find them. Having them summarized in the patch description would be a great idea. > The tarball in proc approach is a simple, > pragmatic approach that allows makes a lot of scenarios Just Work > where they didn't before. "My pragmatic solution, your messy hack". It's an awkward solution that will now be permanently locked in due to the /proc interface being an ABI. > Approaches like a new filesystem, a > mountable block device, a custom debuginfo format, and so on add > complexity without providing concrete gains in functionality. It definitely provides concrete gains in functionality, in particular it provides a significantly less fragile way of providing the data such that having it out of sync with the running kernel is a lot less accident-prone. > We'd > like to get this work into the tree sooner rather than later. That has _never_ been a good argument for picking up something that will need to be supported as an ABI forever. We've solved these kind of things in the past without exporting tarballs from the kernel. We can do it again. I literally didn't hear a single valid reason for why this patch should go in from you. -Olof