On Tuesday, November 27, 2012 01:41:46 AM Andrey Zonov wrote: > On 11/19/12 11:32 PM, Luigi Rizzo wrote: > > today i was comparing the performance of some netmap-related code > > on FreeBSD and Linux (RELENG_9 vs 3.2) and i was surprised to see that > > our system calls are significantly slower. > > On comparable hardware (i7-2600k vs E5-1650) the syscall > > getppid() takes about 95ns on FreeBSD and 38ns on linux. > > > > (i make sure not to use gettimeofday(), which in linux is through vdso, > > and getpid(), which is cached by glibc). > > > > Any idea on why there is this difference and whether/how > > we can reduce it ? > > This is the cost of blocking mutexes. Linux uses RCU instead [1]. > > Here are the numbers on current: > > $ time ./getppid 100000000 > > real 0m22.926s > user 0m2.252s > sys 0m20.669s > > After locking removing (patch below): > > $ time ./getppid 100000000 > > real 0m15.224s > user 0m2.355s > sys 0m12.868s > > Unfortunately, RCU can be used only in GPL code, but we can use "passive > serialization" for simple deref. And even more, it's already > implemented in NetBSD.
Of course, that is specific to getppid(). Micro-optimizing getppid() is probably not all that useful, and I suspect Luigi is more concerned about syscall overhead as it impacts other system calls. Perhaps compare getppid() on Linux with getpid() on FreeBSD. -- John Baldwin _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"