Re: syscall cost freebsd vs linux ?
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-unsubscribe@freebsd.org"
討論串 (同標題文章)
完整討論串 (本文為第 6 之 6 篇):