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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Реальное время в Linux user space, Сколько оно нереально?
Evgeny_CD
сообщение Jun 21 2006, 08:51
Сообщение #1


Гуру
******

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



Вот есть процесс в user space Linux. Он в цикле опрашивает порт IO (через медленную функцию доступа к IO из user space). Если там что-то случилось/не случилось, он делает некую работу.

Есть другие процессы (и сама система). Они прерывают мой процесс. Процессов таких минимум, они не сильно активны. По сети активности нет. Винчестера нет, только NOR FLASH и SD.

Если вести речь о PXA270, на 312 Мгц, то о какой "временной девиации" может идти речь? Т.е. на какое максимальное время система может прервать мой процесс? Можно ли говорить о том, что "дырка" будет не более 10 мс?

Аспекты kernel module, RTAI чур пока не трогать. Реь идет о тупом программизме в user space.
Go to the top of the page
 
+Quote Post
makc
сообщение Jun 21 2006, 08:55
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Тут еще вопрос в том, с какой частотой будет вызываться шедулер. Если период вызова шедулера будет больше или равна 10 мс, то, понятно, "дырка" может быть больше 10 мс.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 21 2006, 09:01
Сообщение #3


Гуру
******

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



Цитата(makc @ Jun 21 2006, 12:55) *
Тут еще вопрос в том, с какой частотой будет вызываться шедулер. Если период вызова шедулера будет больше или равна 10 мс, то, понятно, "дырка" может быть больше 10 мс.
В стандартном варианте, насколько я понимаю, 10 мс. Можно ли говорить о том, что "дырка" будет не более 50...100 мс?
Go to the top of the page
 
+Quote Post
makc
сообщение Jun 21 2006, 09:13
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(Evgeny_CD @ Jun 21 2006, 13:01) *
Цитата(makc @ Jun 21 2006, 12:55) *
Тут еще вопрос в том, с какой частотой будет вызываться шедулер. Если период вызова шедулера будет больше или равна 10 мс, то, понятно, "дырка" может быть больше 10 мс.
В стандартном варианте, насколько я понимаю, 10 мс. Можно ли говорить о том, что "дырка" будет не более 50...100 мс?


Это можно будет утверждать только при жестко заданных условиях: какие процессы запущены, их приоритеты, какие прерывания активны и как часто они возникают, сколько времени может отнять обработка отдельного прерывания. Если знать все эти параметры, то, думаю, можно уложиться в 50 мс.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 21 2006, 09:17
Сообщение #5


Гуру
******

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



Цитата(makc @ Jun 21 2006, 13:13) *
Это можно будет утверждать только при жестко заданных условиях: какие процессы запущены, их приоритеты, какие прерывания активны и как часто они возникают, сколько времени может отнять обработка отдельного прерывания. Если знать все эти параметры, то, думаю, можно уложиться в 50 мс.
Понятно, что без описания всей остальной системы вопрос, мягко говоря, не сильно корректный. Но мне пока важно качественно понять продолжительность "дырки".

Т.е. можно говорить, что если не "дурить" в остальной части системы, время дырки для моего процесса не будет превышать 100мс. Это меня устраивает!
Go to the top of the page
 
+Quote Post
COMA
сообщение Jun 21 2006, 09:19
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



Задам свой вопрос.
Если написать демон или драйвер, и запустить всё это в kernel space, то что можно ожидать по задержкам?
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jun 21 2006, 21:52
Сообщение #7


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

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



Ни фига не гарантируется, вот навскидку несколько моментов, которые легко удлиняют switch_task jitter в несколько раз :
- способ реализации вкомпиленных в ядро драйверов устройств - любой драйвер в состоянии запретить прерывания на столько, на сколько он захочет, причем может быть неважно есть данное устройство в системе или нет
- способ взаимодействия контроллера памяти и DMA с CPU - есть всяческие пересылки, которые постоянно происходят в системе, они захватывают шину, вопрос на сколько - обычно задержки такого рода минимальны
- способ реализации захвата шины процессора набортными платами, тут поле непаханое, вот пример из Intel мира - чипсет i810/i815 с набортным видео в состоянии удерживать шину CPU до 1мс ! т.е. в зависимости от типа обмена легко получаем jitter на данных системах до 100мс

Вывод: только комплексный и правильный выбор hard и soft архитектуры может решить вопросы данного рода с порядочной долей вероятности, ну и тесты, тесты и тесты ...
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 21 2006, 22:07
Сообщение #8


