как изменить Timer resolution (RH9.0 cernel 2.4)?

Все о программировании под *nix
unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

как изменить Timer resolution (RH9.0 cernel 2.4)?

Сообщение unq »

Проблема с таймерами
usleep(1000) тот же результат что и usleep(20000)
или
struct timespec slt,slt2;
slt.tv_sec = 0;
slt.tv_nsec = (long int)sleepMS*1000*1000;
nanosleep(&slt,&slt2); тоже дает тот же результат что и usleep(20000)

под Виндой можно пользовать timeBeginPeriod & timeEndPeriod

Я так понял что, программным путем это нельзя сделать. Как на счет перекомпиляции ядра или вообще поставить новое ядро?
Ни кто не сталкивался с этим?

Aleksey Kondratenko
Неотъемлемая часть форума
Сообщения: 250
Зарегистрирован: 12 авг 2003, 03:55
Контактная информация:

Сообщение Aleksey Kondratenko »

Во-первых, с tv_nsec у тебя явная ошибка, если sleepMS > 999.
Вo-вторых разница между 10 мс(и соотв, 1 мс) и 20 мс в 2.4 должна быть.

Во-третьих если тебе надо спать короче чем интервал системного таймера, то ни одна ОС тебе не поможет. Очень короткие интервалы лучше "спать" активно, т.е. в цикле. 2.4 (как и NT AFAIK) имеет 10 ms интервал, в 2.6 по-умолчанию 1 мс и это конфигуряется.

Если нужно просто точно мерять время, то на UP можно пользовать timestamp counter (и то не всегда это корректно). А для нормальных условий к 2.6 были патчи (может уже в "vanilla").

Уточни, что тебе надо: спать с большой точностью или мерять время.

unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

Сообщение unq »

мне надо спать с большой точностью - <=2ms.
Короче я решил уже эту проблему в ядре 2.4. Просто его перекомпилировал изменив в исходном файле ядра /usr/src/linux.2.4.../include/asm-i386/param.h

#define HZ 100
изменил на строку
#define HZ 1000

Ответить