Как я могу уменьшить высокую загрузку процессора от DPC с последовательными портами USB

У меня есть приложение, которое взаимодействует до 50 устройств через последовательные порты. Связь происходит в потоках, и потоки регулируются так, что только определенное число одновременно активны. Потоки создаются по мере необходимости, выполняют свою работу, завершают работу и освобождают используемые ресурсы.

в некоторых случаях последовательные порты реализованы с портами Moxa TCP / IP Ethernet. Водитель Moxa бежит на ПК который подвергает приборы действию Moxa на сети как COM Порт.

в других случаях серийные порты снабжены через эпицентры деятельности УСБ которые обеспечивают 10 серийных портов каждое.

вот в чем проблема. Когда только последовательные порты Moxa используются ,и (скажем) 8 включены, использование ЦП приложения колеблется между 1% и 30%, в зависимости от того, сколько потоков активны. Приложение ведет себя разумно, и компьютер реагирует.

Когда 8 портов USB затем включен, загрузка процессора приложения пики на 50-60%, как я ожидал, но в общей сумме использование процессора ПК поднимается почти до 100% и остается там. Неудивительно, что все останавливается.

Я использовал Process Explorer и обнаружил, что основная часть использования процессора за пределами моего приложения была в двух задачах - System Idle Process/DPC (отложенные вызовы процедур) и System Idle Process/System. Использование в этих задачах достигает максимума около 40% каждый. Когда используются только порты Moxa, эти задачи не показывают значительной загрузки ЦП.

Я пробовал возиться с приоритет потока, и это не имеет значения. Порты работают на относительно низкой скорости (2400).

под управлением инструмент проверки задержки DPC показывает задержку до 6мс когда порты УСБ серийные в пользе.

26
задан soandos
04.05.2023 13:58 Количество просмотров материала 3635
Распечатать страницу

1 ответ

высокая загрузка ЦП возникла из-за того, что в приложении каждый канал открывал свой последовательный порт в начале сеанса и держал его открытым в течение сеанса приложения. Это было прекрасно с портами, основанными на адаптерах портов Moxa ethernet-to-COM, или с" локальными " портами, но в USB-портах просто открытие порта вызывает использование ЦП DPC. Наличие открытых портов USB 16 делает компьютер непригодным для использования, несмотря на отсутствие трафика на любом порту.

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

1
отвечен rossmcm 2023-05-05 21:46

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх