All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kris Van Hees <kris.van.hees@oracle.com>
To: eugene.loh@oracle.com
Cc: dtrace@lists.linux.dev, dtrace-devel@oss.oracle.com
Subject: Re: [DTrace-devel] [PATCH 1/2] Add a cpuinfos BPF map
Date: Tue, 1 Apr 2025 01:36:16 -0400	[thread overview]
Message-ID: <Z+t7UAN7i+Dkpc5e@oracle.com> (raw)
In-Reply-To: <20250331214501.24126-1-eugene.loh@oracle.com>

This is not the way to go about this.  If, in order to implement the cpuinfo_t
argument to sched probes, a regular BPF array map is needed so that cpuinfo
data can be accessed for any given CPU id, then the existing map should be
replaced with the new one, and its use updated to access the new one.  That
way you can also keep the name of the map, etc...

Introducing this new map with exactly the same data, and then hoping to
deprecate the old one later is making things more messy.

On Mon, Mar 31, 2025 at 05:45:00PM -0400, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh@oracle.com>
> 
> The cpuinfo BPF map is a per-CPU map that has CPU information
> on each CPU for that CPU.
> 
> Add a cpuinfos BPF map that allows any CPU to access information
> for any other CPU.
> 
> For now, we retain the older per-CPU map.  If desired, a future
> patch can migrate existing uses of the per-CPU map to the new
> map, decommissioning the old one.  This would include map set up:
> 
> *)  libdtrace/dt_dlibs.c:   DT_BPF_SYMBOL(cpuinfo, DT_IDENT_PTR),
> 
> *)  libdtrace/dt_impl.h:    int dt_cpumap_fd;
> 
> *)  libdtrace/dt_bpf.c:     dtp->dt_cpumap_fd = ...
>     libdtrace/dt_bpf.c:     CREATE_MAP(cpuinfo)
> 
> and map use:
> 
> *)  bpf/get_agg.c
> *)  bpf/get_bvar.c
> *)  libdtrace/dt_cg.c
> *)  libdtrace/dt_prov_lockstat.c
> 
> Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
> ---
>  libdtrace/dt_bpf.c   | 13 +++++++++++++
>  libdtrace/dt_dlibs.c |  1 +
>  libdtrace/dt_impl.h  |  1 +
>  3 files changed, 15 insertions(+)
> 
> diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> index 6d42a96c7..8da51d6b9 100644
> --- a/libdtrace/dt_bpf.c
> +++ b/libdtrace/dt_bpf.c
> @@ -786,7 +786,20 @@ gmap_create_cpuinfo(dtrace_hdl_t *dtp)
>  	if (dtp->dt_cpumap_fd == -1)
>  		return -1;
>  
> +	dtp->dt_cpusmap_fd = create_gmap(dtp, "cpuinfos",
> +					BPF_MAP_TYPE_HASH,
> +					sizeof(uint32_t),
> +					sizeof(dt_bpf_cpuinfo_t), ncpus);
> +	if (dtp->dt_cpusmap_fd == -1)
> +		return -1;
> +
>  	rc = dt_bpf_map_update(dtp->dt_cpumap_fd, &key, data);
> +
> +	for (i = 0, ci = &conf->cpus[0]; i < ncpus && rc != -1; i++, ci++) {
> +		key = ci->cpu_id;
> +		rc = dt_bpf_map_update(dtp->dt_cpusmap_fd, &key, &data[ci->cpu_id]);
> +	}
> +
>  	dt_free(dtp, data);
>  	if (rc == -1)
>  		return dt_bpf_error(dtp,
> diff --git a/libdtrace/dt_dlibs.c b/libdtrace/dt_dlibs.c
> index 21df22a8a..0f19f3566 100644
> --- a/libdtrace/dt_dlibs.c
> +++ b/libdtrace/dt_dlibs.c
> @@ -61,6 +61,7 @@ static const dt_ident_t		dt_bpf_symbols[] = {
>  	DT_BPF_SYMBOL(agggen, DT_IDENT_PTR),
>  	DT_BPF_SYMBOL(buffers, DT_IDENT_PTR),
>  	DT_BPF_SYMBOL(cpuinfo, DT_IDENT_PTR),
> +	DT_BPF_SYMBOL(cpuinfos, DT_IDENT_PTR),
>  	DT_BPF_SYMBOL(dvars, DT_IDENT_PTR),
>  	DT_BPF_SYMBOL(gvars, DT_IDENT_PTR),
>  	DT_BPF_SYMBOL(lvars, DT_IDENT_PTR),
> diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
> index 68fb8ec53..a5e42801c 100644
> --- a/libdtrace/dt_impl.h
> +++ b/libdtrace/dt_impl.h
> @@ -390,6 +390,7 @@ struct dtrace_hdl {
>  	int dt_aggmap_fd;	/* file descriptor for the 'aggs' BPF map */
>  	int dt_genmap_fd;	/* file descriptor for the 'agggen' BPF map */
>  	int dt_cpumap_fd;	/* file descriptor for the 'cpuinfo' BPF map */
> +	int dt_cpusmap_fd;	/* file descriptor for the 'cpuinfos' BPF map */
>  	int dt_usdt_pridsmap_fd; /* file descriptor for the 'usdt_prids' BPF map */
>  	int dt_usdt_namesmap_fd; /* file descriptor for the 'usdt_names' BPF map */
>  	dtrace_handle_err_f *dt_errhdlr; /* error handler, if any */
> -- 
> 2.43.5
> 
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel@oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel

  parent reply	other threads:[~2025-04-01  5:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-31 21:45 [PATCH 1/2] Add a cpuinfos BPF map eugene.loh
2025-03-31 21:45 ` [PATCH 2/2] Clean up sched provider trampoline FIXMEs eugene.loh
2025-04-01  5:36 ` Kris Van Hees [this message]
2025-04-01 22:54   ` [DTrace-devel] [PATCH 1/2] Add a cpuinfos BPF map Eugene Loh
2025-04-01 23:03     ` Kris Van Hees
2025-04-02 23:50       ` Eugene Loh
2025-04-02  9:37     ` Alan Maguire
2025-04-02 19:18       ` Eugene Loh

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=Z+t7UAN7i+Dkpc5e@oracle.com \
    --to=kris.van.hees@oracle.com \
    --cc=dtrace-devel@oss.oracle.com \
    --cc=dtrace@lists.linux.dev \
    --cc=eugene.loh@oracle.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.