Hermit, narzędzie do kontrolowanego testowania i wykrywania błędów

pustelnik

Pustelnik, jako powtarzalny pojemnik, daje wyobrażenie o tym, jak by to było, gdyby stos systemowy zapewniał powtarzalność jako abstrakcję

Prezentacja Facebooka ostatnio poprzez publikację, uruchomienie Pustelnik, który tworzy A środowisko do deterministycznego wykonywania programów, co umożliwia osiągnięcie tego samego wyniku i powtórzenie procesu wykonania na różnych uruchomieniach przy użyciu tych samych danych wejściowych.

Podczas normalnego wykonywania na dane wyjściowe wpływają różne zewnętrzne czynniki, takie jak bieżący czas, funkcje planowania wątków, adresy pamięci wirtualnej, dane z generatora liczb pseudolosowych i różne unikalne identyfikatory.

Pustelnik umożliwia uruchomienie programu w kontenerze gdzie czynniki te pozostają stałe w kolejnych przebiegach. Powtarzalne wykonanie, które w pełni odwzorowuje konfigurację zmiennego środowiska, może być używany do diagnozowania błędów, debugowania wieloetapowe z iteracjami, tworząc stałe środowisko do testowania regresji, testów warunków skrajnych, wielowątkowego rozwiązywania problemów i powtarzalnych systemów kompilacji.

Pustelnik wymusza deterministyczne wykonywanie dowolnych programów i działa jak odtwarzalne opakowanie. Oznacza to, że hermetycznie izoluje program od źródeł niedeterminizmu, takich jak synchronizacja, przeplatanie wątków, generowanie liczb losowych itp. Gwarantowany determinizm jest potężnym narzędziem i stanowi podstawę wielu aplikacji, w tym testów warunków skrajnych współbieżności, nagrywania/odtwarzania, odtwarzalnych kompilacji i automatycznej diagnostyki błędów współbieżności i nie tylko.

Pustelnik nie może odizolować programu gościa od źródeł niedeterminizmu, takich jak zmiany w systemie plików lub odpowiedzi z sieci zewnętrznych. Zamiast tego, aby zapewnić pełny determinizm, użytkownik musi zapewnić stały obraz bazowy systemu plików (na przykład z Dockerem) i wyłączyć sieci zewnętrzne.

O Pustelniku

Pustelnik umożliwia moc tworzy odtwarzalne środowisko poprzez przechwytywanie wywołań systemowych, z których niektóre są zastępowane własnymi procedurami obsługi, które generują stałe dane wyjściowe, a niektóre z nich są przekierowywane do jądra, po czym nietrwałe dane są usuwane z danych wyjściowych.

Aby przechwytywać połączenia do systemu, stosowana jest rama zaduma, którego kod jest również publikowany przez Facebooka. Aby zapobiec wpływowi zmian systemu plików i żądań sieciowych na postęp wykonywania, wykonanie jest wykonywane przy użyciu nieruchomego obrazu systemu plików i z wyłączonym dostępem do sieci zewnętrznych. Uzyskując dostęp do generatora liczb pseudolosowych, Hermit tworzy predefiniowaną sekwencję, która jest powtarzana za każdym razem, gdy jest wykonywana.

Najbardziej złożonym źródłem niedeterminizmu jest harmonogram wątków. Sposób, w jaki jądro planuje wątki, zależy od wielu czynników zewnętrznych, w tym liczby fizycznych procesorów lub innych wątków działających w systemie, które wymagają czasu procesora.

Spośród bardziej złożonych, nietrwałych wpływów na wydajność, podświetla harmonogram wątków, którego zachowanie zależy od wielu czynników zewnętrznych, takich jak liczba rdzeni procesora i obecność innych uruchomionych wątków.

Aby zapewnić powtarzalne zachowanie programu planującego, wszystkie wątki są serializowane, powiązane z pojedynczym rdzeniem procesora oraz w kolejności, w jakiej kontrola jest przekazywana do wątków. Każdy wątek może wykonać określoną liczbę instrukcji, po czym wykonywanie jest zatrzymywane i przenoszone do innego wątku (w celu ograniczenia stosuje się jednostkę CPU PMU (Performance Monitoring Unit), która zatrzymuje wykonywanie po określonej liczbie rozgałęzień warunkowych).

zdiagnozować problemy z nitkami z powodu wyścigu, pustelnik posiada tryb wykrywania operacji, które były niesprawne i spowodował blokadę. W celu identyfikacji takich problemów dokonuje się porównania między stanami, w których zarejestrowano poprawną operację oraz nieprawidłowe zakończenie wykonania.

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten temat, powinieneś o tym wiedzieć kod projektu jest napisany w języku Rust i jest rozpowszechniany na licencji BSD.

Możesz sprawdzić szczegóły w poniższy link.


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.