Гуру
******

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



Цитата(Harbour @ Jun 22 2006, 01:52) *
- способ реализации захвата шины процессора набортными платами, тут поле непаханое, вот пример из Intel мира - чипсет i810/i815 с набортным видео в состоянии удерживать шину CPU до 1мс ! т.е. в зависимости от типа обмена легко получаем jitter на данных системах до 100мс
Хм... Я говорил про embedded систему на PXA270. Вроде там i810/i815 не шибко нужен biggrin.gif

Вообще "дело ясное, что дело темное". biggrin.gif Но 100 мс, как я уже говорил, меня устраивает на крайний случай.
Go to the top of the page
 
+Quote Post
bigirbis
сообщение Jun 22 2006, 07:17
Сообщение #9





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-05
Пользователь №: 12 389



Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.
Если есть беспокойство по поводу того, что ядро не даст нужного приоритета для kernel module, есть один вариант (я как-то его реализовывал, но придумал не сам). Если надо, потом попробую описать.
Go to the top of the page
 
+Quote Post
makc
сообщение Jun 22 2006, 07:28
Сообщение #10


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(bigirbis @ Jun 22 2006, 11:17) *
Если есть беспокойство по поводу того, что ядро не даст нужного приоритета для kernel module, есть один вариант (я как-то его реализовывал, но придумал не сам). Если надо, потом попробую описать.


Kernel module работает как часть ядра, т.е. о приоритете говорить не совсем корректно. Другое дело механизм передачи управления функциям из модуля. Тут есть варианты, начиная с древних BH-handlers и заканчивая потоками ядра.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
bigirbis
сообщение Jun 22 2006, 07:39
Сообщение #11





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-05
Пользователь №: 12 389



Цитата(makc @ Jun 22 2006, 11:28) *
Цитата(bigirbis @ Jun 22 2006, 11:17) *

Если есть беспокойство по поводу того, что ядро не даст нужного приоритета для kernel module, есть один вариант (я как-то его реализовывал, но придумал не сам). Если надо, потом попробую описать.


Kernel module работает как часть ядра, т.е. о приоритете говорить не совсем корректно. Другое дело механизм передачи управления функциям из модуля. Тут есть варианты, начиная с древних BH-handlers и заканчивая потоками ядра.


Я имел в виду немного другое. В свое время пришлось решать задачу по использованию дополнительной клавиатуры, которая сидела на томже прерывании, что и стандартная. Только скан-коды у нее начинались с E1. Погеморроиться пришлось прилично. Ядро попросту игнорировало эти скан-коды. А править и пересобирать его нельзя было по условиям задачи.
Go to the top of the page
 
+Quote Post
Olej
сообщение Jun 22 2006, 08:03
Сообщение #12


Местный
***

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



Цитата(makc @ Jun 21 2006, 11:55) *
Тут еще вопрос в том, с какой частотой будет вызываться шедулер. Если период вызова шедулера будет больше или равна 10 мс, то, понятно, "дырка" может быть больше 10 мс.


- в стандартном варианте - 10мс., но при ядре старше 2.6.х вы можете эту дискретность уменьшить.

- но вы можете просто не позволять решедулировать этот процесс user space другими, играясь приоритетом и политикой диспетчеризации, тогда дискретность вам вообще до фени (только не забыть устранить всякое "динамическое управление приоритетом" со стороны ОС):

Цитата(makc @ Jun 21 2006, 12:13) *
Это можно будет утверждать только при жестко заданных условиях: какие процессы запущены, их приоритеты, какие прерывания активны и как часто они возникают, сколько времени может отнять обработка отдельного прерывания. Если знать все эти параметры, то, думаю, можно уложиться в 50 мс.


- это, в общем случае, так, но у вас, по сказанному раньше, нет особенно с фокусами ни юзеровских ни системных процессов?

- неприятность в том, что кроме штатного решедулирования вам большую (во много раз) дисперсию могут "подарить" другие механизмы: возникновение свопинга (который должен быть напрочь исключён), ... инверсия приоритетов, которую можно создать уже при 3-х процессах/потоках...
Смотрите и в эту сторону.

P.S. а вообще, именно из-за этого, что механизмы никакого Linux не гарантируют невозникновение каких-то задержек на все-все 100% - это заложено в идеологии системы - Linux ни с какими приставками RT не будет до конца RT (даже при 2-х ядерности)...
Хотя у некоторых здесь бытует мнение, что всякое RT - это некий мистификасьён wink.gif ... - может они что-то знают, и будем им верить? wink.gif
Go to the top of the page
 
