LINUX.ORG.RU

calibrate_delay


0

0

Эта функция лежит в init/main.c
Она определяет быстродействие системы в BogoMIPS
Я привожу ниже довольно древний ее диалект - но это не суть,совремённая версия не сильно отличается
Так вот - непонятно,к чему приравнивать константы jiffies и HZ
Не знаю,может это бред , и рассматривать контекст этой функции нужно в разрезе kernel space , а не user space , но тем не менее :-)



#include <linux/config.h>
#include <linux/unistd.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/utsname.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/hdreg.h>
#include <asm/io.h>
#include <linux/pci.h>
#include "stdio.h"


#define LPS_PREC 8
unsigned long loops_per_sec = (1<<12);
unsigned long volatile jiffies=0;
unsigned long HZ = 1;

void __delay(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}


// void __init calibrate_delay(void)
int main()
{
unsigned long ticks, loopbit;
int lps_precision = LPS_PREC;

loops_per_sec = (1<<12);

printf("Calibrating delay loop... ");
while (loops_per_sec <<= 1)
{
/* wait for "start of" clock tick */
ticks = jiffies;

while (ticks == jiffies)
{
/* nothing */;
/* Go .. */
ticks = jiffies;
}
__delay(loops_per_sec);
ticks = jiffies - ticks;
if (ticks) break;
}

/* Do a binary approximation to get loops_per_second set
* to equal one clock (up to lps_precision bits) */
loops_per_sec >>= 1;
loopbit = loops_per_sec;
while ( lps_precision-- && (loopbit >>= 1) ) {
loops_per_sec |= loopbit;
ticks = jiffies;
while (ticks == jiffies);
ticks = jiffies;
__delay(loops_per_sec);
if (jiffies != ticks) /* longer than 1 tick */
loops_per_sec &= ~loopbit;
}

/* finally, adjust loops per second in terms of seconds
* instead of clocks */
loops_per_sec *= HZ;
/* Round the value and print it */
printf("%lu.%02lu BogoMIPS\n",
(loops_per_sec+2500)/500000,
((loops_per_sec+2500)/5000) % 100);
return 0;
}


Собирал на сузе 10.1


★★★★★

> Она определяет быстродействие системы в BogoMIPS

точнее - на сколько быстро система может ничего не делать
грубо говоря - вхолостую прокрутить педали

> Так вот - непонятно,к чему приравнивать константы jiffies и HZ

HZ константа, устанавливается при компиляции ядра
jiffies не константа, а глобальная переменная - счетчик тиков системного таймера с момента загрузки системы, забрать ее можно только из кернелспейса

Если оно Вам так нужен в юзерспейсе, забирайте из /proc/cpuinfo

Chubaka
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.