Google только что открыл исходный код инструмента, который позволяет вам визуализировать, как ваша программа обрабатывается при планировании Linux. Идея в том, что вы можете использовать SchedViz для настройки системы.
Все мы знаем, какой алгоритм лучше всего использовать — моя программа работает, все остальное приостановлено. Эффективно, но не кооперативно. Чтобы достичь того же результата, давая возможность другим программам использовать ЦП, нам нужно настроить и, возможно, даже выбрать алгоритм планирования.
Проблема в том, что отсутствуют базовые инструменты Linux для выполнения этой работы, и обычно бывает так, что вы угадываете, что может быть лучше всего. В современной системе такое предположение вряд ли будет правильным, потому что существует слишком много переменных. У каждого потока есть приоритет, и они взаимодействуют в соответствии с политикой планирования. Это может иметь значение, какому ядру назначен поток, и лучше избегать изменения ядер.
SchedViz использует встроенную способность ядра Linux передавать отладочные данные в буфер. Затем он использует данные в буфере, чтобы показать вам подробности запуска и остановки потоков. Вы запускаете сценарий командной строки для сбора данных в течение определенного времени, а затем загружаете их в SchedViz для анализа, который вы хотите применить. Вы также можете сохранить сохраненные трассировки для сравнения любых внесенных вами изменений.
На данный момент SchedViz может:
Количественно оценить нехватку задач из-за циклической организации очередей
Выявление основных антагонистов, крадущих работу у критических потоков
Определите, когда выбор распределения ядра приводит к ненужному ожиданию
Оцените различные политики планирования
В блоге, анонсирующем инструмент, описывается анализ антагонистов:
«Антагонизм описывает ситуацию, в которой поток жертвы готов к запуску на каком-то ЦП, в то время как другой поток-антагонист работает на том же ЦП. Длительные антагонизмы или высокая совокупная продолжительность антагонизмов могут ухудшить взаимодействие с пользователем или эффективность системы, делая критический процесс недоступен в критические моменты «.
SchedViz позволяет вам посмотреть на диаграмму и увидеть, какой поток не позволяет вашему важному потоку работать:
Еще одна проблема, с которой может помочь инструмент, — это выделение потоков определенным ядрам. В современной машине не все ядра имеют одинаковый доступ к памяти — NUMA — неоднородный доступ к памяти. Это непростая для понимания область, и не каждый захочет пытаться оптимизировать что-то настолько сложное. В большинстве случаев привязка вашего процесса к определенному ядру и обнаружение того, что еще использует это ядро, — это все, что вам действительно нужно, но это, вероятно, изменится по мере увеличения типичного количества ядер.
Это полезный инструмент, особенно если вы пытаетесь оптимизировать IoT или процессы в реальном времени. Я очень хочу увидеть, что он делает с графиком крайних сроков. SchedViz только зарождается, и есть планы добавить дополнительные функции для анализа связанного поведения, такого как обработка прерываний.
Вы можете найти код на GitHub.
Гарри Фэйрхед — автор книг Raspberry Pi IoT на C, Micro: bit IoT на C и Fundamental C, в которых он подробно рассматривает C для использования в любом контексте, близком к аппаратному. Его последняя книга «Применение C для Интернета вещей с Linux» была опубликована в июне и является книгой, которая вам нужна, если вы программируете для одноплатных компьютеров (SBC), работающих под управлением Linux, или если вы пишете код на C, который взаимодействует с оборудованием. .