У меня есть многопоточное приложение, в котором один из потоков выполняет критичную по времени работу. Этот критичный ко времени поток имеет приоритет «критичный ко времени» при запуске. Кроме того, другие потоки в приложении имеют маску привязки к процессору, так что этот критичный ко времени поток всегда имеет полный доступ к восьми ядрам ЦП (из 12 в общей сложности для двух Xeon). На сервере не запущены никакие другие приложения (кроме служб, которые Windows запускает самостоятельно).
Тем не менее, даже со всеми этими мерами предосторожности я записываю события, когда этот критический по времени поток не работает в течение 80-100 мс привремя. Моя регистрация показывает, что иногда она останавливается в середине задачи и возобновляется после 80-100 мс.
Мой вопрос: что может быть причиной этих 80-100 мс отключений потока и/ или как мне выяснить, что их вызывает?
Некоторая другая, возможно, относящаяся к делу информация:
- Отключения сильно коррелируют с высокой активностью в других прикладных потоках, но я отслеживаю графики использования ЦП вМонитор ресурсов и может видеть, что процессоры, выделенные для срочной задачи, намного меньше, чем 100% (но 4, которые имеют полный доступ, обычно в это время составляют 100%)
- Во время этих операций также наблюдается интенсивная работа сетипериоды пиковой производительности, в которых обычно происходят отключения электроэнергии.
- Критически важная по времени задача заключается в взаимодействии с аппаратной частью через связь PCIe, но события «отключения» не обязательно происходят при обращении к этому устройству.
- Когда все работает правильно,критический по времени поток тратит около 1-2 мс на выполнение работы, а затем ждет около 30 мс в занятом цикле.
- критическая по времени задача делит ресурс с некоторыми другими потоками, но она защищена с помощью спин-блокировки, и запись в журнал указываетотключения в ожидании блокировки не происходит. Кроме того, я вижу, что эти другие потоки не удерживают спин-блокировку более нескольких микросекунд.
- Изменение приоритета приложения на «ВЫСОКИЙ» с помощью диспетчера задач не улучшает производительность
- У меня есть тестовые серверы под управлением Win7 и Win10, и оба показывают проблему.