From patchwork Wed Oct 16 10:49:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 13838198 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A3F22076D1; Wed, 16 Oct 2024 10:49:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729075760; cv=none; b=FjmXH0AtgZKoNgtl0QIqI8nAg+024066R7AK5QUGVht0od8DAD9oDXaPEMYEK+X0yTgHRGoNJDzQCsuEHJi/YVA9WQR6jWBk9hVBNFdki+3IVhX1sfquExU/qo6BfVA4Pd66hGw/gHJNxvy+ZvmD52S6lgi7PSkgHBysZ4aUubE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729075760; c=relaxed/simple; bh=FEayBlbykrVTjYuMEz+BFZKS8/AP+nKNYBRbQnR+8s4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=AAzTAXaLefxsSq0fdrC/NZI+DUsPcKaAOwYx6xxp8n4SNcgtJ9zhhU7IGOYrOj2GzprIvpU1KBfJ4fm3bkplZUGvOhV1AolPxTvTtHD3lZzWtUEZnO9ACc9MgSErrUnengpqksx8HExVNVbicdRB8XB1B4PhIQ2R6bRAfTBLdo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QyzDllOb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QyzDllOb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 618FCC4CED6; Wed, 16 Oct 2024 10:49:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729075759; bh=FEayBlbykrVTjYuMEz+BFZKS8/AP+nKNYBRbQnR+8s4=; h=From:To:Cc:Subject:Date:From; b=QyzDllObsNdSWlHUkqNWjNdgY5TxfY6Zcics+F4XqWSkjiSn/FTT9/wmQTWHT/VAu RH23LQg4WDjEMJnK4CtzVb4cgvfEyNDfmHC/HqfpTtK3lqrna85wBR9jnxA4YM9JaF NmkLo0cNXjZuLvAPDmCuR2qgaCpgD2olRiLO1Ma9X/pX6b2NWs/OKl4i2Q7NjCl97g ccAcWnLZFJKtdU1mAsRLizmaoyhcW6m6/xkwG6tRClOQFAAmCgQkP6B2EoPlQODgrf Caq+l0xaUYqDHbvBsxQxen1gHcyI5YEeb8vh9NSnI5xa64EJizptqluvjbOXxX+vzO Y0RkV3IG7xACg== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Shuah Khan Cc: Masami Hiramatsu , Tom Zanussi , Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v6 0/3] tracing: Support poll on event hist file Date: Wed, 16 Oct 2024 19:49:15 +0900 Message-ID: <172907575534.470540.12941248697563459082.stgit@mhiramat.roam.corp.google.com> X-Mailer: git-send-email 2.47.0.rc1.288.g06298d1525-goog User-Agent: StGit/0.19 Precedence: bulk X-Mailing-List: linux-trace-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Hi, Here is the v6 patch to support polling on event 'hist' file. The previous version is here; https://lore.kernel.org/all/172398710447.295714.4489282566285719918.stgit@devnote2 This version is rebased on the ftrace/for-next branch of the linux-trace tree, and use global irq_work and wq instead of per-event one. Background ---------- There has been interest in allowing user programs to monitor kernel events in real time. Ftrace provides `trace_pipe` interface to wait on events in the ring buffer, but it is needed to wait until filling up a page with events in the ring buffer. We can also peek the `trace` file periodically, but that is inefficient way to monitor a randomely happening event. Overview -------- This patch set allows user to `poll`(or `select`, `epoll`) on event histogram interface. As you know each event has its own `hist` file which shows histograms generated by trigger action. So user can set a new hist trigger on any event you want to monitor, and poll on the `hist` file until it is updated. There are 2 poll events are supported, POLLIN and POLLPRI. POLLIN means that there are any readable update on `hist` file and this event will be flashed only when you call read(). So, this is useful if you want to read the histogram periodically. The other POLLPRI event is for monitoring trace event. Like the POLLIN, this will be returned when the histogram is updated, but you don't need to read() the file and use poll() again. Note that this waits for histogram update (not event arrival), thus you must set a histogram on the event at first. Usage ----- Here is an example usage: ---- TRACEFS=/sys/kernel/tracing EVENT=$TRACEFS/events/sched/sched_process_free # setup histogram trigger and enable event echo "hist:key=comm" >> $EVENT/trigger echo 1 > $EVENT/enable # Wait for update poll pri $EVENT/hist # Event arrived. echo "process free event is comming" tail $TRACEFS/trace ---- The 'poll' command is in the selftest patch. You can take this series also from here; https://git.kernel.org/pub/scm/linux/kernel/git/mhiramat/linux.git/log/?h=topic/event-hist-poll Thank you, --- Masami Hiramatsu (Google) (3): tracing/hist: Add poll(POLLIN) support on hist file tracing/hist: Support POLLPRI event for poll on histogram selftests/tracing: Add hist poll() support test include/linux/trace_events.h | 14 +++ kernel/trace/trace_events.c | 14 +++ kernel/trace/trace_events_hist.c | 100 +++++++++++++++++++- tools/testing/selftests/ftrace/Makefile | 2 tools/testing/selftests/ftrace/poll.c | 74 +++++++++++++++ .../ftrace/test.d/trigger/trigger-hist-poll.tc | 74 +++++++++++++++ 6 files changed, 275 insertions(+), 3 deletions(-) create mode 100644 tools/testing/selftests/ftrace/poll.c create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-poll.tc -- Masami Hiramatsu (Google)