|
Реальное время в Linux user space, Сколько оно нереально? |
|
|
|
Jun 21 2006, 09:13
|

Гуру
     
Группа: Админы
Сообщений: 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 В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jun 21 2006, 09:17
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

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

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

|
Ни фига не гарантируется, вот навскидку несколько моментов, которые легко удлиняют switch_task jitter в несколько раз : - способ реализации вкомпиленных в ядро драйверов устройств - любой драйвер в состоянии запретить прерывания на столько, на сколько он захочет, причем может быть неважно есть данное устройство в системе или нет - способ взаимодействия контроллера памяти и DMA с CPU - есть всяческие пересылки, которые постоянно происходят в системе, они захватывают шину, вопрос на сколько - обычно задержки такого рода минимальны - способ реализации захвата шины процессора набортными платами, тут поле непаханое, вот пример из Intel мира - чипсет i810/i815 с набортным видео в состоянии удерживать шину CPU до 1мс ! т.е. в зависимости от типа обмена легко получаем jitter на данных системах до 100мс
Вывод: только комплексный и правильный выбор hard и soft архитектуры может решить вопросы данного рода с порядочной долей вероятности, ну и тесты, тесты и тесты ...
|
|
|
|
|
Jun 22 2006, 07:17
|
Группа: Новичок
Сообщений: 6
Регистрация: 19-12-05
Пользователь №: 12 389

|
Вообще, по моему скромному мнению, следует внести опрос портов IO в kernel space с последующей записью в файл устройства. А далее из user space жрать из этого файла устройство все, что надо. Если есть беспокойство по поводу того, что ядро не даст нужного приоритета для kernel module, есть один вариант (я как-то его реализовывал, но придумал не сам). Если надо, потом попробую описать.
|
|
|
|
|
Jun 22 2006, 07:28
|

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

|
Цитата(bigirbis @ Jun 22 2006, 11:17)  Если есть беспокойство по поводу того, что ядро не даст нужного приоритета для kernel module, есть один вариант (я как-то его реализовывал, но придумал не сам). Если надо, потом попробую описать. Kernel module работает как часть ядра, т.е. о приоритете говорить не совсем корректно. Другое дело механизм передачи управления функциям из модуля. Тут есть варианты, начиная с древних BH-handlers и заканчивая потоками ядра.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jun 22 2006, 07:39
|
Группа: Новичок
Сообщений: 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. Погеморроиться пришлось прилично. Ядро попросту игнорировало эти скан-коды. А править и пересобирать его нельзя было по условиям задачи.
|
|
|
|
|
Jun 22 2006, 08:03
|
Местный
  
Группа: Свой
Сообщений: 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 - это некий мистификасьён  ... - может они что-то знают, и будем им верить?
|
|
|
|
|
Jun 22 2006, 09:07
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

|
Цитата(Evgeny_CD @ Jun 21 2006, 11:51)  Аспекты kernel module, RTAI чур пока не трогать. Реь идет о тупом программизме в user space. А kernel module никак и не решит вашу проблему: он может уменьшить и детерминировать время латентности на прерывание, или I/O операции ... но вас ведь интересует "временная девиация" в пользовательском приложении, так?
|
|
|
|
|
Jun 22 2006, 09:32
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

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