From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
James Clark <james.clark@linaro.org>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: Re: [PATCH 04/12] perf debuginfo: Let the user skip and disable debuginfod fetches
Date: Wed, 16 Sep 2026 11:53:55 -0700 [thread overview]
Message-ID: <aqrlw1YzYHFBdvcz@google.com> (raw)
In-Reply-To: <20260916114740.48230-5-acme@kernel.org>
On Wed, Sep 16, 2026 at 08:47:31AM -0300, Arnaldo Carvalho de Melo wrote:
> From: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> When a fetch is in progress, the way it prints progress is how one
> gets out of it: 's' aborts the current fetch via the debuginfod
> client's progress callback protocol and remembers the build ID, so
> that the rest of the session doesn't ask for it again, the user may
> have skipped it for being too big; 'd' additionally disables debuginfod
> for the rest of the session, clearing DEBUGINFOD_URLS so that libdwfl's
> own client, that reads it in every query, stops fetching too, and, using
> perf_config__set_variable(), moved to util/config.c in the previous
> patch, writes core.debuginfod=false to the configuration file directly,
> the user's ~/.perfconfig or the one named by PERF_CONFIG, the same
> rewrite 'perf config' does -- the comments are not preserved, as the
> config set carries just the key-value pairs -- and SIGINT, SIGQUIT and
> SIGTERM are intercepted while the terminal is in raw mode, so that it is
> restored and the signal is re-raised when the user interrupts a fetch.
>
> In the TUI nothing is shown yet, printing to stderr would garble the
> browser display and draining stdin would eat the keys the browser
> wants, that comes in the next patch.
>
> The interaction state -- the terminal settings, the signal dispositions
> and the progress and cancellation state -- is process global, so the
> fetches stay serialized: a second fetch resetting the cancellation
> state would drop the 's'/'d' keypress that was meant for the fetch
> already in progress, and the serialization the lookup state needs
> already provides the lock the interaction state uses.
>
> Since the debuginfo fetching this builds on is opt-out, a fetch that
> the user asked to skip is not restarted by the next request for the
> same build ID in the same session, it is remembered as a cancellation
> on the misses list, where the debug message can tell it apart from a
> plain miss.
>
> Assisted-by: LLM
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> ---
[SNIP]
> +/*
> + * The stdio fetch UI: the terminal is in raw mode, see
> + * debuginfod__fetch(), so the keypresses are on stdin, drain them.
> + */
> +static void debuginfod__poll_cancel_keys(void)
> +{
> + char ch;
> +
> + while (read(STDIN_FILENO, &ch, 1) == 1)
> + debuginfod__cancel_key(ch);
Isn't it block indefinitely when users don't press any key? I'm curious
how it can escape from the loop when it finishes to fetch.
Thanks,
Namhyung
> +}
> +
> +/*
> + * Print a warning and a progress indicator when the debuginfod client
> + * ends up fetching a file, which can be big, such as the vmlinux for a
> + * kernel profiled on another machine or before it got upgraded, so that
> + * users know perf is not stuck, and let them bail out: 's' skips this
> + * fetch and remembers the build ID, so that the rest of the session
> + * doesn't ask for it again, 'd' also disables debuginfod for the rest
> + * of the session.
> + *
> + * The client invokes this both while fetching, where 'a' is the number
> + * of bytes transferred so far and 'b' the total size, zero when it
> + * doesn't know it yet, and, before committing to a server, from the
> + * cache cleanup, that scans the debuginfod client cache, with 'a' being
> + * the number of cache files scanned so far and 'b' zero.
> + *
> + * In the stdio case the progress goes to stderr, a \r terminated line,
> + * the keys are drained from stdin, that debuginfod__fetch() put in raw
> + * mode.
> + */
> +static int debuginfod_progress_fn(debuginfod_client *c __maybe_unused,
> + long a, long b)
> +{
> + if (debuginfod_signal)
> + return 1;
> +
> + if (!isatty(STDERR_FILENO) || use_browser)
> + return 0;
> +
> + if (isatty(STDIN_FILENO)) {
> + debuginfod__poll_cancel_keys();
> + if (debuginfod_fetch_cancelled)
> + return 1;
> + }
> +
> + if (!debuginfod_progress_started) {
> + fprintf(stderr, "Fetching debuginfo by build ID from the debuginfod servers, this may take a while for large files such as the vmlinux, press 's' to skip, 'd' to skip and disable\n");
> + debuginfod_progress_started = true;
> + }
> +
> + if (a >= 0) {
> + if (b > 0)
> + fprintf(stderr, " %ld/%ld MiB fetched\r", a >> 20, b >> 20);
> + else
> + fprintf(stderr, " %ld MiB fetched\r", a >> 20);
> + }
> +
> + return 0;
> +}
next prev parent reply other threads:[~2026-09-16 18:54 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 11:47 [PATCH v6 0/12] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 01/12] perf test: Skip data_type_profiling when the PMU cannot record memory events Arnaldo Carvalho de Melo
2026-09-16 11:53 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 02/12] perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod Arnaldo Carvalho de Melo
2026-09-16 11:57 ` sashiko-bot
2026-09-16 17:59 ` Ian Rogers
2026-09-16 19:02 ` Arnaldo Carvalho de Melo
2026-09-16 21:28 ` Ian Rogers
2026-09-16 18:42 ` Namhyung Kim
2026-09-16 11:47 ` [PATCH 03/12] perf config: Move perf_config__set_variable() to util/config.c Arnaldo Carvalho de Melo
2026-09-16 12:01 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 04/12] perf debuginfo: Let the user skip and disable debuginfod fetches Arnaldo Carvalho de Melo
2026-09-16 11:59 ` sashiko-bot
2026-09-16 18:53 ` Namhyung Kim [this message]
2026-09-16 21:27 ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 05/12] perf debuginfo: Show the debuginfod fetch progress and keys in the TUI Arnaldo Carvalho de Melo
2026-09-16 12:00 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 06/12] perf symbol: Fall back to fetching the vmlinux by build ID Arnaldo Carvalho de Melo
2026-09-16 12:05 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 07/12] perf annotate-data: Show the sample count in the data-type browser Arnaldo Carvalho de Melo
2026-09-16 11:55 ` sashiko-bot
2026-09-16 21:28 ` Namhyung Kim
2026-09-22 12:52 ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 08/12] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-09-16 11:57 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 09/12] perf scripts: Add perf-stuck, to tell where a running perf is stuck Arnaldo Carvalho de Melo
2026-09-16 12:00 ` sashiko-bot
2026-09-16 11:47 ` [PATCH 10/12] perf annotate-data: Resolve type DIEs in the debug file they came from Arnaldo Carvalho de Melo
2026-09-16 12:01 ` sashiko-bot
2026-09-16 21:44 ` Namhyung Kim
2026-09-17 14:07 ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 11/12] perf mem record: Request PERF_SAMPLE_CPU by default Arnaldo Carvalho de Melo
2026-09-16 12:06 ` sashiko-bot
2026-09-16 21:50 ` Namhyung Kim
2026-09-16 11:47 ` [PATCH 12/12] perf mem record: Use the IBS swfilt filter when available Arnaldo Carvalho de Melo
2026-09-16 12:00 ` sashiko-bot
2026-09-16 21:59 ` Namhyung Kim
2026-09-18 3:35 ` Ravi Bangoria
2026-09-18 15:44 ` Arnaldo Carvalho de Melo
2026-09-19 2:38 ` Ravi Bangoria
2026-09-16 22:27 ` [PATCH v6 0/12] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Namhyung Kim
2026-09-17 9:04 ` Arnaldo Melo
-- strict thread matches above, loose matches on Subject: below --
2026-09-16 18:32 Arnaldo Carvalho de Melo
2026-09-16 18:32 ` [PATCH 04/12] perf debuginfo: Let the user skip and disable debuginfod fetches Arnaldo Carvalho de Melo
2026-09-16 18:46 ` sashiko-bot
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=aqrlw1YzYHFBdvcz@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=williams@redhat.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.