реклама на сайте
подробности

 
 
> Тестирование латентности прерываний ОС, не проводил ли кто?
Evgeny_CD
сообщение Jul 29 2005, 09:45
Сообщение #1


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Идея проста. Задающий импульс на прерывание. В обработчике прерывания ногой дергаем.

Счетчик. По запускающему стартует, по дерганию ногой останавливается.

Микроконтроллер. Берет выход счетчика -> COM -> PC -> файл. Метки PC времени проставить в файле.

Статистика. Скользящая гистограмма. Как распредились латентности за последнюю минуту.

Ну и задачки всякие разные под ОСью запускать. WEB сервачек там и т.д.

А затем смотрим, как плывет гистограмма в зависимости от нагрузки.

Особенно меня такое интересует для Linux (нормального, не RT) на небыстрых процах (~70 Mhz ARM720 и т.д.)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Harbour
сообщение Jul 29 2005, 10:33
Сообщение #2


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



В нормальном linux'е нет смысла - любой драйвер могет прерывания запретить надолго, особенно актуально для X'овых/fbdev драйверов. В i386 RT варианте легко получить стабильные 4-10 мкс, arm не юзал, но народ на motorollовском 5672 получал 5 мкс, думаю arm должен быть не хуже.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jul 29 2005, 10:56
Сообщение #3


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Цитата(Harbour @ Jul 29 2005, 14:33)
В нормальном linux'е нет смысла - любой драйвер могет прерывания запретить надолго, особенно актуально для X'овых/fbdev драйверов. В i386 RT варианте легко получить стабильные 4-10 мкс, arm не юзал, но народ на motorollовском 5672 получал 5 мкс, думаю arm должен быть не хуже.
i386 - это при какой тактовой?

5672 - это что за проц (не нашел), тактовая?

Мне 5 мкс не надо, меня 1 мс устроит. Вопрос в том, можно ли ее гарантировать в обычном, не RT линухе?
Go to the top of the page
 
+Quote Post
tvv
сообщение Jul 29 2005, 20:50
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 8-10-04
Пользователь №: 824



Цитата(Evgeny_CD @ Jul 29 2005, 13:56)
Мне 5 мкс не надо, меня 1 мс устроит. Вопрос в том, можно ли ее гарантировать в обычном, не RT линухе?
*

Ответ скорее нет, чем да sad.gif Тут еще та обманка, что время реакции 1мс получить можно, а гарантировать никак. Я на осцилоскопе это красиво видел. Драйвер в прерывании (мною писанный, т.е. я уверен что мин нет) кидает через PCI флаг прямо на вход скопа. И все вроде хорошо пока не поставил секундную развертку. Падал (или стоял) мой флаг до сотен милисекунд, без каких-либо сообщений. Причем чем сильнее я грузил шину тем дольше лежал флаг (что по-человечески понятно). Машина была встроеный в VME контроллер с P3 800MHz (дело трех летней давности). Если надо гарантировать мс берите QNX или что нравится из аналогов. А про линух и масдай надо забыть. В Вашей задаче можно попытаться использовать счетчик тактових импульсов, есть у Р2 и выше (про ARM не знаю) такой восьми битный регистр. Под QNXом он доступен через апи, у линуха через асемблер. Пускается при включении питания и считает пока не выключат PC. В отличаи от RTC точность определяется частотой процессора и счетчик не зависит от операционки. Ну а дальше считайте латентность и стройте гистограмки.
Go to the top of the page
 
+Quote Post
Olej
сообщение Sep 12 2005, 13:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(tvv @ Jul 29 2005, 23:50)
В Вашей задаче можно попытаться использовать счетчик тактових импульсов, есть у Р2 и выше (про ARM не знаю) такой восьми битный регистр. Под QNXом он доступен через апи, у линуха через асемблер. Пускается при включении питания и считает пока не выключат PC. В отличаи от RTC точность определяется частотой процессора и счетчик не зависит от операционки. Ну а дальше считайте латентность и стройте гистограмки.
*


Вопрос хоть и давний, но часто актуальный:
1. под QNX опрос такого счётчика (x86 only) - ClockCycles() - и эта возможность действительно позволяет засекать временные интервалы диапазона наносекунд...
2. Но и под Linux есть такой инструмент: get_cycles() (asm/timex.h)...
3. И практически под любой OS x86 можно поискать, потому, что реализуется всё это хозяйство через специальную команду rdtsc (реализована начиная с i586, исключения amd 5x86);
4. ... в конце концов в любой OS можете сами такое сваять, вот примерный код в GCC:
Код
unsigned long long tsc( void ) {
  unsigned long long f;
  __asm__ __volatile__ ( "rdtsc" : "=А"( f ) );
  return f;
};

5. Но что интересно, что времена, определяемые таким менером ... будут "расходиться" с системным временем (заметно на интервалах уже начиная с 1 сек.) - эти часы работают от 2-х разных физических кварцев (RTC / тактовая частота процессора), 10**-4 - 10**-5 разница ... может порождать эффекты, над которыми можно долго просидеть wink.gif...
6. Но (!) для определения латентности по прерыванию, Dedicated Systems например, применяют методики, которые они обстоятельно обсуждают - построенные на электрической (типа осциллографа) фиксации реакции на PCI!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016