OK, By heart, not tested!

/*
To check how well we are allocating connections from memory instead of creating them. Of course a connection is merely a piece of memory and not a resource intense thing as
        a database connection. But stil.
*/
memcached*:::conn-allocate
{
        @["allocated"] = count();
}
memcached*:::conn-create
{
        @["created"] = count();
}

/*
        The above can be combined like:

        Must say I have never seen the comma separator while
        only specifying the probename.
*/

memcached*:::conn-allocate,
memcached*:::conn-create
{
        @[probename] =count();
}

/*
        How many system calls were there, and which one
        between allocation of a connection and the release
        of it.
*/

memcached*:::conn-allocate
{
        self->allocate = arg0;
}

memcached*:::conn-release
/self->allocate/
{
self->allocate = 0; /* Not sure if 0 is a valid value for a connID though. If that's the case this does not work */
}

syscall:::entry
/self->allocate/
{
        @syscalls[pid, probefunc] = count();
}


it is basically this way of using a combination of multiple providers that makes DTrace unique. If you use internal stats counters they just provide a story without context.

Have fun playing with it. Questions? Ask. Sometime I now an anwer ;^)

--Paul


On 7-mrt-2008, at 15:42, Roy Lyseng wrote:

Well, I hoped it would spur some more clever ideas...

I thought it could be useful if you have some problems with your application, and can use dtrace to track what operations are actually performed on one particular key.

But aggregations may probably be more interesting.

Roy

Paul van den Bogaard wrote:
Mmm, I think that if copyinstr(arg1) == '1234..." that your trace output will be rather dull :-)
--Paul
On 7-mrt-2008, at 14:37, Roy Lyseng wrote:
Another, slightly more advanced script is memcached-keytrace.d:

:memcached::command-set,command-add,command-delete,command-get
/pid == $target && copyinstr(arg1) == "123456789"/
{
    trace(copyinstr(arg1));
}

END
{
}

This one will trace set, add, delete and get commands applied to one specific key:

Invoke as:

dtrace -s ~/memcached/dtrace/memcached-trace.d -p 24167

Then run a telnet session:

telnet system 11211
Trying 9.9.9.9...
Connected to system.
Escape character is '^]'.
abcdefghij
ERROR
set 123456789 0 0 10
abcdefghij
STORED
delete 123456789 0 0
DELETED
get 123456789 0 0 0
END

And the dtrace script reports:

CPU     ID                    FUNCTION:NAME
  1  54165       complete_nread:command-set   123456789
  0  54159 process_delete_command:command-delete   123456789
  1  54160  process_get_command:command-get   123456789

Useful? Maybe...

Roy
Dustin Sallings wrote:
For those of us who haven't truly unleashed the power of dtrace, can you describe the kinds of things we can learn from this (perhaps with scripts)?
--Dustin Sallings (mobile)
On Mar 6, 2008, at 4:48, Trond Norbye <[EMAIL PROTECTED]> wrote:

On Mar 5, 2008, at 3:52 PM, Trond Norbye wrote:

The following patch adds a new configure-option (--enable- dtrace) that adds DTrace probes to various parts of memcached.

Please comment.

Trond

I discovered that I had some "leftovers" in this patch from before I fixed the comments regarding the large page support..

The attached version is replacement for the original patch.

Trond
<dtrace.patch.gz>

--------------------------------------------------------------------- ------------------------ Paul van den Bogaard [EMAIL PROTECTED]
ISV-E  -- ISV Engineering, Opensource Engineering group
Sun Microsystems, Inc phone: +31 334 515 918 Saturnus 1 extentsion: x (70)15918 3824 ME Amersfoort mobile: +31 651 913 354 The Netherlands fax: +31 334 515 001

------------------------------------------------------------------------ --------------------- Paul van den Bogaard [EMAIL PROTECTED]
ISV-E  -- ISV Engineering, Opensource Engineering group

Sun Microsystems, Inc phone: +31 334 515 918 Saturnus 1 extentsion: x (70)15918 3824 ME Amersfoort mobile: +31 651 913 354 The Netherlands fax: +31 334 515 001

Reply via email to