Comment 1 for bug 1307473

Revision history for this message
Damjan Marion (dmarion) wrote :

I left over night following simple app which runs inside linux VM (pinned to CPU1). and displays how much ticks happened during the 1 second sleep. I found several occasions where sleep was taking much longer.

code:

#include<sys/time.h>
#include<time.h>
#include<stdio.h>
#include<stdint.h>

#define CPUSPEED 2533422000

static __inline__ uint64_t getticks(void)
{
     unsigned a, d;
     asm("cpuid");
     asm volatile("rdtsc" : "=a" (a), "=d" (d));
     return (((uint64_t)a) | (((uint64_t)d) << 32));
}
int main()
{
 uint64_t t0,t1;
 while (1) {
  t0 = getticks();
  sleep(1);
  t1 = getticks();
  printf("Ticks: %lu delta:%lu\n",t1-t0, t1-t0-CPUSPEED);
 }
 return 0;
}

Sample1:
Ticks: 2533748354 delta:326354
Ticks: 2533785458 delta:363458
Ticks: 2533889852 delta:467852
Ticks: 13309910165 delta:10776488165
Ticks: 2533823762 delta:401762
Ticks: 2533817164 delta:395164
Ticks: 2533894302 delta:472302

Sample2:
Ticks: 2533896753 delta:474753
Ticks: 2533876689 delta:454689
Ticks: 2533783931 delta:361931
Ticks: 20528401242 delta:17994979242
Ticks: 2533904102 delta:482102
Ticks: 2533740733 delta:318733
Ticks: 2533856266 delta:434266

Sample3:
Ticks: 2533761095 delta:339095
Ticks: 2533652242 delta:230242
Ticks: 2533855141 delta:433141
Ticks: 18943955180 delta:16410533180
Ticks: 2533780954 delta:358954
Ticks: 2533923283 delta:501283
Ticks: 2533909033 delta:487033