+Quote Post
Olej
сообщение Jun 22 2006, 09:07
Сообщение #13


Местный
***

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



Цитата(Evgeny_CD @ Jun 21 2006, 11:51) *
Аспекты kernel module, RTAI чур пока не трогать. Реь идет о тупом программизме в user space.


А kernel module никак и не решит вашу проблему: он может уменьшить и детерминировать время латентности на прерывание, или I/O операции ... но вас ведь интересует "временная девиация" в пользовательском приложении, так?
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 22 2006, 09:26
Сообщение #14


Гуру
******

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



Цитата(bigirbis @ Jun 22 2006, 11:17) *
Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.
Это правильно, но есть одна загвоздка - надо уметь писать программы для kernel space.
Go to the top of the page
 
+Quote Post
Olej
сообщение Jun 22 2006, 09:32
Сообщение #15


Местный
***

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



Цитата(bigirbis @ Jun 22 2006, 10:17) *
Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.


... вот только в user space до этого нужно ждать (может и до бесконечности) RUNNING и доступа к этому файлу устройстваsad.gif...
Go to the top of the page
 
+Quote Post
bigirbis
сообщение Jun 22 2006, 10:06
Сообщение #16





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-05
Пользователь №: 12 389



Цитата(Evgeny_CD @ Jun 22 2006, 13:26) *
Цитата(bigirbis @ Jun 22 2006, 11:17) *
Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.
Это правильно, но есть одна загвоздка - надо уметь писать программы для kernel space.

В принципе, ничего сложного. Могу порекомендовать переводную книгу по этой теме:
http://www.nclug.ru/wiki/index.php?page=knz_ldd2 (Linux Device Drivers 2nd edition)
Если надо - приаттачу простой код

Цитата(Olej @ Jun 22 2006, 13:32) *
Цитата(bigirbis @ Jun 22 2006, 10:17) *

Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.


... вот только в user space до этого нужно ждать (может и до бесконечности) RUNNING и доступа к этому файлу устройстваsad.gif...

Тогда все нужно описывать в kernel space и уповать, что проца хватит (в должном объеме) и на эту нитку тоже...
Судя по постановке задачи, жрущих процессорное время в 3 горла процессов нет, да и активируются они редко. Тогда:
1) если не очень принципиальны редкие задержки - разделить код на User и Kernel Space
2) если очень принципиально - все в kernel space.

Хочу также обратить внимание на "быструю" и "долгую" обработку прерываний в Linux.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jun 22 2006, 16:00
Сообщение #17


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

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



Цитата(Evgeny_CD @ Jun 22 2006, 12:26) *
Цитата(bigirbis @ Jun 22 2006, 11:17) *
Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо.
Это правильно, но есть одна загвоздка - надо уметь писать программы для kernel space.

Нет, не надо - user space realtime это уже давно прошедший этап в RTAI.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 22 2006, 18:22
Сообщение #18


Гуру
******

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



Цитата(Harbour @ Jun 22 2006, 20:00) *
Нет, не надо - user space realtime это уже давно прошедший этап в RTAI.
Я помню про RTAI - с Вашей подачи познакомился с этим чудом с полгода назад. Но он есть далеко не для всех процов! Для "народного" AT91RM9200 нету. Для PXA270 свободного не видел. Вот тут хотят 300 евро, причем за image - непонятно, как там насчет GPL и исходников...
http://www.vollmann.ch/en/colibri/shop.html#pro_support

Для Cirrus EP93xxx RTAI есть - но не тянет меня на эти процы по ряду причин.

Цитата(bigirbis @ Jun 22 2006, 14:06) *
В принципе, ничего сложного. Могу порекомендовать переводную книгу по этой теме:
http://www.nclug.ru/wiki/index.php?page=knz_ldd2 (Linux Device Drivers 2nd edition)
Если надо - приаттачу простой код
Спасибо за желание помочь - это очень приятно. LDD2, LDD3 у меня есть, с "техническим" английким проблем не испытываю. Есть даже переведенная книжка Померанца по программированию kernel module. Но как-то стремно нырять в этот омут. unsure.gif
Цитата(bigirbis @ Jun 22 2006, 14:06) *
Тогда все нужно описывать в kernel space и уповать, что проца хватит (в должном объеме) и на эту нитку тоже...
Судя по постановке задачи, жрущих процессорное время в 3 горла процессов нет, да и активируются они редко. Тогда:
1) если не очень принципиальны редкие задержки - разделить код на User и Kernel Space
2) если очень принципиально - все в kernel space.
Я хотел вариант lite написать в user space (при помощи всяких внешних аппаратных ухищрений доведя допустимую девиацию до 100 мс), а затем, по мере набора опыта, перетащить полностью или целиком в kernel space.
Go to the top of the page
 
