mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Wilson Felipe Pereira <wfelipe@google.com>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Shuhao Tan <tanshuhao@google.com>
Subject: Re: [PATCH 2/3] workqueue: expose per-workqueue stats in debugfs
Date: Thu, 22 Oct 2026 14:19:01 -1000	[thread overview]
Message-ID: <fa32d01cf66a6ca9818425f33bed0c96@kernel.org> (raw)
In-Reply-To: <p973mrs5tkuc.fsf@wfelipe-west1.c.googlers.com>

Hello, Wilson.

On Thu, Oct 22, 2026 at 10:46:19PM +0000, Wilson Felipe Pereira wrote:
> Why not drgn? For continuous monitoring, running drgn on every machine,
> with vmlinux debuginfo, and memory footprint from Python/drgn, while
> having CONFIG_PROC_KCORE available, it adds up. Having a simple file
> interface, it can be read from an existing monitoring collector.
>
> Why debugfs? If sysfs is picked, not all queues are in
> /sys/bus/workqueue/devices/. Using debugfs, a single file can include
> all queues. If you have a suggestion, I'm open to change this series.

I'm usually really skeptical when people suggest debugfs as a solution.
If you need continuous monitoring and drgn is too heavy, this is trivial
to do with BPF. The following bpftrace script prints the per-workqueue
stats and needs only BTF, no DWARF debuginfo, /proc/kcore or Python:

  BEGIN
  {
      printf("%-24s %10s %10s %12s %6s %6s %6s\n", "workqueue", "started",
             "completed", "cpu_time_us", "active", "cmw", "mayday");

      $whead = (uint64)kaddr("workqueues");
      $wpos = (uint64)((struct list_head *)$whead)->next;
      for ($i : 0..4096) {
          if ($wpos == $whead) {
              break;
          }
          $wq = (struct workqueue_struct *)($wpos - offsetof(struct workqueue_struct, list));
          $started = (uint64)0; $completed = (uint64)0; $cpu = (uint64)0;
          $cmw = (uint64)0; $mayday = (uint64)0; $active = 0;

          $phead = (uint64)$wq + offsetof(struct workqueue_struct, pwqs);
          $ppos = (uint64)((struct list_head *)$phead)->next;
          for ($j : 0..8192) {
              if ($ppos == $phead) {
                  break;
              }
              $pwq = (struct pool_workqueue *)($ppos - offsetof(struct pool_workqueue, pwqs_node));
              $started += $pwq->stats[PWQ_STAT_STARTED];
              $completed += $pwq->stats[PWQ_STAT_COMPLETED];
              $cpu += $pwq->stats[PWQ_STAT_CPU_TIME];
              $cmw += $pwq->stats[PWQ_STAT_CM_WAKEUP];
              $mayday += $pwq->stats[PWQ_STAT_MAYDAY];
              $active += $pwq->nr_active;
              $ppos = (uint64)((struct list_head *)$ppos)->next;
          }

          printf("%-24s %10lu %10lu %12lu %6d %6lu %6lu\n", $wq->name, $started,
                 $completed, $cpu, $active, $cmw, $mayday);
          $wpos = (uint64)((struct list_head *)$wpos)->next;
      }
      exit();
  }

It took an AI agent about a minute to write and test.

Thanks.

--
tejun

  reply	other threads:[~2026-10-23  0:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-22 15:53 [PATCH 0/3] " Wilson Felipe Pereira
2026-10-22 15:53 ` [PATCH 1/3] workqueue: preserve pwq->stats[] when unbound pwqs are released Wilson Felipe Pereira
2026-10-22 15:53 ` [PATCH 2/3] workqueue: expose per-workqueue stats in debugfs Wilson Felipe Pereira
2026-10-22 20:35   ` Tejun Heo
2026-10-22 22:46     ` Wilson Felipe Pereira
2026-10-23  0:19       ` Tejun Heo [this message]
2026-10-22 15:53 ` [PATCH 3/3] tools/workqueue: report queued items and retired stats in wq_monitor.py Wilson Felipe Pereira

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=fa32d01cf66a6ca9818425f33bed0c96@kernel.org \
    --to=tj@kernel.org \
    --cc=corbet@lwn.net \
    --cc=jiangshanlai@gmail.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=skhan@linuxfoundation.org \
    --cc=tanshuhao@google.com \
    --cc=wfelipe@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®