Wieloaplikacyjny serwer domowy może sprawiać, że Home Assistant działa szybciej lub wolniej, bez wprowadzania zmian w samym Home Assistant. Kontenery oddzielają procesy i systemy plików, ale nadal konkurują o czas procesora hosta, pamięć, pamięć podręczną stron, kolejki operacji pamięci masowej i przepustowość sieci, chyba że host zastosuje mechanizmy kontroli zasobów.
Izolacja zasobów zmienia wynik, ponieważ określa, które obciążenie może zużywać wspólny zapas zasobów podczas nakładania się zadań. Przydatne pytanie nie brzmi: czy Home Assistant „potrzebuje własnej maszyny”. Chodzi o to, czy zmierzone obciążenie zakłócające można ograniczyć bez uszkodzenia usługi, dla której wymagany jest krótszy czas reakcji.
Kontenery domyślnie nie rezerwują zasobów
Kontener Docker może swobodnie korzystać z dostępnych zasobów hosta, chyba że określono limity lub wagi. Dzięki temu współdzielony serwer jest wydajny, gdy obciążenia osiągają szczyt w różnych momentach, ale oznacza to również, że zadanie AI, skanowanie multimediów, kompakcja bazy danych lub kopia zapasowa mogą nagle zmienić opóźnienia Home Assistant.
Aktualna dokumentacja kontroli zasobów Dockera stwierdza, że kontenery domyślnie nie mają ograniczeń zasobów, a ich użycie można ograniczać za pomocą mechanizmów kontroli pamięci, procesora i powiązanych zasobów. Izolacja jest więc jawną regułą, a nie automatyczną właściwością konteneryzacji.
Nie zaczynaj od arbitralnych, sztywnych limitów. Najpierw odtwórz szczytowe wspólne obciążenie i ustal, który zasób zostaje ograniczony, gdy pojawia się problem z działaniem Home Assistant.
Wagi i limity procesora określają, kto czeka podczas skoku obciążenia
Udziały procesora lub wagi cgroups wpływają na sposób podziału czasu procesora między konkurujące grupy, gdy host jest zajęty, natomiast sztywne limity nakładają górny pułap. Mechanizmy te mogą chronić wrażliwą na opóźnienia płaszczyznę sterowania przed usługą wsadową, która w przeciwnym razie wykorzystałaby wszystkie rdzenie.
Linux cgroup v2 definiuje wagi, limity, ochronę i alokację jako różne modele dystrybucji zasobów. Waga pozwala obciążeniu pożyczać bezczynne zasoby procesora, ale zmienia jego udział podczas rywalizacji; limit uniemożliwia przekroczenie skonfigurowanego pułapu.
To rozróżnienie ma znaczenie w przypadku Home Assistant. Usłudze wsadowej o niskim priorytecie można przyznać mniejszą wagę procesora bez sztucznego ograniczania jej działania, gdy serwer jest poza tym bezczynny. Sztywny limit jest właściwszy, gdy ta sama usługa wielokrotnie zużywa całą dostępną moc obliczeniową i powoduje opóźnienia sterowania.
Izolacja pamięci zmienia zachowanie pamięci podręcznej i odzyskiwania zasobów
Presja na pamięć jest bardziej złożona niż limit procesora. Host wykorzystuje pamięć RAM na potrzeby anonimowej pamięci aplikacji i pamięci podręcznej systemu plików, dlatego jeden kontener może pośrednio usunąć strony, z których korzystało inne obciążenie, nawet jeśli żaden proces nie ulegnie awarii.
cgroup v2 udostępnia mechanizmy ochrony i limitowania pamięci, w tym miękką ochronę, taką jak memory.low, oraz sztywne limity, takie jak memory.max. Używaj ich dopiero po zaobserwowaniu odzyskiwania pamięci, użycia pliku wymiany lub zachowania OOM. Limit pamięci wymuszający ciągłe odzyskiwanie zasobów może zwiększyć opóźnienia zamiast je chronić.
W przypadku Home Assistant celem jest zapewnienie wystarczającej pamięci roboczej i wolnego miejsca w pamięci podręcznej dla normalnego działania Core, Recorder i interfejsu, podczas gdy opcjonalne usługi sąsiednie otrzymują bardziej rygorystyczne limity.
Izolacja operacji wejścia-wyjścia ma znaczenie, gdy ten sam dysk SSD lub HDD obsługuje każdą aplikację
Kopia zapasowa, przenoszenie torrentów, maszyna wirtualna, NVR lub zadanie bazy danych może nasycić to samo urządzenie pamięci masowej, na którym znajdują się dane aplikacji Home Assistant. Procesor może pozostać w większości bezczynny, podczas gdy zatwierdzanie danych przez Recorder i odczyty historii czekają za niezwiązanymi z nimi operacjami zapisu.
Metryki środowiska uruchomieniowego Dockera udostępniają liczniki użycia procesora, pamięci, sieci i operacji wejścia-wyjścia blokowego dla poszczególnych kontenerów, które pomagają przypisać obciążenie przed zastosowaniem limitu. Korzystaj z tych pomiarów razem z opóźnieniami urządzenia i głębokością kolejki, ponieważ sama liczba bajtów nie opisuje opóźnień interaktywnych.
Jeśli wstrzymanie jednego kontenera intensywnie zapisującego dane natychmiast przywraca odpowiednie opóźnienia Home Assistant, izolacja pamięci masowej lub harmonogramowania ma mocniejsze uzasadnienie niż dodawanie rdzeni procesora.
Izolacja powinna dotyczyć zasobu, który faktycznie łączy aplikacje
Omówienie mieszanych obciążeń AI i danych domowych w ZimaSpace pokazuje, dlaczego serwer domowy coraz częściej obsługuje zadania o bardzo różnych profilach opóźnień i zasobów. Płaszczyzna sterowania korzysta z przewidywalnego czasu reakcji, natomiast AI lub indeksowanie często bardziej zyskują na przepustowości.
Nie izoluj każdej usługi pod każdym względem. Jeśli zmierzony konflikt dotyczy pamięci masowej, popraw harmonogramowanie lub rozmieszczenie operacji pamięci masowej. Jeśli dotyczy procesora, użyj mechanizmów kontroli procesora. Jeśli jedynym problemem jest nocne nakładanie się zadań, zmiana harmonogramu może być prostsza niż stałe rezerwowanie zasobów.
Wykorzystaj izolację jako test A/B
| Wspólny objaw | Eksperyment z izolacją | Oznaka powodzenia |
|---|---|---|
| Opóźnienia rosną podczas zadania intensywnie wykorzystującego procesor | Zmniejsz wagę lub limit procesora usługi sąsiedniej | Opóźnienia sterowania poprawiają się przy tym samym obciążeniu |
| Host odzyskuje pamięć lub korzysta z pliku wymiany | Ogranicz pamięć opcjonalnego obciążenia | Presja spada bez ciągłego przerzucania stron |
| Recorder czeka podczas dużych operacji zapisu | Przełóż zadanie lub oddziel ścieżkę operacji wejścia-wyjścia | Opóźnienia wejścia-wyjścia i końcowy czas zapytań wracają do normy |
| Objawy się nie zmieniają | Cofnij izolację | Przetestuj inną granicę zasobów |
Izolacja zasobów jest przydatna, gdy jedna kontrolowana zmiana wielokrotnie poprawia działanie tego samego obciążenia Home Assistant. Jeśli wynik się nie zmienia, ograniczany wspólny zasób prawdopodobnie nie był faktyczną granicą przepustowości.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Stan bieżący a stan trwały w Home Assistant: co musi przetrwać ponowne uruchomienie?
Home Assistant nie zachowuje trwale każdej bieżącej wartości; konfiguracja, rejestry, wybrane przywracane stany, historia i dane wdrożeniowe pełnią różne funkcje podczas ponownego uruchamiania.

Jak Home Assistant uwierzytelnia sesje lokalne i zdalne?
Lokalne i zdalne sesje Home Assistant korzystają z tego samego modelu tożsamości po stronie serwera; zdalny dostęp zmienia trasę i granicę TLS, ale nie...

Dlaczego zapytania do historii Home Assistant mogą zwalniać w miarę przyrostu danych rejestratora?
Wzrost liczby rekordów może zwiększyć koszt zapytań do historii, gdy żądany zakres obejmuje więcej wierszy, rośnie liczba chybień pamięci podręcznej lub operacje na pamięci...

