Странное торможение параллельных потоков

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Хорошо, хоть какие-то приятные новости по этой теме :crazy: Интересно, на Линуксе есть подобные проблемы... Проверить бы там, как работает скомпиленная прога с GUI и без него в разных вариантах (While Loop/Timed Loop) (Wait/Wait Until Next ms Multiple). Понятно, что обычный Linux тоже не ОСРВ (см. Comparing real-time scheduling on the Linux kernel and an RTOS), но наверное должны быть некоторые отличия от поведения Windows. Я бы сам проверил, но у меня Линь только на виртуалке, а как известно
[b][color=#008000]IvanLis[/color][/b] писал(а):Если Вы лодку погрузите на машину, это не значит, что машина станет водным судном.
Может быть, кто-то из линуксоидов просветит на этот счёт.

Кстати, наткнулся тут на механизм работы :vi: Wait (ms). Инфа размещена здесь - LabVIEW Timing Mechanism, я скопирую её сюда для сохранения целостности темы.
Date: Tue, 15 Jun 1999 06:47:00 -0500
From: gam@natinst.com (Greg McKaskle)
Subject: Re: [W] Timing Quality?
Organization: National Instruments

The two wait functions, plus the timeouts on occurrences are all based on the same mechanism. Arithmetic is done to determine how long the node needs to suspend execution, and it sets up an occurrence. The occurrence manager keeps all of the timeout items sorted on a list, and it has a thread that calls Sleep with the smallest timeout in millisecs.

On nonwindows OSes with threads it may call nanosleep or other various functions for the OS to wake up the thread in N ms. For OSes without threads, this list is polled from time to time from the execution system to notice when occurrences have timed out and to schedule them.

Occurrences with a wait of 0 ms are never put on this list, and in fact wait nodes with 0 ms never even generate an occurrence, they are a special lower overhead case depending on the threading model.

Once the occurrences have been dispatched, the nodes have being scheduled on their various execution system queues. The execution system is either busy executing other code, or it has a thread waiting to execute (waiting on an event). If there is a waiting thread, the thread will be signaled in the process of queuing the node. If there are no threads available for that execution system, it will wait until the diagram code yields and schedules the next node in the queue.

If there are lots of wait functions going off in parallel, which includes all running VIs within one LV runtime, then it is up to LV as to what order they are queued in, and it is then up to the OS as to which order the threads that were signaled, get scheduled in and how the scheduling happens between the threads.

In summary, for a single wait function, the operations are:
  • ● Calculate the wakeup delay, put a high priority thread asleep for delay ms.
  • ● The thread that executed the wait function either starts executing parallel code that was already on the execution queue, or it calls WaitForSingleEvent.
  • ● When the high priority thread wakes up from sleep, it signals the waiting thread if necessary and transfers the node information to the execution queue.
  • ● The execution system thread can then resume the diagram code based on normal scheduling rules, and the high prioroty occurrence thread either goes to sleep for the next delay amount or calls WaitOnSingleEvent for another occurrence to be put on the list.
То есть, в очень упрощённом виде инструмент Wait (ms) аналогичен такому коду:
2016-06-04_21-10-56.jpg
2016-06-04_21-10-56.jpg (22.61 КБ) 12940 просмотров
На самом деле в LV множество потоков, и если упрощать до этого уровня, то поток приложения активирует Occurrence через OccurAtTime, а поток LV Execution System периодически проверяет список Occurrences через ChkOccurrences. А вот как сами Occurrences работают - это уже другой вопрос.
И, в принципе, понятно, почему задержка именно так сделана, а не скажем через стандартный виндовый Sleep - на Линуксе и Маке свои собственные реализации задержек, а :labview: должен поддерживать множество платформ.

Не менее интересная статья на том же сайте - Studying LabVIEW Using QueryPerformanceCounter, показывающая, как механизм Windows влияет на работу приложения в :labview: . Хотя эксперименты проводились 17 с лишним лет назад (!) на LV 5.0, полученные данные до сих пор актуальны на современных версиях Windows (что мы и получили в результате). В конечном счёте всё сводится к тому, что для получения чёткого детерминизма в работе программы её нужно запускать на RT OS, а Винда никак не подходит на эту роль.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

Ещё одно горькое замечание. Если у проги всё же есть своя лиц. панель (в отдельном потоке), и :vi: вызывается как обычно, а не через asynchronous call (при этом, ес-сно, из времякритичного потока вынесено всё чувствительное к UI), то даже эти найденные способы (timed loop и ждущий таймер из kernel32.dll) не спасают от больших задержек в 260 мс при сворачивании/разворачивании разных окон в WinXP. Лишь изредка наблюдал отсутствие такой задержки, причём независимо от того, какое окно сворачивалось - от данной программы или от другой. Ставить высокий приоритет процесса тоже не помогает. Тут остаётся только один совет: уходить от WinXP на более новые, там ситуация гораздо лучше.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K писал(а):Тут остаётся только один совет: уходить от WinXP на более новые, там ситуация гораздо лучше.
Можно превратить обычный ПК в RT-таргет:
Using Desktop PCs as RT Targets with the Real-Time Module
Converting a Desktop PC to a LabVIEW Real-Time Target
Requirements for Desktop PCs as LabVIEW Real-Time Targets
+ ещё куча ссылок в гугле вылазит по запросу "labview rt os on pc"
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

Можно превратить обычный ПК в RT-таргет
За ссылки спасибо. Но тут беда в том, что дрова от спектрометра - под винду.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K писал(а):За ссылки спасибо. Но тут беда в том, что дрова от спектрометра - под винду.
У разрабов нет под другие ОСи? А что насчёт исходников?
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

У разрабов нет под другие ОСи? А что насчёт исходников?
Под Linux есть вроде. Исходников драйвера и dll на сайте нет. Хорошо, что есть примеры для низкоуровневой связи (описание протокола - по запросу). Если уж очень приспичит, полезу в это болото (не потому что раньше не реализовывал собственную работу с протоколами обмена, а потому что эта трата времени и сил должна быть оправдана).
Последний раз редактировалось Boris_K 05 июн 2016, 23:56, всего редактировалось 2 раза.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K писал(а):Под Linux есть вроде.
Вот, как вариант, попробовать пока на Линуксе запустить это дело. Если там проблем с тормозами не будет, то в принципе решение найдено. Пусть непривычное для Windows-юзеров, но если речь об ответственном объекте, то главное не удобство, а надёжность.

Хотя, можно пока не торопиться, а выполнить тест, о котором я писал выше.
dadreamer писал(а):Интересно, на Линуксе есть подобные проблемы... Проверить бы там, как работает скомпиленная прога с GUI и без него в разных вариантах (While Loop/Timed Loop) (Wait/Wait Until Next ms Multiple). Понятно, что обычный Linux тоже не ОСРВ (см. Comparing real-time scheduling on the Linux kernel and an RTOS), но наверное должны быть некоторые отличия от поведения Windows.
У меня, к сожалению, под руками чистого Линукса нет ни дома, ни на работе.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K, а протокол какой? Тут речь о том, чтобы переписать дрова и библиотеку под RT-ось, т.к. на Винде смысла нет заморачиваться - "самопальный" драйвер будет ничуть не лучше оригинального. Но на самом деле, потребуется приличное количество времени, чтобы с нуля это дело реализовать.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

Boris_K, а протокол какой? Тут речь о том, чтобы переписать дрова и библиотеку под RT-ось, т.к. на Винде смысла нет заморачиваться - "самопальный" драйвер будет ничуть не лучше оригинального. Но на самом деле, потребуется приличное количество времени, чтобы с нуля это дело реализовать.
Пока не запрашивал. Оправданнее пока действительно не морочиться, а поставить туда другой комп хотя-бы с Win7 и многоядерным процом, уже можно спокойно работать.
"самопальный" драйвер будет ничуть не лучше оригинального
Вот на этот счёт есть сомнения. :wink: Глюков у них там хватает. Кроме того, эта дополнительная прослойка в виде dll. В то же время, те реализации протоколов, которые довелось делать мне, работают безукоризненно. Тут, конечно уже всё упирается в качество и полноту документации протокола.
Последний раз редактировалось Boris_K 06 июн 2016, 18:05, всего редактировалось 4 раза.
Race conditions - опасный и скользкий баг!
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

Попробовал зарегить службу (на WinXP), как написано по ссылке http://digital.ni.com/public.nsf/allkb/ ... B4004DF99B
В качестве самой программы - тестовая прога опроса спектрометра, которая без лиц. панели, и с одним потоком, аналогично тестам, работает фоново 60 секунд и затем сохраняет файл с мин. и макс. временами (по разности штампов времени на спектрах).

При отсутствии активности пользователя стала постабильнее (за 2 запуска по 60 сек, не пропустила ни одного спектра при 3 мс периоде). Но стоит свернуть/развернуть любое окно - появляется всё та же задержка 250 - 270 мс.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K, прошу прощения, не протокол, а интерфейс... Ethernet / USB / ... ? И какая скорость (Gigabit / 3.0 / ...)?
Boris_K писал(а):Вот на этот счёт есть сомнения.
Если тормоза наблюдаются у "пустой" проги безо всяких коммуникаций, то внесение в неё хоть какого-то взаимодействия картину не улучшит (а, возможно, и ухудшит). Так что я бы на Винде точно не стал этим запариваться.
Boris_K писал(а):Кроме того, эта дополнительная прослойка в виде dll.
Скорее всего, от неё никуда не деться, т.к. в современных ОС обращаться напрямую к дровам (*.sys) запрещено из-под пользовательской среды.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

Интерфейс USB 2, скорость, с которой передаёт спектрометр - нигде не документирована.
Если тормоза наблюдаются у "пустой" проги безо всяких коммуникаций, то внесение в неё хоть какого-то взаимодействия картину не улучшит (а, возможно, и ухудшит). Так что я бы на Винде точно не стал этим запариваться.
С этим и не спорю.
Скорее всего, это неё никуда не деться, т.к. в современных ОС обращаться напрямую к дровам (*.sys) запрещено из-под пользовательской среды.
А зачем вообще эти драйвера, если можно напрямую слать запросы в прибор и принимать ответы? Правда, к USB-устройствам ещё не приходилось реализовывать протоколы обмена, но разве тут будет принципиальное отличие от COM-порта?
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K писал(а):Интерфейс USB 2, скорость, с которой передаёт спектрометр - нигде не документирована.
До 480 Мбит/с (≈ 57,22 МБ/с), согласно спецификации на USB 2.0. Но, скорей всего, скорость реально меньше раза в 1,5-2.
Boris_K писал(а):А зачем вообще эти драйвера, если можно напрямую слать запросы в прибор и принимать ответы? Правда, к USB-устройствам ещё не приходилось реализовывать протоколы обмена, но разве тут будет принципиальное отличие от COM-порта?
А что будет, если вы подключите свой прибор к компу с "голой" ОС? Она тут же начнёт искать дрова и спросит вас. Ведь устройство не HID-совместимое (клава, мышь), да и в базе MS его нет наверняка. Вот, драйвер перекладывает команды пользователя в "сырой" USB-протокол. И здесь всё намного сложнее, чем с COM/LPT.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странное торможение параллельных потоков

Сообщение Boris_K »

До 480 Мбит/с (≈ 57,22 МБ/с), согласно спецификации на USB 2.0. Но, скорей всего, скорость реально меньше раза в 1,5-2.
Там наверное меньше раз в 20, судя по объёму данных, приходящих с каждым спектром (около 5 кБайт), и в 1 сек максимум около 600 спектров позволяет принимать (ес-сно, в режиме постоянного измерения с минимальной выдержкой). То есть поток около 3 МБайт/с. Но мы уже отходим от темы.
Вот, драйвер перекладывает команды пользователя в "сырой" USB-протокол. И здесь всё намного сложнее, чем с COM/LPT
Нагуглил тут много чего про протокольный уровень USB, действительно, быстро не разгребёшь. На правах оффтопика: зачем так всё потребовалось усложнять в USB, по сравнению со старым добрым последовательным портом (cмотришь в описание протокола к прибору, шлёшь запросы, получаешь ответы, жизнь прекрасна... Никаких драйверов, никакой мороки)?
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Странное торможение параллельных потоков

Сообщение dadreamer »

Boris_K писал(а):зачем так всё потребовалось усложнять в USB, по сравнению со старым добрым последовательным портом (cмотришь в описание протокола к прибору, шлёшь запросы, получаешь ответы, жизнь прекрасна... Никаких драйверов, никакой мороки)?
Из интернетов:
microchip.com писал(а):Интерфейс USB приобретает все большую популярность как интерфейс связи периферийных устройств с ПК и современные компьютеры зачастую не имеют привычного интерфейса RS-232. Популярность USB обусловлена многими причинами, вот основные из них:

• высокая скорость обмена, высокая помехозащищенность
• управление потоком данных, контроль целостности и исправление ошибок
• возможность разветвления через хабы и подключения большого количества устройств.
• возможность получения питания от шины
• универсальность шины – возможность подключения разноплановых устройств (клавиатура, принтер, модем)
• автоматическая идентификация и конфигурирование системы, Plug and Play
hi-tech.mail.ru писал(а):Преимущества USB

Сегодня USB вытеснил практически все другие интерфейсы для подключения компьютерной периферии (смотри врезку «Внешние интерфейсы – конкуренты USB»), залогом чему стали его неоспоримые преимущества.

Распространенность. Любой компьютер, выпущенный в последние годы, оснащен одним или несколькими портами USB (на современных настольных ПК их до 12, на подавляющем большинстве ноутбуков – 3–4). Выбор же USB-устройств просто огромен.

Простота в использовании. USB – идеальное воплощение принципа Plug and Play. Устройства с этим интерфейсом можно подключать и отключать во время работы компьютера. Современные операционные системы сразу же распознают USB-устройства и подгружают необходимые драйверы. На многих компьютерах для повышения удобства доступа порты USB размещены на фронтальной или боковой стороне корпуса. К тому же перепутать разъемы и неправильно подключить периферию невозможно.

Высокая пропускная способность. У интерфейса USB 2.0 она составляет 480 Мбит/с. Копирование файла размером 700 Мб на накопитель, подключенный к порту USB, займет не более 20 секунд.

USB-флэшки – идеальные накопители для обмена данными

Обеспечение питания. Порт USB не только служит для подключения периферии, но и может «подкармливать» гаджеты с низким энергопотреблением, к примеру, мыши, клавиатуры, флэшки и даже 2,5-дюймовые жесткие диски. Напряжение питания по шине USB равно 5 В при силе тока до 500 мА. Этого, конечно, недостаточно для периферийных устройств со сравнительно высоким энергопотреблением, таких как принтеры или внешние жесткие диски форм-фактора 3,5”. Поэтому они комплектуются собственными блоками питания, подключаемыми непосредственно к розетке электросети.
Однако за эти плюсы приходится чем-то платить. Как видим, плата заключается в усложнённом протоколе и необходимости написания индивидуальных драйверов (если устройство не соответствует стандартам драйверов MS). Можно, конечно, найти и минусы USB и плюсы COM-порта относительно USB. Но суть такова, что COM-порты морально и физически устарели, их вытеснили новые интерфейсы. То, что до сих пор встречается в промышленных устройствах - атавизм. Всё больше современных приборов оснащены новыми интерфейсами, такими как Gigabit Ethernet, USB 3.0, промышленный Ethernet и т.п.
Boris_K писал(а):Никаких драйверов, никакой мороки
Вообще-то на последовательный интерфейс тоже имеются свои драйвера. Просто они идут "из коробки" и вы их никак не ощущаете.
Вложения
2016-06-07_20-20-55.jpg
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»