[sisyphus] USB on 2.4.x

Anton Farygin =?iso-8859-1?q?rider_=CE=C1_altlinux=2Ecom?=
Ср Фев 2 19:10:22 MSK 2005


Epiphanov Sergei wrote:

>В сообщении от 2 Февраль 2005 16:27 Anton Farygin написал:
>  
>
>>Программу в студию ;-)
>>    
>>
>
>Вот она (приложена).
>
>  
>
>------------------------------------------------------------------------
>
>#include <string.h>
>#include <sys/time.h>
>#include <sys/resource.h>
>#include <signal.h>
>#include <stdio.h>
>#include <unistd.h>
>
>struct timeval getTV;
>struct timezone getTZ;
>double prevValue=0.0, curValue=0.0;
>
>
>void sigHand( int i ){
>    gettimeofday( &getTV, &getTZ );
>    prevValue = curValue;
>    curValue = getTV.tv_sec+(double)getTV.tv_usec/1.0e6;
>}
>
>int main( int argc, char ** argv ) {
>
>    ::setpriority( PRIO_PROCESS, 0, -19 );
>    struct sigaction sa;
>    memset( &sa, 0, sizeof(sa) );
>    sa.sa_handler = sigHand;
>    sigaction( SIGALRM, &sa, NULL );
>
>    struct itimerval tv;
>    tv.it_interval.tv_sec = 0;
>    tv.it_interval.tv_usec = 30000;
>    tv.it_value.tv_sec = 0;
>    tv.it_value.tv_usec = 30000;
>    setitimer( ITIMER_REAL, &tv, NULL );
>
>    while( 1 ) {
>        pause();
>//	printf("%10.3f\n",curValue);
>	printf("Cur=%16.6fs, Prev=%16.6fs, delta=%8.3fms\n",curValue,prevValue,(curValue-prevValue)*1.0e3);
>    }
>}
>  
>
Вот результат для 2.2, 2.6 и 2.4 ядер ( я интервал увеличил до 300ms):
2.2:
Cur=1107358666.289005s, Prev=1107358665.989036s, delta= 299.969ms
Cur=1107358666.588971s, Prev=1107358666.289005s, delta= 299.966ms
Cur=1107358666.888938s, Prev=1107358666.588971s, delta= 299.967ms
Cur=1107358667.188906s, Prev=1107358666.888938s, delta= 299.968ms
Cur=1107358667.488872s, Prev=1107358667.188906s, delta= 299.966ms
Cur=1107358667.788839s, Prev=1107358667.488872s, delta= 299.967ms
Cur=1107358668.088806s, Prev=1107358667.788839s, delta= 299.967ms

2.4.:
Cur=1107358603.118778s, Prev=1107358602.818756s, delta= 300.022ms
Cur=1107358603.418673s, Prev=1107358603.118778s, delta= 299.895ms
Cur=1107358603.718774s, Prev=1107358603.418673s, delta= 300.101ms
Cur=1107358604.018626s, Prev=1107358603.718774s, delta= 299.852ms
Cur=1107358604.318607s, Prev=1107358604.018626s, delta= 299.981ms
Cur=1107358604.618551s, Prev=1107358604.318607s, delta= 299.944ms
Cur=1107358604.918511s, Prev=1107358604.618551s, delta= 299.960ms
Cur=1107358605.218481s, Prev=1107358604.918511s, delta= 299.970ms

2.6.10:
Cur=1107358798.689482s, Prev=1107358798.388537s, delta= 300.945ms
Cur=1107358798.990423s, Prev=1107358798.689482s, delta= 300.941ms
Cur=1107358799.291367s, Prev=1107358798.990423s, delta= 300.944ms
Cur=1107358799.592312s, Prev=1107358799.291367s, delta= 300.945ms
Cur=1107358799.893255s, Prev=1107358799.592312s, delta= 300.943ms
Cur=1107358800.194198s, Prev=1107358799.893255s, delta= 300.943ms
Cur=1107358800.495143s, Prev=1107358800.194198s, delta= 300.945ms
Cur=1107358800.796087s, Prev=1107358800.495143s, delta= 300.944ms
Cur=1107358801.097030s, Prev=1107358800.796087s, delta= 300.943ms

Что интересно - разброс на 2.4 явно больше, но на 2.6 явно выше 
результат, но при этом точность намного выше.

Так может быть что-то не так в методике тестирования ?

При чем независимо от интервала превышение примерно 1ms.

Кстати, google на эту тему нашел вот что:
http://www.ussg.iu.edu/hypermail/linux/kernel/0408.3/0119.html

Посмотрите, может быть у вас в коде подобная ошибка ?

Rgds,
Rider




Подробная информация о списке рассылки Sisyphus