This will contain pretty graphs of benchmarks of sigsafe benchmarks (a microbenchmark and a use in a real application). But I haven't made them yet. Until then, you're welcome to run the microbenchmark yourself. Try comparing the output from:
time build-myplatform/tests/bench_read_raw- this tests the libc's system call wrappers in a plain way without safe signal handling.
time build-myplatform/tests/bench_read_safe- this is sigsafe's handling. In theory, it should be very slightly slower than the libc's. In practice, it is actually slightly faster in some cases! (This implies a suboptimal libc.) Let me know if it is significantly slower. (It may be so on the Pentium IV, because I have yet to implement
time build-platform/tests/bench_read_select- this is a test with every read preceded by a
select, as is necessary in some cases with the self-pipe trick commonly used as an alternative to sigsafe. It should be about half the speed.
The real-world benchmark will likely be Apache. I've made a patch that eliminates a need to use
write for socket timeouts. There are actually no signals involved, but it's a very analogous situation. I expect to find that under platforms with high system call overhead (notably Darwin), it is noticeably faster. Unfortunately, I've run into hardware problems while benchmarking. Stay tuned...