On 2014-05-11 12:38, Wojciech Puchar wrote:
did a simple test under FreeBSD/amd64 on intel atom 1.8GHz

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main() {
 int a;
 for(a=0;a<10000000;a++) read(0,(void*)&a,0);
}


takes over 5 seconds (10^10 cycles) to execute system call doing
nothing 10^7 times. it did this in a loop so even no cache refill
effect should make a difference.

so 1000 CPU cycles on 2-way superscalar in-order CPU per system call
with everything in L1 cache. for me it is way too much.

Huge overhead of passing through ancient x86 gate descriptors are not
present - FreeBSD uses syscall instruction.

i found that doing other system calls that too do - in effect -
nothing, doesn't change that figure much.

tried to browse FreeBSD sources and found it quite complex.

As i for now don't have dragonfly installed on real computer at
present (VM is not a place to make good test) so could anyone perform
that test on dragonfly?

Hi,

On a i5 2500K (x64):

antonioh@i5:~/temp$ time ./t_syscall
0.117u 1.390s 0:01.50 100.0%    2+66k 0+0io 0pf+0w

But for details see this ktrace dump: http://leaf.dragonflybsd.org/~tuxillo/archive/temp/ktrace_t_syscall.out.xz

Cheers,
Antonio Huete


Reply via email to