diff --git a/bench/Makefile b/bench/Makefile index 88aa51c5..4239d73c 100644 --- a/bench/Makefile +++ b/bench/Makefile @@ -5,6 +5,7 @@ include ../crosscompilemakefile.mak INITRDDIR:=../initrd LOCALBINARIES:=\ benchsyscall \ +benchctxswitch \ BINARIES:=$(addprefix $(INITRDDIR)/,$(LOCALBINARIES)) diff --git a/bench/benchctxswitch.cpp b/bench/benchctxswitch.cpp new file mode 100644 index 00000000..fa489b35 --- /dev/null +++ b/bench/benchctxswitch.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#include + +int main(int argc, char* argv[]) +{ + pid_t slavepid = fork(); + if ( slavepid < 0 ) { perror("fork"); return 1; } + if ( slavepid == 0 ) { while ( true ) { usleep(0); } exit(0); } + + uintmax_t start; + if ( uptime(&start) ) { perror("uptime"); return 1; } + uintmax_t end = start + 1ULL * 1000ULL; // 1 second + size_t count = 0; + uintmax_t now; + while ( !uptime(&now) && now < end ) { usleep(0); count += 2; /* back and forth */ } + printf("Made %zu context switches in 1 second\n", count); + + kill(slavepid, SIGKILL); + + return 0; +}