+Quote Post
Olej
сообщение Jun 23 2006, 08:18
Сообщение #19


Местный
***

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



Цитата(Evgeny_CD @ Jun 22 2006, 21:22) *
Я хотел вариант lite написать в user space (при помощи всяких внешних аппаратных ухищрений доведя допустимую девиацию до 100 мс), а затем, по мере набора опыта, перетащить полностью или целиком в kernel space.


Я бы так и делал, и, может оказаться, не только в lite, но и в конечном варианте...
Я не скажу наверняка, как это будет в Linux (я это не проверял), но в QNX - разумно распорядившись приоритетами, можно гарантировать, что время начала операции будет плавать между 2-4 ticksize ... но всё, что касается диспетчеризации, вытеснения + деталей отработки службы времени (а там всё совсем не очевидно) - это всё регламентируется моделями POSIX, а одна и другая ОС в той или иной мере пытаются следовать POSIX. Мне кажется, что при ticksize=10мс. вы должны определённо вписаться в 100мс. интервал, если обезопаситься от всех неожиданностей + разумно распорядиться приоритетами + использовать только статические приоритеты при RR диспетчеризации (это те, кторые RT - об этом хорошо растолковывается в такой книжке "Ядро LINUX с комментариями" ... или как-то так - нет под рукой). Потом результат можно легко проверить на адекватность ... и у вас ещё остаётся возможность переопределить в ядре ticksize в сторону уменьшения.

P.S. в конечном счёте, если это серьёзная нужда и не лень повозиться, я готов специально найти, вырезать и выслать из книжки:
http://www.books.ru/shop/books/357604
- раздельчик, где специально ставилась задача синхронизации с наименьшей дисперсией интервала, с проверкой результата (это под QNX, но GCC - может быть "в лоб" перенесено в LINUX и проверено) ... это не совсем то, но очень близкие вещи - может на что-то натолкнуть.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jun 23 2006, 08:25
Сообщение #20


Гуру
******

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



Цитата(Olej @ Jun 23 2006, 12:18) *
P.S. в конечном счёте, если это серьёзная нужда и не лень повозиться, я готов специально найти, вырезать и выслать из книжки:
http://www.books.ru/shop/books/357604
- раздельчик, где специально ставилась задача синхронизации с наименьшей дисперсией интервала, с проверкой результата (это под QNX, но GCC - может быть "в лоб" перенесено в LINUX и проверено) ... это не совсем то, но очень близкие вещи - может на что-то натолкнуть.
Спасибо! Думаю, за 150р мне проще будт ее купить biggrin.gif QNX мне не грозит, все будет под Linux, вначале на AT91RM9200, затем на PXA270.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jun 23 2006, 09:06
Сообщение #21


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

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



Цитата(Evgeny_CD @ Jun 22 2006, 21:22) *
Цитата(Harbour @ Jun 22 2006, 20:00) *
Нет, не надо - user space realtime это уже давно прошедший этап в RTAI.
Я помню про RTAI - с Вашей подачи познакомился с этим чудом с полгода назад. Но он есть далеко не для всех процов! Для "народного" AT91RM9200 нету. Для PXA270 свободного не видел. Вот тут хотят 300 евро, причем за image - непонятно, как там насчет GPL и исходников...
http://www.vollmann.ch/en/colibri/shop.html#pro_support

Для Cirrus EP93xxx RTAI есть - но не тянет меня на эти процы по ряду причин.

Цитата(bigirbis @ Jun 22 2006, 14:06) *
В принципе, ничего сложного. Могу порекомендовать переводную книгу по этой теме:
http://www.nclug.ru/wiki/index.php?page=knz_ldd2 (Linux Device Drivers 2nd edition)
Если надо - приаттачу простой код
Спасибо за желание помочь - это очень приятно. LDD2, LDD3 у меня есть, с "техническим" английким проблем не испытываю. Есть даже переведенная книжка Померанца по программированию kernel module. Но как-то стремно нырять в этот омут. unsure.gif
Цитата(bigirbis @ Jun 22 2006, 14:06) *
Тогда все нужно описывать в kernel space и уповать, что проца хватит (в должном объеме) и на эту нитку тоже...
Судя по постановке задачи, жрущих процессорное время в 3 горла процессов нет, да и активируются они редко. Тогда:
1) если не очень принципиальны редкие задержки - разделить код на User и Kernel Space
2) если очень принципиально - все в kernel space.
Я хотел вариант lite написать в user space (при помощи всяких внешних аппаратных ухищрений доведя допустимую девиацию до 100 мс), а затем, по мере набора опыта, перетащить полностью или целиком в kernel space.


