#include #include #include #include #include int main (void) { #define N 100 unsigned long long t0; unsigned a,d; asm volatile ("rdtsc" : "=a" (a), "=d" (d)); t0 = (((unsigned long long) d) << 32) + a; int i; for (i = 0; i < N; ++i) { char buf[100000]; int fd = open ("/proc/cpuinfo", O_RDONLY); read(fd,buf,sizeof(buf)); close (fd); } unsigned long long tn; asm volatile ("rdtsc" : "=a" (a), "=d" (d)); tn = (((unsigned long long) d) << 32) + a; printf ("cpuinfo %llu cycles for %d accesses\n", tn - t0, N); asm volatile ("rdtsc" : "=a" (a), "=d" (d)); t0 = (((unsigned long long) d) << 32) + a; for (i = 0; i < N; ++i) { DIR *d = opendir ("/sys/devices/system/cpu"); while (readdir (d)) ; closedir (d); } asm volatile ("rdtsc" : "=a" (a), "=d" (d)); tn = (((unsigned long long) d) << 32) + a; printf ("readdir /sys %llu cycles for %d accesses\n", tn - t0, N); asm volatile ("rdtsc" : "=a" (a), "=d" (d)); t0 = (((unsigned long long) d) << 32) + a; for (i = 0; i < N; ++i) { struct stat64 st; stat64 ("/sys/devices/system/cpu", &st); } asm volatile ("rdtsc" : "=a" (a), "=d" (d)); tn = (((unsigned long long) d) << 32) + a; printf ("stat /sys %llu cycles for %d accesses\n", tn - t0, N); return 0; }