Little micro-benchmarks to assess the performance overhead of context switching. timesyscall: Benchmarks the overhead of a system call. timectxsw: Benchmarks the overhead of context switching between 2 processes. timetctxsw: Benchmarks the overhead of context switching between 2 threads. timectxswws: Benchmarks the overhead of context switching between 2 processes using a working set of the size specified in argument. timetctxsw2: Benchmarks the overhead of context switching between 2 threads, by using a shed_yield() method. If you do taskset -a 1, all threads should be scheduled on the same processor, so you are really doing thread context switch. Then to be sure that you are really doing it, just do: strace -ff -tt -v taskset -a 1 ./timetctxsw2 Now why sched_yield() is enough for testing ? Because, it place the current thread at the end of the ready queue. So the next ready thread will be scheduled. I also added sched_setscheduler(SCHED_FIFO) to get the best performances. Update: RDTSC to get the tick time of each loop. In this benchmark, when you run cpubench.sh, you need give a parameters, and it will generate 4 files under $1/ In our new benchmark, we don’t generate the avg, instead we will get the cpu ticks for each loop. The data will be for post processing. To write your own script, please refer to the bare_metal_4_13.sh as a example.
systems-nuts/contextswitch
Little micro-benchmark for Linux to test the cost of context switching and system calls
CGPL-3.0