From owner-freebsd-dtrace@FreeBSD.ORG Thu May 30 06:14:33 2013 Return-Path: Delivered-To: freebsd-dtrace@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 1975F4C6 for ; Thu, 30 May 2013 06:14:33 +0000 (UTC) (envelope-from brendan.gregg@joyent.com) Received: from mail-pb0-x234.google.com (mail-pb0-x234.google.com [IPv6:2607:f8b0:400e:c01::234]) by mx1.freebsd.org (Postfix) with ESMTP id E8DCF14E for ; Thu, 30 May 2013 06:14:32 +0000 (UTC) Received: by mail-pb0-f52.google.com with SMTP id xa12so85266pbc.11 for ; Wed, 29 May 2013 23:14:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-gm-message-state; bh=HH3Y0VyZOQdq484QP5GhnduPGZyMdoauJWQak6JOm4s=; b=SwRJIHq+gNR1WEA9oPZOydP1mI8f0lGp6fsDJA6j32845O92nYzUuv2Hj0FH7nzt4S M4pir12V5rZWo/rxh2g5iOI9WZmP3XtJbZc2MeUW+25eDQ232YIUJ5CjwuyuZdvNEDGz rTTHdU4NKVGiUogLGteEafHaTsxSpkYb/uoNlOFJT8dpqcR5YRIZa9KQ/Khh/jZ9SU4u aX+Dxx1tUyIcgaZgy8me5V9t5K1uhG3Y+Sr3sv95SLVqjjlemg1xMDCb/koj9Zhcl0Ru 9UFcL0fpMUEwM19nBVX3FT5ojV8JGCeyUm9/uzO6b6Z7z2KYmPC1IMLnd8SRz40R1jVE LHTA== MIME-Version: 1.0 X-Received: by 10.68.196.231 with SMTP id ip7mr6256375pbc.61.1369894472687; Wed, 29 May 2013 23:14:32 -0700 (PDT) Received: by 10.70.94.233 with HTTP; Wed, 29 May 2013 23:14:32 -0700 (PDT) In-Reply-To: References: <20130530040705.GA40320@gloom> Date: Wed, 29 May 2013 23:14:32 -0700 Message-ID: Subject: Re: adding SDT probe functions with 6+ DTrace arguments From: Brendan Gregg To: Adam Leventhal X-Gm-Message-State: ALoCoQnZ8wvBj9uwJ21XrUCtZsUDNsar/F0Y/A73L2oni6cfdE1n5W+SVMAKXaY6m5dur9J+8kTm Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: rstone@freebsd.org, Mark Johnston , freebsd-dtrace@freebsd.org X-BeenThere: freebsd-dtrace@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "A discussion list for developers working on DTrace in FreeBSD." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 May 2013 06:14:33 -0000 G'Day Mark, As this might be interesting: to check that DTRACE_PROBE7 worked, in Solaris I had added an sdt:::test probe, which could be invoked by the DTrace test suite (sdt/tst.sdtargs.c) by calling uadmin() with A_SDTTEST: case A_SDTTEST: { DTRACE_PROBE7(test, int, 1, int, 2, int, 3, int, 4, int, 5, int, 6, int, 7); break; } Getting the tcp and ip providers working will be great. Brendan On Wed, May 29, 2013 at 11:02 PM, Adam Leventhal wrote: > Hey Mark, > > I'm just now familiarizing myself with the way that FreeBSD DTrace > handles SDT probes, but certainly having more arguments (as needed) > makes sense, and the approach you've taken seems in keeping with the > existing methodology. > > Adam > > On Wed, May 29, 2013 at 9:07 PM, Mark Johnston wrote: > > Hello, > > > > Does anyone have objections or comments on the patch below? It simply > > makes it possible to use the SDT_* macros to implement DTrace probes > > with more than 5 arguments. dtrace_probe() only takes 5 arguments, so > > some ugly casting is needed, but it works properly in my testing on > > amd64. In fact, there are a couple of bugs in the way that DTrace > > fetches the 6th argument (or the 7th, and so on) from the probe site, > > but I'll be fixing that soon as well, along with the test case that's > > supposed to detect this problem in the first place. > > > > I don't know of any existing SDT providers in FreeBSD that would use > > these macros, but the ip, iscsi and tcp providers will - hence my > > interest in making sure that this functionality works properly. > > > > Thanks! > > -Mark > > > > diff --git a/sys/sys/sdt.h b/sys/sys/sdt.h > > index 522e1f2..21edd53 100644 > > --- a/sys/sys/sdt.h > > +++ b/sys/sys/sdt.h > > @@ -91,6 +91,10 @@ > > #define SDT_PROBE_DEFINE3(prov, mod, func, name, sname, arg0, > arg1, arg2) > > #define SDT_PROBE_DEFINE4(prov, mod, func, name, sname, arg0, > arg1, arg2, arg3) > > #define SDT_PROBE_DEFINE5(prov, mod, func, name, sname, arg0, > arg1, arg2, arg3, arg4) > > +#define SDT_PROBE_DEFINE6(prov, mod, func, name, snamp, arg0, > arg1, arg2, \ > > + arg3, arg4, arg5) > > +#define SDT_PROBE_DEFINE7(prov, mod, func, name, snamp, arg0, > arg1, arg2, \ > > + arg3, arg4, arg5, arg6) > > > > #define SDT_PROBE0(prov, mod, func, name) > > #define SDT_PROBE1(prov, mod, func, name, arg0) > > @@ -98,6 +102,9 @@ > > #define SDT_PROBE3(prov, mod, func, name, arg0, arg1, arg2) > > #define SDT_PROBE4(prov, mod, func, name, arg0, arg1, arg2, arg3) > > #define SDT_PROBE5(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4) > > +#define SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4, arg5) > > +#define SDT_PROBE7(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4, arg5, \ > > + arg6) > > > > #else > > > > @@ -233,6 +240,27 @@ struct sdt_provider { > > SDT_PROBE_ARGTYPE(prov, mod, func, name, 3, arg3); \ > > SDT_PROBE_ARGTYPE(prov, mod, func, name, 4, arg4) > > > > +#define SDT_PROBE_DEFINE6(prov, mod, func, name, sname, arg0, > arg1, arg2, arg3,\ > > + arg4, arg5) \ > > + SDT_PROBE_DEFINE(prov, mod, func, name, sname); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 0, arg0); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 1, arg1); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 2, arg2); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 3, arg3); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 4, arg4); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 5, arg5); > > + > > +#define SDT_PROBE_DEFINE7(prov, mod, func, name, sname, arg0, > arg1, arg2, arg3,\ > > + arg4, arg5, arg6) \ > > + SDT_PROBE_DEFINE(prov, mod, func, name, sname); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 0, arg0); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 1, arg1); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 2, arg2); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 3, arg3); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 4, arg4); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 5, arg5); \ > > + SDT_PROBE_ARGTYPE(prov, mod, func, name, 6, arg6); > > + > > #define SDT_PROBE0(prov, mod, func, name) > \ > > SDT_PROBE(prov, mod, func, name, 0, 0, 0, 0, 0) > > #define SDT_PROBE1(prov, mod, func, name, arg0) > \ > > @@ -245,6 +273,27 @@ struct sdt_provider { > > SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, 0) > > #define SDT_PROBE5(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4) \ > > SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4) > > +#define SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4, arg5) \ > > + do { > \ > > + if (sdt_##prov##_##mod##_##func##_##name->id) > \ > > + (*(void (*)(uint32_t, uintptr_t, uintptr_t, > uintptr_t, \ > > + uintptr_t, uintptr_t, > uintptr_t))sdt_probe_func)( \ > > + sdt_##prov##_##mod##_##func##_##name->id, > \ > > + (uintptr_t)arg0, (uintptr_t)arg1, > (uintptr_t)arg2, \ > > + (uintptr_t)arg3, (uintptr_t)arg4, > (uintptr_t)arg5);\ > > + } while (0) > > +#define SDT_PROBE7(prov, mod, func, name, arg0, arg1, arg2, > arg3, arg4, arg5, \ > > + arg6) > \ > > + do { > \ > > + if (sdt_##prov##_##mod##_##func##_##name->id) > \ > > + (*(void (*)(uint32_t, uintptr_t, uintptr_t, > uintptr_t, \ > > + uintptr_t, uintptr_t, uintptr_t, uintptr_t)) > \ > > + sdt_probe_func)( > \ > > + sdt_##prov##_##mod##_##func##_##name->id, > \ > > + (uintptr_t)arg0, (uintptr_t)arg1, > (uintptr_t)arg2, \ > > + (uintptr_t)arg3, (uintptr_t)arg4, > (uintptr_t)arg5, \ > > + (uintptr_t)arg6); > \ > > + } while (0) > > > > typedef int (*sdt_argtype_listall_func_t)(struct sdt_argtype *, void *); > > typedef int (*sdt_probe_listall_func_t)(struct sdt_probe *, void *); > > _______________________________________________ > > freebsd-dtrace@freebsd.org mailing list > > https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace > > To unsubscribe, send any mail to "freebsd-dtrace-unsubscribe@freebsd.org > " > > > > -- > Adam Leventhal > CTO, Delphix > http://blog.delphix.com/ahl > _______________________________________________ > freebsd-dtrace@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace > To unsubscribe, send any mail to "freebsd-dtrace-unsubscribe@freebsd.org" > -- Brendan Gregg, Joyent http://dtrace.org/blogs/brendan