[DTrace-devel] [PATCH 2/4] bpf: store per-CPU drop counts in the 'cpuinfo' map
Kris Van Hees
kris.van.hees at oracle.com
Tue May 9 19:59:27 UTC 2023
On Tue, May 09, 2023 at 01:12:31PM -0400, Eugene Loh via DTrace-devel wrote:
> Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
> with one question...
>
> On 5/9/23 03:17, Kris Van Hees via DTrace-devel wrote:
> > Drop counters for principal and aggregation buffers are tracked per-CPU
> > and thus need to be stored per-CPU. The 'cpuinfo' map is a convenient
> > place to put those so add them in after the actual cpuinfo data for a
> > given CPU.
> >
> > Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> > ---
> > libdtrace/dt_bpf.c | 20 ++++++++++----------
> > libdtrace/dt_bpf_maps.h | 10 +++++++++-
> > 2 files changed, 19 insertions(+), 11 deletions(-)
> >
> > diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> > index f247d83d..3cf8ef89 100644
> > --- a/libdtrace/dt_bpf.c
> > +++ b/libdtrace/dt_bpf.c
> > @@ -604,22 +604,22 @@ gmap_create_buffers(dtrace_hdl_t *dtp)
> > static int
> > gmap_create_cpuinfo(dtrace_hdl_t *dtp)
> > {
> > - int i, fd, rc;
> > - uint32_t key = 0;
> > - dtrace_conf_t *conf = &dtp->dt_conf;
> > - size_t ncpus = conf->max_cpuid + 1;
> > - cpuinfo_t *data;
> > - cpuinfo_t *ci;
> > -
> > - data = dt_zalloc(dtp, ncpus * sizeof(cpuinfo_t));
> > + int i, fd, rc;
> > + uint32_t key = 0;
> > + dtrace_conf_t *conf = &dtp->dt_conf;
> > + size_t ncpus = conf->max_cpuid + 1;
> > + dt_bpf_cpuinfo_t *data;
> > + cpuinfo_t *ci;
> > +
> > + data = dt_zalloc(dtp, ncpus * sizeof(dt_bpf_cpuinfo_t));
> > if (data == NULL)
> > return dt_set_errno(dtp, EDT_NOMEM);
> > for (i = 0, ci = &conf->cpus[0]; i < ncpus; i++, ci++)
> > - memcpy(&data[ci->cpu_id], ci, sizeof(cpuinfo_t));
> > + memcpy(&data[ci->cpu_id].ci, ci, sizeof(cpuinfo_t));
> > fd = create_gmap(dtp, "cpuinfo", BPF_MAP_TYPE_PERCPU_ARRAY,
> > - sizeof(uint32_t), sizeof(cpuinfo_t), 1);
> > + sizeof(uint32_t), sizeof(dt_bpf_cpuinfo_t), 1);
> > if (fd == -1)
> > return -1;
> > diff --git a/libdtrace/dt_bpf_maps.h b/libdtrace/dt_bpf_maps.h
> > index e33748b7..074a95db 100644
> > --- a/libdtrace/dt_bpf_maps.h
> > +++ b/libdtrace/dt_bpf_maps.h
> > @@ -1,6 +1,6 @@
> > /*
> > * Oracle Linux DTrace.
> > - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
> > + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
> > * Licensed under the Universal Permissive License v 1.0 as shown at
> > * http://oss.oracle.com/licenses/upl.
> > */
> > @@ -13,6 +13,7 @@ extern "C" {
> > #endif
> > #include <stddef.h>
> > +#include <dtrace/conf.h>
> > typedef struct dt_bpf_probe dt_bpf_probe_t;
> > struct dt_bpf_probe {
> > @@ -29,6 +30,13 @@ struct dt_bpf_specs {
> > * drain this buffer */
> > };
> > +typedef struct dt_bpf_cpuinfo dt_bpf_cpuinfo_t;
> > +struct dt_bpf_cpuinfo {
> > + cpuinfo_t ci;
> > + uint64_t buf_drops;
> > + uint64_t agg_drops;
> > +};
>
> I realize this is the style of this file (and a few other places), but why
> not use the much more common practice of combining the typedef with the
> struct declaration. E.g.,
>
> typedef struct dt_bpf_cpuinfo {
> ...yadayada...
> } dt_bpf_cpuinfo_t;
I think it can go either way. I don't really see much of a preference (and I
know that e.g. the kernel source tree seems to be allergic to typedefs for
structs, so not much guidance there). I don't think it matters much, so
sticking with the style of the file seems reasonable?
> > +
> > #ifdef __cplusplus
> > }
> > #endif
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list