Jak izolacja zasobów zmienia działanie Home Assistant na domowym serwerze z wieloma aplikacjami

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.

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.

-15% OFF

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

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.