Hermit, інструмент для контрольованого тестування та виявлення помилок

відлюдник

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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.