The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Facebook опубликовал Hermit, инструментарий для повторяемого выполнения программ

23.11.2022 20:52

Facebook (запрещён в РФ) опубликовал код инструментария Hermit, формирующего окружение для детерминированного выполнения программ, позволяющее при разных запусках добиться получения неизменного результата и повторения хода выполнения при использовании одних и тех же входных данных. Код проекта написан на языке Rust и распространяется под лицензией BSD.

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

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

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

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

  1. Главная ссылка к новости (https://developers.facebook.co...)
  2. OpenNews: Уязвимость в ядре Linux, позволяющая обойти ограничения режима Lockdown
  3. OpenNews: Выпуск Muen 1.0, открытого микроядра для создания высоконадёжных систем
  4. OpenNews: Яндекс опубликовал skbtrace, утилиту для трассировки сетевых операций в Linux
  5. OpenNews: Для Linux предложен механизм верификации корректности работы ядра
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/58182-facebook
Ключевые слова: facebook, hermit, test, debug
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 22:27, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    А потом реальный код свалится с реальными данными.
     
     
  • 2.5, Аноним (5), 22:33, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Будут делать сферичекого коня в вакууме для своей метавселенной.
     
     
  • 3.40, Аноним (40), 05:09, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > запустить программу в контейнере, в котором данные факторы остаются постоянными при последующих запусках

    чтобы добиться повторяемости эксплоитов? Не для того рандомизацию всего это делали, чтобы потом её гасить.

     
     
  • 4.64, Аноним (64), 11:41, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хорошее дело хермитом не назовут!
     
  • 2.10, Минона (ok), 22:47, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Не, будут запускать в этом же контейнере. Делов то.
     
     
  • 3.41, Аноним (40), 05:10, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для чего нужна программа, у которой НЕ меняются входные данные?! Одноразовая? Тогда зачем её запускать много раз, чтобы увидеть ровно один и тот же ответ...
     
     
  • 4.55, Минона (ok), 07:36, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Для чего нужна программа, у которой НЕ меняются входные данные?! Одноразовая? Тогда
    > зачем её запускать много раз, чтобы увидеть ровно один и тот
    > же ответ...

    спроси у марка зачем им эта хрень понадобилась

     
     
  • 5.66, Аноним (40), 17:57, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > зачем им эта хрень понадобилась

    они другого и не делают.

     
  • 2.30, Аноним (30), 01:40, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это не для тестирования, а для воспроизведения.
     
     
  • 3.42, Аноним (40), 05:11, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот ты посчитал 2*2. Зачем тебе опять это считать?
     
     
  • 4.68, Lefsha (ok), 13:39, 25/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот ты посчитал 2*2. Зачем тебе опять это считать?

    Очень просто. Они же написали. Все зависит от результата, который ты получил!

    Например ты получил 5. Очевидно, что надо считать еще раз и еще раз..
    и так далее до тех пор пока наконец не будет 3... Щютка.

     
  • 3.60, Бывалый смузихлёб (?), 09:04, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Осталось всего ничего - всего лишь полностью воспроизвести все исходные данные, скорее всего, в динамике

    > все потоки выполняются сериализованно в привязке только к одному ядру CPU и с сохранением порядка передачи управления потокам

    И учесть что проблемы и особенности многоядерный и многопроцессорных систем *это* всё равно не воспроизводит
    Очень хорошая штука для воспроизводства проблем ПО на жирных фейсбучных серваках

    Не зря этот инструмент на мороз выкинули. Возможно даже вместе с “гениальной“ командой

     

  • 1.3, Likern (?), 22:33, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Блин, это офигенно!
     
     
  • 2.50, Аноним (40), 05:22, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ...офигенно, как получается из ничего изображать бурную деятельность!
     

  • 1.4, Минона (ok), 22:33, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    За Rust и BSD плюс.
     
     
  • 2.14, Аноним (14), 23:08, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И чем это лучше БДСМ?
     
     
  • 3.28, Аноним (28), 01:07, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это оно и есть.
     
  • 3.54, Минона (ok), 07:34, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > И чем это лучше БДСМ?

    хз, тебе виднее, я не пробовал.

     

  • 1.6, Sw00p aka Jerom (?), 22:39, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    >данные от генератора псевдослучайных чисел

    агa https://imgs.xkcd.com/comics/random_number.png

     
     
  • 2.9, Минона (ok), 22:45, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Неправильно, должно быть 42 а не 4.
     
     
  • 3.11, Sw00p aka Jerom (?), 22:47, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ыыы почему?
     
     
  • 4.22, ИмяВымя (?), 00:12, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    42 — ответ на главный вопрос жизни, вселенной и всего такого.
     
     
  • 5.24, НяшМяш (ok), 00:24, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А я думал это Rust.
     

  • 1.15, Аноним (15), 23:25, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, оно свой execve2() реализует? Что в итоге мы наблюдаем в списке процессов, процессы хермита, или гостевой программы? Кто щупал, отзовитесь.
     
  • 1.16, Аноним (16), 23:33, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Кажется единственное предназначение этой штуки сказать УМВР, генерируй такое же псевдослучайное число как у меня...
     
     
  • 2.19, Sw00p aka Jerom (?), 23:59, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    обратный фаззинг :)
     

  • 1.33, Аноним (30), 02:20, 24/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не очень понятно какой практический смысл. Это нужно чтобы был супер редкий гейзенбаг, который просто так не повторить, при этом он не ловился никакими санитайзерами, потом его всё-таки нужно повторить, причём подобрав окружение в котором он повторяется, и потом типа спокойно отлаживать. Неужели у них столько таких багов, что это оправдывает написание этой хрени, вместо того чтобы куски кода где эти баги вылезают, переписать на безопасном языке?
     
     
  • 2.38, Вы забыли заполнить поле Name (?), 03:58, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > вместо того чтобы куски кода где эти баги вылезают, переписать на безопасном языке?

    Просто до кого-то дошло, что "безопасный" язык недостаточно безопасен.

     
  • 2.49, Аноним (40), 05:20, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Неужели у них столько таких багов, что это оправдывает написание этой хрени

    Тут скорее эксперименты с криптографией или троянами, зачем ещё регулировать энтропию?

     

  • 1.43, Аноним (43), 05:12, 24/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > Код проекта написан на языке Rust

    т.е. послезавтра я это уже не соберу, да и места на диске столько нету

     
  • 1.62, Аноним (62), 11:29, 24/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Facebook (запрещён в РФ)

    Запрещена мета, а не ФБ. ФБ прекрасно работает через прокси.

     
     
  • 2.67, Аноним (40), 17:59, 24/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ты путаешь сайт и компанию.
     

  • 1.63, Попандопала (?), 11:41, 24/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вводили pie ssp,а теперь обходят как могут.D
     
  • 1.65, Аноним (65), 13:41, 24/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "Проблема в том, что ваш генератор случайных чисел выдаёт значения в другом порядке, а с нашим ????окодом всё хорошо".
     
  • 1.69, Аноним (69), 16:56, 25/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Да этож оффигенный инструмент для запуска трилов!
     
     
  • 2.70, Аноним (70), 11:23, 26/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    trial-ов?
     
  • 2.71, Аноним (71), 23:57, 26/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    триалов надо запускать в виртуалке.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру