RFC: A trial io provider for DTrace...

Fabian Keil freebsd-listen at fabiankeil.de
Mon May 28 17:11:27 UTC 2012


gnn at freebsd.org wrote:

> I have just put up the first patch that can give you something similar
> to the io provider in DTrace.  The patch is against HEAD of about a
> week ago.
> 
> You can find the patch here: freebsd.org:
> 
> http://people.freebsd.org/~gnn/dtio_provider.diff
> 
> Note that you need to create a src/sys/modules/dtrace/dtio/ directory
> for this patch, since patch doesn't seem to create directories for me.

Worked for me when applying with -p0.

> The arguments are not exactly the same as in Solaris, for instance I
> don't yet support the fileinfo_t, but, you can get to the devstat and
> bio structures via args[0] and args[1] respectively.
> 
> Here is an example of it working:
> 
> dtrace -n 'io:::start /args[0] != 0/{ trace(args[0]->bio_bcount)}'
> 
> Remember you need to be root to use DTrace.

Do you intent to eventually commit your patch to get dtrace working
with sudo? I've been using it since you posted it last October and
haven't seen any issues.
http://lists.freebsd.org/pipermail/freebsd-current/2011-October/028120.html

> I need to clean this up and get the translators working properly
> before I can check this in.
> 
> Also, note that this patch doesn't catch all I/O, but should get most
> of it, as it's hooked into the devstat system.
> 
> I will be adding manual pages for the internals of DTrace to our
> section 9, as well as, hopefully, writing up a wiki page on how to add
> your own kernel providers.
> 
> Comments welcome.

I got:

clang -c -O2 -pipe -fno-strict-aliasing  -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual
    /usr/src/sys/kern/subr_devstat.c:390:2: error: use of undeclared identifier 'bs'
            DTRACE_DEVSTAT_BIO_DONE();
            ^
    /usr/src/sys/kern/subr_devstat.c:76:41: note: expanded from macro 'DTRACE_DEVSTAT_BIO_DONE'
                    (*dtrace_io_done_probe)(dtio_done_id, bs, ds);
                                                          ^
    1 error generated.
    *** Error code 1

    Stop in /usr/obj/usr/src/sys/ZOEY.
    *** Error code 1

    Stop in /usr/src.
    *** [buildkernel] Error code 1

and used the following patch to get it to compile:

diff --git a/sys/kern/subr_devstat.c b/sys/kern/subr_devstat.c
index e2b6d21..732bf9c 100644
--- a/sys/kern/subr_devstat.c
+++ b/sys/kern/subr_devstat.c
@@ -73,7 +73,7 @@ uint32_t      dtio_wait_done_id;

 #define DTRACE_DEVSTAT_BIO_DONE() \
        if (dtrace_io_done_probe != NULL) \
-               (*dtrace_io_done_probe)(dtio_done_id, bs, ds);
+               (*dtrace_io_done_probe)(dtio_done_id, bp, ds);

Other than that the provider seems to work fine so far.

Thanks a lot.

Fabian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20120528/a16b4331/signature.pgp


More information about the freebsd-arch mailing list