Рекомендации по ресурсам для настройки производительности Windows (в реальном времени) - PullRequest
0 голосов
/ 20 сентября 2010

Есть ли какие-либо рекомендации для ресурсов по настройке приложений Windows (веб-сайты книг и т. Д.)?

У меня есть консольное приложение C ++, которое должно загружать аппаратное устройство значительным объемом данных с довольно высокой скоростью.,(размер буфера составляет 32 КБ, и он расходуется со скоростью ~ 800 Кбайт в секунду)

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

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

Спасибо!

Ответы [ 4 ]

4 голосов
/ 21 сентября 2010

Лучшее, на что вы можете надеяться в обычных Windows, - это «обычно соответствует требованиям времени». Если в системе выполняются какие-либо процессы, кроме вашего целевого приложения, будет время от времени пропускать сроки из-за несоответствий в расписании. Однако, если ваше приложение / оборудование может справляться с редкими, но случайными промахами, есть несколько способов уменьшить количество промахов.

  1. Установите приоритет вашего процесса на REALTIME_PRIORITY_CLASS
  2. Измените гранулярность планировщика на разрешение 1 мс с помощью функции timeBeginPeriod() (часть библиотек Windows Multimedia)
  3. Избегайте как можно большего количества системных вызовов в главном цикле (включая распределение памяти). Каждый системный вызов - это возможность для ОС перевести процесс в спящий режим и, следовательно, возможность для недетерминированного планировщика пропустить следующий срок

Если это не сделает вашу работу за вас, вы можете попробовать дистрибутив Linux с применением исправлений ядра в реальном времени. Я обнаружил, что они обеспечивают почти идеальное время (в течение 10 секунд с точностью до микросекунд в течение нескольких часов). Тем не менее, ничто иное, как настоящая ОС реального времени, не даст вам совершенства, но дистрибутивы Linux реального времени на намного ближе, чем обычные Windows.

1 голос
/ 21 сентября 2010

Оптимизация программного обеспечения на C ++ от agner.com - отличное руководство по оптимизации.

Как сказал Ракис , вам нужно быть очень осторожным в цикле обработки:

  • Нет выделения памяти. Вместо этого используйте стек и предварительно выделенную память.
  • Нет бросков. Исключения довольно дорогие, в win32 их стоимость даже не выкидывает.
  • Нет полиморфизма. Вы сохраните некоторые косвенные указания.
  • Широко используйте inline.
  • Нет замков. По возможности старайтесь без блокировок.
1 голос
/ 21 сентября 2010

Первое, что я хотел бы сделать, это настроить его так, чтобы он был как можно худее. Я использую этот метод. По этим причинам. Поскольку это консольное приложение, другой вариант - попробовать LTProf , который покажет вам, есть ли что-то, что вы можно плодотворно оптимизировать. Когда это будет сделано, вы будете в лучшем положении, чтобы найти проблемы с синхронизацией буфера, как предложила @Hans.

1 голос
/ 21 сентября 2010

Буфер будет длиться всего 40 миллисекунд.Вы не можете гарантировать нулевую недостаточную загрузку Windows с такими строгими требованиями к времени.В земле пользовательского режима вы, возможно, смотрите сотни миллисекунд, когда потоки ядра выполняют то, что им нужно.Они работают с более высокими приоритетами, которые вы можете получить.Квант потока на версии рабочей станции в 3 раза больше такта, уже за 40 миллисекунд (3 x 15,625 мсек).Вы даже не можете надежно конкурировать с потоками пользовательского режима, которые увеличили свой приоритет и заняли свое прежнее время.

Если больший буфер не является опцией, тогда вы смотрите на драйвер устройства, чтобы получить такой вид обслуживаниягарантия.Или что-то среднее, что может обеспечить больший буфер.

...