[DTrace-devel] [PATCH v2] sdt: consolidate the SDT infrastructure in its own provider framework
Eugene Loh
eugene.loh at oracle.com
Thu May 18 23:32:52 UTC 2023
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
with some notes...
On 5/18/23 15:30, Kris Van Hees via DTrace-devel wrote:
> diff --git a/libdtrace/dt_provider_sdt.c b/libdtrace/dt_provider_sdt.c
> new file mode 100644
> @@ -0,0 +1,165 @@
> +/*
> + * Oracle Linux DTrace.
> + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
2021?
> + * Licensed under the Universal Permissive License v 1.0 as shown at
> + * http://oss.oracle.com/licenses/upl.
> + *
> + * Provider support code for tracepoint-based probes.
> + */
> +int
> +dt_sdt_populate(dtrace_hdl_t *dtp, const char *prvname, const char *modname,
> + const dt_provimpl_t *ops, const dtrace_pattr_t *pattr,
> + const probe_arg_t *probe_args, const probe_dep_t *probes)
> +{
> + dt_provider_t *prv;
> + const probe_arg_t *arg;
> + sdt_data_t *sdp;
> + int n = 0;
> +
> + sdp = dt_alloc(dtp, sizeof(sdt_data_t));
> + if (sdp == NULL)
> + return 0;
> +
> + sdp->probes = probes;
> + sdp->probe_args = probe_args;
> + prv = dt_provider_create(dtp, prvname, ops, pattr, sdp);
> + if (prv == NULL)
> + return 0;
> +
> + /*
> + * Create SDT probes based on the probe_args list. Since each probe
> + * will have at least one entry (with argno == 0), we can use those
> + * entries to identify the probe names.
> + */
This seems a little weird to me. Why are we using the probe_args list
rather than the probes list? If we want to loop over probes, we should
loop over the probes list not the probe args list. To be fair, the
"probes" list is a little misnamed in that each probe is not listed just
once... it's more of a "probes dependencies" list. But at least we know
each probe will appear in the list. Meanwhile, some probes will not
have arguments, so we might expect such a probe not to appear in the
probe args list. Well, that objection is fixed because we require each
probe to show up in the args list even if it doesn't have any args.
And, magically, the probe arg "that doesn't exist" has argno==0, as the
comment block advertises. So my objection is not that this doesn't
work, but only that it's conceptually awkward.
> + for (arg = &probe_args[0]; arg->name != NULL; arg++) {
> + if (arg->argno == 0 &&
> + dt_probe_insert(dtp, prv, prvname, modname, "", arg->name,
> + NULL))
> + n++;
> + }
> +
> + return n;
> +}
> diff --git a/libdtrace/dt_provider_sdt.h b/libdtrace/dt_provider_sdt.h
> +/*
> + * Probe dependencies
> + *
> + * SDT probes are implemented using probes made available by other providers.
> + * THe probe dependency table associates each SDT probe with one or more probe
THe
> + * specifications (possibly containing wildcards). Each matching probe will
> + * have SDT lockstat probe added as a dependent probe.
lockstat?
> + */
> +typedef struct probe_dep {
> + const char *name; /* probe name */
> + dtrace_probespec_t spec; /* spec type */
> + const char *str; /* spec string */
> +} probe_dep_t;
> +
> +/*
> + * Probe signature specifications
> + *
> + * This table *must* group the arguments of probes. I.e. the arguments of a
> + * given probe must be listed in consecutive records.
Should args also be in order? E.g., does that impact user-visible
"dtrace -lv" output, where a user would expect to see args in order?
> + *
> + * A single probe entry that mentions only name of the probe indicates a probe
> + * that provides no arguments.
> + */
More information about the DTrace-devel
mailing list