[eiki@dagobah /tmp]$ cat tst.c #include #include #ifndef RDTSC_H_ #define RDTSC_H_ inline unsigned long long rdtsc() { unsigned long long ret; __asm__ volatile ("rdtsc" : "=A" (ret)); return ret; } #endif /* RDTSC_H_ */ int main() { unsigned long long bef, aft, dif; int i, j, k; struct timespec ts, tsrem; int interval[8] = { 1, 1000, 1000000, 3000000, 4000000, 5000000 }; k = 0; for(i = 0; i<10; i++) { printf("x=%016llx\n", rdtsc()); for(j = 0; j<10; j++) k++; } printf("k=%6x\n", k); // 1-3 sec for(i=1; i<=3; i++) { printf("measuring %d sec:\n", i); bef = rdtsc(); sleep(i); aft = rdtsc(); dif = aft - bef; printf(" a=%016llx(%lld)\n b=%016llx(%lld)\n diff=%12lld\n", bef, bef, aft, aft, dif); } // 1 nsec / 1 usec / 1,3,4,5 msec for(i=0; i<=5; i++) { ts.tv_sec = 0; ts.tv_nsec = interval[i]; printf("measuring %d nsec:\n", ts.tv_nsec); bef = rdtsc(); nanosleep(&ts, &tsrem); aft = rdtsc(); dif = aft - bef; printf(" a=%016llx(%lld)\n b=%016llx(%lld)\n diff=%12lld\n", bef, bef, aft, aft, dif); } } [eiki@dagobah /tmp]$ cc tst.c [eiki@dagobah /tmp]$ ./a.exe x=00000224fde3d7f1 x=00000224fdecf06b x=00000224fded4b46 x=00000224fded910b x=00000224fdf51ae4 x=00000224fdf5760d x=00000224fdf5c2ec x=00000224fdf7dba2 x=00000224fdf83283 x=00000224fdf87ea1 k= 64 measuring 1 sec: a=00000224fdfb4828(2357903181864) b=0000022522de77d5(2358522050517) diff= 618868653 measuring 2 sec: a=0000022522e072ca(2358522180298) b=000002256a6ed319(2359722693401) diff= 1200513103 measuring 3 sec: a=000002256a70a3d7(2359722812375) b=00000225d5be2cc4(2361523055812) diff= 1800243437 measuring 1 nsec: a=00000225d5c4a8bc(2361523480764) b=00000225d5d72e2d(2361524694573) diff= 1213809 measuring 1000 nsec: a=00000225d5d87678(2361524778616) b=00000225d5f74fed(2361526800365) diff= 2021749 measuring 1000000 nsec: a=00000225d5fad017(2361527029783) b=00000225d60ef16c(2361528349036) diff= 1319253 measuring 3000000 nsec: a=00000225d61023aa(2361528427434) b=00000225d63242da(2361530663642) diff= 2236208 measuring 4000000 nsec: a=00000225d635a36d(2361530884973) b=00000225d693bf1b(2361537052443) diff= 6167470 measuring 5000000 nsec: a=00000225d6951a11(2361537141265) b=00000225d6b3e556(2361539159382) diff= 2018117 [eiki@dagobah /tmp]$