I am running a small script (attached) that timestamps file opens and
closes.

When I am running it with real load I get tons of messages like

dtrace: 79575 drops on CPU 12
dtrace: 140709 drops on CPU 13
dtrace: 125092 drops on CPU 14
dtrace: 38129 drops on CPU 15
...

and sometimes

dtrace: error on enabled probe ID 4 (ID 10200: fbt:genunix:closeandsetf:entry): 
out of scratch space in action #2 at DIF offset 508
dtrace: error on enabled probe ID 2 (ID 6227: fbt:genunix:copen:return): out of 
scratch space in action #3 at DIF offset 28
dtrace: error on enabled probe ID 4 (ID 10200: fbt:genunix:closeandsetf:entry): 
out of scratch space in action #2 at DIF offset 508
dtrace: error on enabled probe ID 4 (ID 10200: fbt:genunix:closeandsetf:entry): 
out of scratch space in action #2 at DIF offset 508
dtrace: error on enabled probe ID 4 (ID 10200: fbt:genunix:closeandsetf:entry): 
out of scratch space in action #2 at DIF offset 508

Unfortunately DTrace is not telling what are these drops so I don't know
what limit to tune (and why they are happening in the first place).

----------------------------------------------------------------------
#!/usr/sbin/dtrace -Cs

#pragma ident $Id: openrace.d,v 1.2 2007/07/25 21:51:16 akolb Exp akolb $
#pragma D option aggsortrev
#pragma D option quiet
#pragma D option dynvarsize=4m

#include <sys/types.h>
#include <sys/file.h>


inline uf_info_t curufinfo = curthread->t_procp->p_user.u_finfo;
inline string curargs =  curpsinfo->pr_psargs;

inline string f_name[int fd] = (fd >= 0 && fd < 
curthread->t_procp->p_user.u_finfo.fi_nfiles ?
    (curufinfo.fi_list[fd].uf_file ?
        (curufinfo.fi_list[fd].uf_file->f_vnode->v_path != NULL ?
            cleanpath(curufinfo.fi_list[fd].uf_file->f_vnode->v_path) :
            "<unknown>") : 
        "<unknown>") :
    "<unknown>");

fbt::copen:entry
/curpsinfo->pr_projid == $1/
{
        self->opentime = walltimestamp;
        self->name = arg1;
        self->mode = !(args[2] & FREAD)  ? 'W' : (args[2] == FREAD ? 'R' : 'M');
}

fbt::copen:return
/self->opentime && arg1 >= 0/
{
        printf("%d\t%c O %s %s %s\n",
            self->opentime, self->mode, copyinstr(self->name),
            cwd,  curargs);
}

fbt::copen:return
/self->opentime/
{
        self->opentime = 0;
        self->name = 0;
        self->mode = 0;
}

fbt::closeandsetf:entry
/curpsinfo->pr_projid == $1/
{
        printf("%d\tC C %s %s %s\n",
            walltimestamp, f_name[arg0], cwd, curargs);
}
----------------------------------------------------------------------

- akolb
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to