Facebook publikuje Hermit, zestaw narzędzi do powtarzalnego wykonywania programów

Facebook (zakazany w Federacji Rosyjskiej) opublikował kod zestawu narzędzi Hermit, który tworzy środowisko do deterministycznego wykonywania programów, pozwalając na różne przebiegi, aby osiągnąć ten sam wynik i powtórzyć wykonanie przy użyciu tych samych danych wejściowych. Kod projektu napisany jest w języku Rust i jest rozpowszechniany na licencji BSD.

Podczas normalnego wykonywania na wynik wpływa wiele czynników zewnętrznych, takich jak bieżący czas, planowanie wątków, adresy pamięci wirtualnej, dane z generatora liczb pseudolosowych i różne unikalne identyfikatory. Pustelnik umożliwia uruchomienie programu w kontenerze, w którym te współczynniki pozostają stałe podczas kolejnych uruchomień. Powtarzalne wykonanie, które w pełni odtwarza nietrwałe parametry środowiska, może być wykorzystane do diagnozowania błędów, wieloetapowego debugowania z powtarzalnymi uruchomieniami, tworzenia stałego środowiska do testów regresyjnych, testów obciążeniowych, identyfikowania problemów przy wielowątkowości i w powtarzalnych systemach kompilacji .

Facebook publikuje Hermit, zestaw narzędzi do powtarzalnego wykonywania programów

Powtarzalne środowisko tworzone jest poprzez przechwytywanie wywołań systemowych, z których część jest zastępowana własnymi procedurami obsługi, które dają trwały wynik, a część jest przekierowywana do jądra, po czym wynik jest usuwany z nietrwałych danych. Do przechwytywania wywołań systemowych wykorzystywany jest framework Reverie, którego kod publikuje także Facebook. Aby zapobiec wpływowi zmian w systemie plików i żądań sieciowych na postęp wykonywania, wykonanie jest wykonywane przy użyciu stałego obrazu FS i przy wyłączonym dostępie do sieci zewnętrznych. Uzyskując dostęp do generatora liczb pseudolosowych, Hermit generuje predefiniowaną sekwencję, która jest powtarzana przy każdym uruchomieniu.

Jedną z najbardziej złożonych zmiennych wpływających na postęp wykonywania jest harmonogram wątków, którego zachowanie zależy od wielu czynników zewnętrznych, takich jak liczba rdzeni procesora i obecność innych wątków wykonawczych. Aby zapewnić powtarzalność działania programu planującego, wszystkie wątki są wykonywane szeregowo w połączeniu tylko z jednym rdzeniem procesora i przy zachowaniu kolejności przekazywania kontroli do wątków. Każdy wątek może wykonać ustaloną liczbę instrukcji, po czym wykonanie zostaje zatrzymane i przeniesione do innego wątku (w celu ograniczenia procesora PMU (Performance Monitoring Unit), który zatrzymuje wykonywanie po określonej liczbie rozgałęzień warunkowych).

Aby zdiagnozować problemy z wątkami spowodowane wyścigiem, Hermit posiada tryb identyfikujący operacje, których kolejność wykonania była nieprawidłowa i doprowadziła do nieprawidłowego zamknięcia. Aby zidentyfikować tego typu problemy, dokonuje się porównania stanów, w których zarejestrowano poprawną pracę i nieprawidłowe zakończenie wykonania.

Źródło: opennet.ru

Dodaj komentarz