Dlaczego wydajność Home Assistant zmienia się po uruchomieniu innego kontenera?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Wydajność Home Assistant zmienia się, gdy uruchamiany jest inny kontener, ponieważ izolacja rozdziela procesy, ale nie procesor, pamięć, pamięć masową, sieć ani chłodzenie, które nadal są współdzielone.

Uruchamianie kontenera może obejmować rozpakowywanie warstw, inicjalizację baz danych, skanowanie plików, przydzielanie pamięci, kompilowanie kodu lub sondowanie sieci. Te krótkie skoki obciążenia mogą opóźniać pętlę zdarzeń Home Assistant albo zapisy komponentu Recorder, nawet jeśli chwilę później obie usługi wydają się bezczynne. Diagnoza wymaga zsynchronizowanych znaczników czasu opóźnień widocznych dla użytkownika i obciążenia zasobów hosta, ponieważ długa średnia może całkowicie ukryć konkurencję o zasoby podczas uruchamiania.

Krótkie skoki obciążenia procesora zwiększają opóźnienie planowania

Uruchamiana usługa może używać kilku rdzeni do dekompresji, inicjalizacji, indeksowania lub kompilacji w czasie działania. Krótkie wywołania zwrotne Home Assistant muszą wtedy dłużej czekać na zaplanowanie, co zwiększa opóźnienie między zdarzeniem a akcją, choć nie musi powodować błędu. Procentowe użycie procesora uśrednione z minuty może rozmyć pięciosekundowy skok, który użytkownicy wyraźnie zauważają.

Mechanizm „głośnego sąsiada” wykracza poza sytuację, w której dwa procesy żądają dostępu do tego samego rdzenia. Analiza firmy Intel dotycząca konkurencji o współdzielone zasoby opisuje zakłócenia dotyczące pamięci podręcznej, kontrolera pamięci i operacji wejścia-wyjścia, które mogą utrzymywać się nawet wtedy, gdy obciążeniom przydzielono osobne rdzenie.

Procesor jest prawdopodobną przyczyną, gdy opóźnienie zaczyna się wraz ze znacznikiem czasu uruchomienia, rosną kolejki procesów gotowych do wykonania, a pamięć masowa i sieć pozostają spokojne. Ograniczaj zasoby nowej usługi lub planuj jej uruchamianie dopiero po odtworzeniu tej zależności. Jeśli ponowne uruchomienie kontenera nie powtarza spowolnienia, osłabia to hipotezę o przyczynie procesorowej.

Przydzielanie pamięci może wywołać odzyskiwanie pamięci lub użycie pliku wymiany

Uruchamianie często powoduje największy gwałtowny wzrost zapotrzebowania usługi na pamięć: ładowanie indeksów, modeli, środowisk uruchomieniowych języków lub pamięci podręcznych. Jeśli ilość wolnej pamięci jest mała, host może odzyskiwać pamięć podręczną systemu plików, kompresować strony pamięci, korzystać z pliku wymiany albo zakończyć proces. Home Assistant może zwolnić, zanim zmieni się jego własne użycie pamięci, ponieważ cały host wykonuje pracę związaną z odzyskiwaniem zasobów.

Wytyczne dotyczące izolacji zasobów przedstawiają presję na pamięć jako efekt obejmujący cały host, a nie prywatny problem kontenera. To wyjaśnienie izolacji typu „głośny sąsiad” łączy ograniczenia procesora, pamięci RAM, dysku i sieci z bardziej przewidywalnym działaniem środowisk wielodzierżawnych.

Szukaj odzyskiwania pamięci, aktywności pliku wymiany, przestojów spowodowanych presją pamięci lub ponownych uruchomień kontenerów w tym samym momencie. Nie ustawiaj arbitralnie niskiego limitu dla Home Assistant — może to spowodować nową awarię. Zarezerwuj zmierzoną szczytową ilość pamięci roboczej wraz z zapasem na odzyskiwanie zasobów i ogranicz gwałtownie obciążającego sąsiada, gdy to on wywołuje presję.

Inicjalizacja pamięci masowej i sieci może mieć decydujące znaczenie

Rozpakowywanie obrazu, migracja bazy danych, skanowanie multimediów i odtwarzanie logów mogą nasycić współdzieloną kolejkę pamięci masowej. Wykrywanie usług, pobieranie pakietów lub zapełnianie pamięci podręcznej może zużywać przepustowość sieci i DNS. Home Assistant czeka wtedy na zatwierdzenia zapisów komponentu Recorder, wywołania zwrotne integracji lub rozwiązywanie nazw, nawet gdy jego przydział procesora pozostaje dostępny.

Opis przypadku skoków zasobów kontenera pokazuje, dlaczego nagłe zachowanie hosta Docker wymaga dowodów z hosta i poszczególnych kontenerów, zamiast założenia, że zmienił się kod aplikacji.

Oddziel wpływ pamięci masowej od wpływu sieci, obserwując opóźnienie operacji blokowych, przepustowość, retransmisje, czas odpowiedzi DNS i logi Home Assistant. Różne nazwy woluminów nie dowodzą, że używane są różne urządzenia fizyczne. Granicą awarii jest powtarzające się kolejkowanie, które narusza docelowe opóźnienie automatyzacji lub powoduje błędy komponentu Recorder podczas normalnego ponownego uruchamiania sąsiada.

Przeprowadź test A-B-A ze znacznikami czasu

Zarejestruj pięciominutowy pomiar bazowy, uruchom sąsiada z tym samym stanem danych i pamięci podręcznej, a następnie zatrzymaj go i powtórz pomiar bazowy. W krótkich odstępach mierz medianę i wartości skrajne opóźnienia między zdarzeniem a akcją w Home Assistant, czas odpowiedzi komponentu Recorder, kolejkę procesora hosta, presję na pamięć, opóźnienie operacji wejścia-wyjścia bloków, błędy sieci oraz temperatury.

Skorzystaj z przewodnika ZimaSpace dotyczącego skoków obciążenia zadań wykonywanych w tle, aby przełożyć zaobserwowany efekt uruchamiania na decyzję dotyczącą długotrwałego współistnienia usług.

Zaakceptuj współistnienie tylko wtedy, gdy powtarzane testy A-B-A wykażą opóźnienia i błędy mieszczące się w docelowych wartościach dla gospodarstwa domowego oraz brak pogorszenia termiki lub odzyskiwania zasobów. Jeśli spowolnienie się powtarza, zmień jeden parametr — harmonogram, wagę procesora, limit pamięci, lokalizację pamięci masowej lub współbieżność — i uruchom test ponownie. Korelacja podczas identycznych uruchomień jest kryterium rozstrzygającym.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.