Какой arm значения не имеет - клавное что архитектура поддерживается ядром, заточить ядро под новый камень (их в за год с десяток появляется) дело одно-двух дней. Такой древний камень как AT91RM9200 работает под linux'ом давно, RTAI его держит, по памяти, с 2005 года.
Если требования к задаче довольно строги - перенос в kernel space особого рояля не играет.


Цитата(Olej @ Jun 23 2006, 11:18) *
Цитата(Evgeny_CD @ Jun 22 2006, 21:22) *

Я хотел вариант lite написать в user space (при помощи всяких внешних аппаратных ухищрений доведя допустимую девиацию до 100 мс), а затем, по мере набора опыта, перетащить полностью или целиком в kernel space.


Я бы так и делал, и, может оказаться, не только в lite, но и в конечном варианте...
Я не скажу наверняка, как это будет в Linux (я это не проверял), но в QNX - разумно распорядившись приоритетами, можно гарантировать, что время начала операции будет плавать между 2-4 ticksize ... но всё, что касается диспетчеризации, вытеснения + деталей отработки службы времени (а там всё совсем не очевидно) - это всё регламентируется моделями POSIX, а одна и другая ОС в той или иной мере пытаются следовать POSIX. Мне кажется, что при ticksize=10мс. вы должны определённо вписаться в 100мс. интервал, если обезопаситься от всех неожиданностей + разумно распорядиться приоритетами + использовать только статические приоритеты при RR диспетчеризации (это те, кторые RT - об этом хорошо растолковывается в такой книжке "Ядро LINUX с комментариями" ... или как-то так - нет под рукой). Потом результат можно легко проверить на адекватность ... и у вас ещё остаётся возможность переопределить в ядре ticksize в сторону уменьшения.

P.S. в конечном счёте, если это серьёзная нужда и не лень повозиться, я готов специально найти, вырезать и выслать из книжки:
http://www.books.ru/shop/books/357604
- раздельчик, где специально ставилась задача синхронизации с наименьшей дисперсией интервала, с проверкой результата (это под QNX, но GCC - может быть "в лоб" перенесено в LINUX и проверено) ... это не совсем то, но очень близкие вещи - может на что-то натолкнуть.


А кстати как QNX, атмеловские кристаллы держит ?

P.S. Вот линка на текущий порт linux на атмеловское чудо: http://maxim.org.za/AT91RM9200/2.6/
Go to the top of the page
 
+Quote Post
Илья Игоревич
сообщение Aug 8 2006, 13:47
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 8-08-06
Из: Жуковский
Пользователь №: 19 404



Решение есть. Появилось совсем недавно, в виде патча к последнему(или одному из последних) ядер 2.6. Собственно, страница с патчем: http://kerneltrap.org/node/6750 После патча и включения его в ядро, функции usleep и nanosleep начинают работать настолько точно, насколько позволяет ваша машина. (Насколько я понимаю, зависит это от чипсета) Мне-таки удалось получить 100 микросекундную выдержку - проверял осциллографом - на PIV с i975. А на старом компьютере (PIII c VIA Apollo Pro) минимальным временем задержки стала 1 миллисекунда вместо 20 мс, что тоже неплохо. Впрочем, судя по дате последнего сообщения, это уже неактуально.

P.S. А вот интересно, под windows кто-нибудь пробовал получать задержки в порядка сотни микросекунд..?
Go to the top of the page
 
+Quote Post
Harbour
сообщение Aug 8 2006, 17:26
Сообщение #23


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

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



Это так называемые RT патчи от Молнара - к реалтайму имеют слабое отношение - так как писались для сведения задержек до приемлемого уровня для multimedia apps. Чипсет тут ни причем - существует понятие time source - это может быть RTC, RTDSC,, HPET или APIC тамеры, т.е. RTAI например чудесно работает на 486SX или других подобных процах, которых полно во встраиваемом оборудовании.
Go to the top of the page
 
