Date: Sun, 22 Nov 2015 13:50:31 +0300 From: Slawa Olhovchenkov <slw@zxy.spb.ru> To: Mark Johnston <markj@FreeBSD.org> Cc: freebsd-arch@FreeBSD.org Subject: Re: zero-cost SDT probes Message-ID: <20151122105031.GP48728@zxy.spb.ru> In-Reply-To: <20151122024542.GA44664@wkstn-mjohnston.west.isilon.com> References: <20151122024542.GA44664@wkstn-mjohnston.west.isilon.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Nov 21, 2015 at 06:45:42PM -0800, Mark Johnston wrote: > Hi, > > For the past while I've been experimenting with various ways to > implement "zero-cost" SDT DTrace probes. Basically, at the moment an SDT > probe site expands to this: > > if (func_ptr != NULL) > func_ptr(<probe args>); > > When the probe is enabled, func_ptr is set to dtrace_probe(); otherwise > it's NULL. With zero-cost probes, the SDT_PROBE macros expand to > > func(<probe args>); I am experimenting with overhead DTrace probes in userspace. Total executing time program w/o any probes 3% less then program with not enabled probes. With enabled probes (conditional probes too) -- each probe add about 0.7us. I am place DTrace probe inside inner loop, worst case. ===== #include <stdio.h> #include "probes.h" long primes[1000000] = { 3 }; long primecount = 1; int main(int argc, char **argv) { long divisor = 0; long currentprime = 5; long isprime = 1; while (currentprime < 1000000) { isprime = 1; PRIMES_PRIMECALC_START(currentprime); for(divisor=0;divisor<primecount;divisor++) { PRIMES_PRIMECALC_ITER(divisor); if (currentprime % primes[divisor] == 0) { isprime = 0; break; } } PRIMES_PRIMECALC_DONE(currentprime,isprime); if (isprime) { primes[primecount++] = currentprime; PRIMES_PRIMECALC_TABLESIZE(primecount); // printf("%d is a prime\n",currentprime); } currentprime = currentprime + 2; } printf("Total %ld primes\n", primecount); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20151122105031.GP48728>