Usage of DTRACE_PROBE macro from sdt.h in kernel modules

Mark Johnston markj at freebsd.org
Tue Sep 2 20:44:47 UTC 2014


On Tue, Sep 02, 2014 at 01:24:47PM -0700, Shrikanth Kamath wrote:
> Adding a DTRACE_PROBE(name) in a kernel module does not create the SDT
> probe. I added
> the following to the module file before using DTRACE_PROBE.

Somewhat confusingly, DTRACE_PROBE* shouldn't be used in the kernel. It's
there for compatibility with the DTrace probes in ZFS, which use the SDT
interfaces in illumos. The SDT_PROBE* macros should be used instead. If
you grep the kernel sources, you'll find lots of examples of SDT providers
and probes.

> #include "opt_kdtrace.h"
> #include <sys/sdt.h>
> 
> function_foo() {
> ...
> +       DTRACE_PROBE(name);
> ...
> }
> 
> I figured the sdt.h does declare SDT_PROVIDER_DECLARE(set); but that
> is not helping. Was expecting a sdt probe added under provider 'set'.

SDT_PROVIDER_DEFINE() is used to define a provider.
SDT_PROVIDER_DECLARE() just adds a declaration, so it won't result in
anything being added to the SDT provider linker set in the corresponding
kld.

So SDT_PROVIDER_DEFINE() should be used once to define a new provider,
and the provider can be made visible across multiple files using
SDT_PROVIDER_DECLARE().

> 
> The SDT probe creation returns from sdt_kld_load from here
> 
>        if (linker_file_lookup_set(lf, "sdt_providers_set", &begin, &end, NULL))
>                 return;
> 
> I did a nm on the kernel module and did not find anything matching
> "sdt_providers_set"
> 
> nm -a module.ko | grep sdt
> 
> 00000000 r __set_sdt_probes_set_sym_sdt_sdt______func____LINE__.103790
> 
>          U __start_set_sdt_probes_set
> 
>          U __stop_set_sdt_probes_set
> 
>          U sdt_probe_func
> 
>          U sdt_provider_sdt
> 
> 000006c0 d sdt_sdt______func____LINE__.103789
> 
> Can't seem to figure how to get the SDT probe created by using
> DTRACE_PROBE macro in a kernel module.

In addition to the comments above, I suggest taking a look at the SDT(9)
man page, which has a few examples.

Thanks,
-Mark


More information about the freebsd-dtrace mailing list