+Quote Post
Илья Игоревич
сообщение Aug 8 2006, 22:18
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 8-08-06
Из: Жуковский
Пользователь №: 19 404



Ой-Ой-Ой. Отписал не в ту тему, прошу меня извинить. Да-да, это те самые патчи, которые делают возможным брать задержки от другого источника... Но, насколько я понимаю(могу сильно ошибаться) например, HPET таймер реализуется именно чипсетом - однако, это уже оффтопик.
По теме: если вопросы переключения задач зависят в данном случае только от ядра(причем, гарантировать нужный timeslice скорее всего, нельзя), то, быть может, само ядро стоит немного подправить?))
Насколько "немного" - уже другой вопрос. Однако сама возможность не исключается?
Go to the top of the page
 
+Quote Post
Harbour
сообщение Aug 9 2006, 05:53
Сообщение #25


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

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



Если переключение/и т.д. будет зависеть от ядра - то мы будем иметь классический хреновый realtime, которого полным полно (RTLinux/QNX/Linux-rt). Посмотрите как устроен adeos - это тонкая прослойка между железом и всем остальным, включая ядра (т.е. несколько совершенно различных OS не проблема) - adeos виртуализирует прерывания/таймеры/scheduler - сами ядра OS запускаются как самая низкоприоритетная RT-задача, соответственно ядра править не надо.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Feb 26 2013, 02:28
Сообщение #26


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Прошу прощение за поднятие старой темы. Но для меня это актуально.

Т.е. я правильно понимаю, что если под linux запущу это
CODE
while( 1 )
{
  sleep( 100 );
  set( portx, 1 );
  sleep( 100 );
  clr( portx, 1 );
}

То мне не гарантируется меандр с периодом 200 мс на неком порте X, разряде 1? RT патчи особо не интересуют, отношение почему-то скептическое...

Прерывания обрабатывать не нужно.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 26 2013, 04:06
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Правильно.
Во-первых, sleep(100) отправит процесс спать на 100 секунд, а не на 100 мс. sm.gif
Во-вторых, никто не гарантирует, что когда время сна истечет, планировщик немедленно передаст управление этой задаче. Там может оказаться много других желающих получить процессорное время...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Feb 26 2013, 09:36
Сообщение #28


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (alx2 @ Feb 26 2013, 13:06) *
Правильно.
Во-первых, sleep(100) отправит процесс спать на 100 секунд, а не на 100 мс. sm.gif
Во-вторых, никто не гарантирует, что когда время сна истечет, планировщик немедленно передаст управление этой задаче. Там может оказаться много других желающих получить процессорное время...

Ну вообще я написал псевдокод. Поэтому у меня sleep засыпает на миллисекунды)))

Ок, понятно. А если еще и приложения типа интенсивно работающего веб-сервера, то вообще труба...

Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 26 2013, 11:21
Сообщение #29


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата
RT патчи особо не интересуют, отношение почему-то скептическое...

Цитата
Ок, понятно. А если еще и приложения типа интенсивно работающего веб-сервера, то вообще труба...


C RT патчами как раз никакой нагруженный веб-сервер и даже обработчик прерываний не заставит ждать задачу с большим приоритетом - это и подразумевает детерминизм, ну а скепсис в основном от непонимания происходящего sm.gif

Сообщение отредактировал sasamy - Feb 26 2013, 11:32
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Feb 26 2013, 12:48
Сообщение #30


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (sasamy @ Feb 26 2013, 20:21) *
ну а скепсис в основном от непонимания происходящего sm.gif

Да, Вы правы! Мое понимание пока основывается на чтении соответствующих статей, а там неоднозначность, ровно как и на соответствующих форумах. Все-таки же не зря RTOS существуют...?)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Enthusiast
сообщение Mar 2 2013, 17:35
Сообщение #31


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

Группа: Свой
Сообщений: 163
Регистрация: 25-09-09
Из: Nizhny Novgorod, Russia
Пользователь №: 52 588



Используя программное таймерное прерывание "Линукса" можно вполне получить уход времени отработки обработчика прерывания не более 25 мкс на обычном ядре без выкрутасов и ухищрений. Как это делается обсуждалось здесь.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 3 2013, 05:54
Сообщение #32


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (Enthusiast @ Mar 3 2013, 02:35) *
Как это делается обсуждалось здесь.

bb-offtopic.gif Что-то с памятью моей стало... Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

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

 


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


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