Система представляет собой встроенное ядро Linux/Busybox на небольшой встроенной плате с запущенным веб-сервером (Boa).Определение причины задержки/паузы - планировщик ядра и т. Д.
Мы видим, что некоторые большие задержки в ответах на веб-сервер - иногда> 500мс без причины, так что я копал ...
На Обильно рассеяния отладочных принтами в коде это, кажется, пришел вплоть до всего процесса просто ... останавливаясь на бит, таким образом, который я могу только предположить, должен быть процесс/поток прерывается другим процессом.
Использование операторов печати и clock_gettime() для вычисления времени, затраченного на обработку запроса, я вижу, что код достигает нижней части цикла while() (разбор ввода), печатает что-то вроде "Time so far: 5ms"
, а затем следующую строку на верхняя часть цикла будет печатать "Time so far: 350ms"
- и все, что делает код между нижней частью цикла и первой печатью вверху, является базовой проверкой вдоль строк while(position < end)
, у нее нет ничего сложного, что могло бы задержать ее.
Нет блокировки ввода-вывода, данные, которые он обрабатывает, уже появились, и он не делает никаких внешних вызовов или не блуждает в сложные функции.
Я изучил вопрос о том, будет ли планировщик ядра (CFS в нашем случае), добавив звонки на clock() (время процессора, а не настенные часы), и снова вычисляем разницу во времени Vs используемое время процессора. Я вижу, что временная задержка настенного времени может превышать 300 мс от одного цикла к следующему, но зарегистрированное время обработки процессора (которое, кажется, имеет разрешение ~ 10 мс), больше похоже на 50 мс.
Итак, это предполагает, что планировщик задач удерживает процесс в течение сотен миллисекунд за раз. Я проверил scheduler granularity and max delay, и он нигде не близок к 100 мс, задержка планировщика установлена на уровне 6 мс, например.
Любые советы о том, что я могу сделать сейчас, чтобы попытаться отследить проблему - определить процессы, которые могли бы затормозить CPU за> 100 мс, измерить/отслеживать, что делает планировщик и т. Д.?