Diensthostgruppierung in Windows 10

Der Diensthost (svchost.exe) ist ein gemeinsam genutzter Dienstprozess, der als Shell zum Laden von Diensten aus DLL-Dateien dient. Dienste sind in verknüpfte Hostgruppen organisiert, und jede Gruppe wird in einem anderen instance des Diensthostprozesses ausgeführt. Auf diese Weise wirkt sich ein Problem in einem instance nicht auf andere Instanzen aus. Diensthostgruppen werden bestimmt, indem die Dienste mit übereinstimmenden Sicherheitsanforderungen kombiniert werden. Zum Beispiel:

  • Lokaler Dienst
  • Lokaler Dienst: Kein Netzwerk
  • Lokales Dienstnetzwerk eingeschränkt
  • Lokales System
  • Lokales Systemnetzwerk eingeschränkt
  • Netzwerkdienst

Trennen von SvcHost-Diensten

Ab Windows 10 Creators Update (Version 1703) werden dienste, die zuvor gruppiert wurden, stattdessen getrennt – jeder wird in seinem eigenen SvcHost-Prozess ausgeführt. Diese Änderung erfolgt automatisch für Systeme mit mehr als 3,5 GB RAM, auf denen die Clientdesktop-SKU ausgeführt wird. Auf Systemen mit maximal 3,5 GB RAM werden dienste weiterhin in einem freigegebenen SvcHost-Prozess gruppiert.

Zu den Vorteilen dieser Entwurfsänderung gehören:

  • Erhöhte Zuverlässigkeit durch Isolieren kritischer Netzwerkdienste vor dem Ausfall eines anderen Nicht-Netzwerkdiensts auf dem Host und Hinzufügen der Möglichkeit, die Netzwerkkonnektivität nahtlos wiederherzustellen, wenn Netzwerkkomponenten abstürzen.
  • Reduzierte Supportkosten, indem der Problembehandlungsaufwand im Zusammenhang mit der Isolierung von fehlerhaften Diensten auf dem freigegebenen Host entfällt.
  • Erhöhte Sicherheit durch mehr dienstübergreifende Isolation
  • Erhöhte Skalierbarkeit durch Zulassen von Einstellungen und Berechtigungen pro Dienst
  • Verbesserte Ressourcenverwaltung durch dienstspezifische CPU-, E/A- und Arbeitsspeicherverwaltung und Erhöhung eindeutiger Diagnosedaten (MELDEN VON CPU, E/A und Netzwerkauslastung pro Dienst).

Probieren Sie dies aus

Um das Refactoringverhalten anzuzeigen, erstellen Sie einen virtuellen Windows 10 Version 1703, und konfigurieren Sie die Speichereinstellungen wie folgt:

  1. Um gruppierte Prozesse anzuzeigen, legen Sie den RAM auf 3484 MB oder weniger fest. Starten Sie den virtuellen Computer neu, und öffnen Sie dann den Task-Manager.
  2. Um getrennte Prozesse anzuzeigen, legen Sie den RAM auf 3486 MB oder höher fest. Starten Sie den virtuellen Computer neu, und öffnen Sie dann den Task-Manager.

Das Refactoring erleichtert auch die Anzeige ausgeführter Prozesse im Task-Manager. Sie können sich den Task-Manager ansehen und genau wissen, welcher Dienst welche Ressourcen verwendet, ohne viele separate Hostgruppen erweitern zu müssen.

Hier sind beispielsweise die ausgeführten Prozesse, die im Task-Manager in Windows 10 Version 1607 angezeigt werden:

Ausführen von Prozessen im Task-Manager, Version 1607.

Vergleichen Sie dies mit der gleichen Ansicht ausgeführter Prozesse in Windows 10 Version 1703:

Ausführen von Prozessen im Task-Manager, Version 1703.

Ausnahmen

Einige Dienste werden weiterhin auf PCs gruppiert, auf denen mindestens 3,5 GB RAM ausgeführt wird. Beispielsweise werden die Basisfilterungs-Engine (BFE) und die Windows-Firewall (Mpssvc) in einer einzelnen Hostgruppe gruppiert, ebenso wie die Dienste RPC-Endpunktzuordnung und Remoteprozeduraufrufe.

Wenn Sie Dienste identifizieren müssen, die weiterhin gruppiert werden, können Sie nicht nur im Task-Manager und mithilfe von Befehlszeilentools, sie auch in ihren jeweiligen Dienstschlüsseln unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services nach dem Wert SvcHostSplitDisable suchen.

Der Standardwert 1 verhindert, dass der Dienst aufgeteilt wird.

Die Registrierungsschlüsselkonfiguration für BFE lautet beispielsweise: Beispiel für einen Dienst, der nicht getrennt werden kann.

Speicherbedarf

Durch das Trennen von Diensten wird die Gesamtzahl der SvcHost-Instanzen erhöht, wodurch die Arbeitsspeicherauslastung erhöht wird. (Die Dienstgruppierung verringerte den Gesamtressourcenbedarf der beteiligten Dienste geringfügig.)

Betrachten Sie das folgende Beispiel:

Gruppierte Dienste (< 3,5 GB) Dienste aufteilen (ab 3,5 GB)
Speicherauslastung für gruppierte Dienste. Arbeitsspeicherauslastung für getrennte Dienste

Hinweis

Das obige Stellt die beobachteten Spitzenwerte dar.

Die Gesamtzahl der Dienstinstanzen und die daraus resultierende Speicherauslastung variieren je nach Aktivität. Die Anzahl der Instanzen kann in der Regel zwischen 17 und 21 für gruppierte Dienste und zwischen 67 und 74 für getrennte Dienste liegen.

Probieren Sie dies aus

Um die Auswirkungen der Aufteilung gehosteter Dienste auf einem PC der Windows 10 Version 1703 zu ermitteln, führen Sie vor und nach dem Umschalten der Speichereinstellungen das folgende Windows PowerShell Cmdlet aus:

Get-Process SvcHost | Group-Object -Property ProcessName | Format-Table Name, Count, @{n='Mem (KB)';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1KB)};a='right'} -AutoSize