Date: Tue, 3 Jun 2014 22:04:09 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Ian Lepore <ian@freebsd.org> Cc: Adrian Chadd <adrian@freebsd.org>, Marcel Moolenaar <marcel@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, Marcel Moolenaar <marcel@xcllnt.net>, "src-committers@freebsd.org" <src-committers@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org> Subject: Re: svn commit: r266974 - in head/sys: dev/dc dev/fxp dev/mii dev/netmap kern net Message-ID: <20140603212553.P1018@besplex.bde.org> In-Reply-To: <1401735801.20883.103.camel@revolution.hippie.lan> References: <201406021754.s52Hsd1B039620@svn.freebsd.org> <CAJ-VmonRqXrzrqQys_9s7-o8DFmOE_c_BZWupezm0i%2BW7E09vA@mail.gmail.com> <CAJ-VmonDJCLYWBPiz1ntFRm8aj4WQd5iHMKK0Wm3hcdjZmxghw@mail.gmail.com> <DA4CB2BA-A551-47A4-9E44-766FA29E2EF2@xcllnt.net> <1401735801.20883.103.camel@revolution.hippie.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 2 Jun 2014, Ian Lepore wrote: > On Mon, 2014-06-02 at 11:42 -0700, Marcel Moolenaar wrote: >> On Jun 2, 2014, at 11:27 AM, Adrian Chadd <adrian@freebsd.org> wrote: >> >>> .. and actually, bikeshedding for a moment, would we be able to move a >>> lot of these accessor methods over to inlines? Would that break the >>> Juniper way of doing things? >> >> That would definitely break Juniper as it doesn't give a stable >> ABI. >> >> I've suggested an approach that allows for both, but it was deemed >> unnecessary. The argument being that the function call overhead is >> negligible. >> >> We can always revisit that decision if needed... I thought it was obviously necessary. Juniper gets the stable ABI and slowness, while the default is to have the same code as before, except it is obfuscated by macros or inline functions. > In my experience, function call overhead is anything but minimal, > especially on ARM platforms. This is of course machine-dependent. It is not very large on modern x86. It was large on old x86. I think it needs mainly deep pipelines and out of order execution to be fase. Testing on old Athlon64 showed that the overhead is quite large even on modern x86. Direct accesses to a memory variable can be done at 2 per cycle in a 4-way unrolled loop, but the best I could find for accessor(&var) in a function call was 1 per 8 cycles, with unrolling making the accesses slower. 16 times slower. The unrolled loop is favourable to the simple operation of a memory load or store of a single memory (in-cache) variable, but also to calling a single accessor function. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140603212553.P1018>