Hermit, инструмент для контролируемого тестирования и обнаружения ошибок

отшельник

Отшельник как воспроизводимый контейнер дает представление о том, что было бы, если бы системный стек обеспечивал повторяемость как абстракцию

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

При обычном выполнении на вывод влияют различные посторонние факторы, такие как текущее время, функции планирования потоков, адреса виртуальной памяти, данные генератора псевдослучайных чисел и различные уникальные идентификаторы.

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

Hermit вызывает детерминированное выполнение произвольных программ и действует как воспроизводимая оболочка. То есть он герметично изолирует программу от источников недетерминизма, таких как синхронизация, чередование потоков, генерация случайных чисел и т. д. Гарантированный детерминизм — это мощный инструмент, который служит основой для ряда приложений, включая стресс-тестирование параллелизма, запись/воспроизведение, воспроизводимые сборки и автоматическую диагностику ошибок параллелизма и многое другое.

Hermit не может изолировать гостевую программу от источников недетерминизма, таких как изменения файловой системы или ответы из внешних сетей. Вместо этого для обеспечения полной детерминированности пользователь должен предоставить фиксированный базовый образ файловой системы (например, с помощью Docker) и отключить внешние сети.

Об отшельнике

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

Для перехвата звонков К системе, используется структура мечтательность, чей код также публикует Facebook. Чтобы изменения файловой системы и сетевые запросы не влияли на ход выполнения, выполнение выполняется с использованием неподвижного изображения файловой системы и с отключенным доступом к внешним сетям. Получив доступ к генератору псевдослучайных чисел, Hermit создает предопределенную последовательность, которая повторяется при каждом ее выполнении.

Самый сложный источник недетерминизма находится в планировщике потоков. То, как ядро ​​планирует потоки, зависит от многих внешних факторов, включая количество физических процессоров или других потоков, работающих в системе, которым требуется процессорное время.

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

Чтобы обеспечить повторяемое поведение планировщика, все потоки сериализованы, привязаны к одному ядру ЦП и в порядке, в котором управление передается потокам. Каждому потоку разрешено выполнять фиксированное количество инструкций, после чего выполнение останавливается и передается другому потоку (для ограничения используется CPU PMU (Performance Monitoring Unit), который останавливает выполнение после заданного количества условных переходов).

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

Наконец, если вы заинтересованы в том, чтобы узнать больше об этом, вы должны знать, что код проекта он написан на Rust и распространяется под лицензией BSD.

Вы можете уточнить детали в по следующей ссылке.


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.