Vad begränsar egentligen antalet samtidiga Home Assistant-uppgifter innan lokal styrning försämras?

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

Home Assistant har inget entydigt svar på frågan ”hur många samtidiga uppgifter kan det hantera?”. Tio korta asynkrona uppgifter kan vara mindre kostsamma än en enda integration som blockerar händelseloopen, medan femtio köade automatiseringar kan förbli ofarliga om merparten av tiden går åt till att vänta på oberoende I/O.

Den användbara gränsen är den punkt där ytterligare arbete skapar återkommande fördröjningar i den viktiga styrvägen: en händelse väntar längre på att behandlas, en automatiseringskö växer, ett tjänsteanrop missar sitt tidsmål eller en gemensam CPU-, minnes-, lagrings- eller nätverksresurs utsätts för hög belastning. Samtidighet är därför först och främst ett problem med fördröjningar och köer, inte med antalet uppgifter.

Samtidighet i Home Assistant börjar med asyncio-händelseloopen

Home Assistant Core är byggt kring Python asyncio. Komponenter schemalägger arbete som uppgifter, och samverkande asynkron kod lämnar över kontrollen medan den väntar på I/O. Det gör att annat arbete kan fortsätta i stället för att en separat tråd i operativsystemet avsätts för varje integration.

Den aktuella utvecklardokumentationen för Home Assistant förklarar att Core schemalägger komponentuppgifter genom en central händelseloop och förlitar sig på att uppgifter avbryter körningen korrekt medan de väntar. Därför betyder ”samtidig” inte att varje uppgift kör CPU-instruktioner exakt samtidigt.

En praktisk analys av samtidighet gör samma åtskillnad: asynkrona uppgifter kan överlappa i förfluten tid, medan den faktiska körningen i händelseloopen fortfarande är seriell mellan await-punkterna. Kapaciteten beror på hur länge varje uppgift upptar loopen och vad den väntar på.

Blockerande arbete kan försämra många uppgifter samtidigt

Det mest skadliga samtidighetsproblemet är ofta inte ”för många automatiseringar”. Det är en enda operation som blockerar händelseloopen så länge att orelaterade statusuppdateringar och återanrop inte kan köras.

Home Assistant varnar uttryckligen för att blockerande operationer i händelseloopen stoppar hela systemet under anropets varaktighet. Det omfattar dåligt hanterad fil-I/O, nätverksbibliotek, väntetider eller omfattande synkront arbete i en integration.

Det förändrar hur ett kapacitetstest bör tolkas. Om fördröjningen i lokal styrning ökar när en viss integration är aktiv, trots att den totala CPU-användningen förblir låg, kan problemet fortfarande vara en blockerad händelseloop snarare än otillräcklig processorkapacitet.

Automatiseringsläget styr hur upprepade utlösare blir arbete

Automatiseringar lägger till ytterligare en nivå av samtidighetspolicy. En regel kan avvisa en andra utlösare, starta om den pågående körningen, köa arbete eller skapa parallella körningar. Dessa val påverkar både korrekthet och resursbehov.

Home Assistants aktuella dokumentation om automatiseringslägen definierar single-, restart-, queued- och parallel-lägen, med konfigurerbara maximala antal köade eller parallella körningar. Standardvärdet för maximalt antal i köade och parallella lägen är 10, men det konfigurationsvärdet är inte ett plattformsomfattande kapacitetsmått.

En dörrsensorautomatisering som väntar två sekunder innan den skickar en avisering och en belysningsautomatisering som gör fem nätverksanrop är inte likvärdiga jobb. Välj automatiseringsläge utifrån ordningsföljd och korrekthet först, och observera sedan om den resulterande kön eller överlappningen påverkar styrningens fördröjning.

-15% OFF
Single board computer zimaboard2

Mät köernas tillväxt och svansfördröjning, inte bara CPU-procent

Använd en kritisk lokal automatisering som fördröjningsmätare. Registrera när utlösaren anländer, när automatiseringen startar, när tjänsteanropet görs och när den fysiska enheten reagerar, samtidigt som du bara ökar en samtidighetsvariabel åt gången: upprepade utlösare, klienter på instrumentpanelen, bakgrundsintegrationer eller närliggande tjänster.

ZimaSpace-artikeln om händelsestyrt arbete och belastning på inaktiva servrar ger rätt utgångspunkt: händelsestyrda system är effektiva när arbetet bara aktiveras vid behov, men toppar kräver fortfarande tillräckligt med schemaläggnings- och resursmarginal för att kunna arbetas av utan kvarstående köer.

Följ medianfördröjningen och de långsammaste normala körningarna. Ett system kan ha i genomsnitt 10 % CPU-användning samtidigt som korta toppar skapar stopp på en sekund. Den användbara kapacitetsgränsen syns när köerna fortsätter att växa, varningar om maximalt antal körningar upprepas eller svansfördröjningen inte återgår till baslinjen efter att toppen har passerat.

Skilj Home Assistants samtidighet från belastning på värdsystemet

Home Assistant kan schemalägga korrekt samtidigt som en annan container överbelastar CPU, minne, lagring eller nätverk. I så fall kanske det inte hjälper att öka eller minska automatiseringens max, eftersom den gemensamma värden redan har förlorat sin resursmarginal.

Upprepa samtidighetstestet en gång med den närliggande arbetsbelastningen pausad. Om händelseloopens tidsmätningar och fördröjningen i lokal styrning återhämtar sig omedelbart, bör gränsen betraktas som ett kapacitetsproblem på den gemensamma värden. Om de inte gör det, undersök blockerande operationer, integrationsbeteende eller utformningen av automatiseringskön i Home Assistant.

Använd ett stoppvillkor i stället för att ange ett antal uppgifter

Observerad signal Vad den betyder Nästa test
Parallella/köade körningar når den konfigurerade maxgränsen En kögräns på automatiseringsnivå Kontrollera läge, ordningsföljd och utlösarfrekvens
Varning om händelseloopen eller omfattande stopp i gränssnitt och styrning Möjligt blockerande arbete Identifiera integrationen eller det synkrona anropet
Fördröjningen ökar endast när en annan tjänst är aktiv Belastning på den gemensamma värden Mät CPU-, minnes-, I/O- och nätverksbelastning
En enhetsväg är långsam medan andra förblir snabba En gräns som är specifik för ett beroende Undersök den integrationen eller nätverksvägen
Köerna töms och svansfördröjningen ligger kvar inom målet Det finns fortfarande användbar samtidighetsmarginal Sluta lägga till belastning vid den planerade toppen

Home Assistants kapacitet bör därför anges som en testad arbetsbelastning med ett fördröjningsmål, inte som ett universellt antal samtidiga uppgifter. Den rätta frågan är hur mycket överlappande arbete den aktuella integrationsblandningen och värden kan absorbera innan den kritiska vägen för lokal styrning slutar uppfylla sin tidsgräns.

Teknik- och AI-hubb

Mer att läsa

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.