ウィスコンシン大学が公開している Operating System: Three Easy Pieces の第六章 “Direct Execution” より、システムコールのコストを計測する課題を書いた。
テクストはこれ。末尾に課題の説明がある: https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf
read(2) を 106 回叩いて、時間差をはかる。こういう結果が出た。
0.502876 microsec per syscall (averaged on 1000000 iterations)
コードはこれ
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
int main()
{
struct timeval lhs, rhs;
int fd = open("./a.txt", O_CREAT);
int n = 1000000;
gettimeofday(&lhs, NULL);
for (size_t i = 0; i < n; i++)
{
read(fd, NULL, 0);
}
gettimeofday(&rhs, NULL);
printf("%f microsec per syscall (averaged on %d iterations)\n"
, (float) ((rhs.tv_sec - lhs.tv_sec) * 1000000 + (rhs.tv_usec - lhs.tv_usec)) / n
, n);
close(fd);
return 0;
}