Leistungsoptimierung für Windows Server-ContainerPerformance tuning Windows Server containers

EinführungIntroduction

Windows Server 2016 ist die erste Version von Windows, bei der die Containertechnologie bereits in das Betriebssystem integriert ist.Windows Server 2016 is the first version of Windows to ship support for container technology built in to the OS. In Windows Server 2016 sind zwei Arten von Containern verfügbar: Windows Server-Container und Hyper-V-Container.In Server 2016, two types of containers are available: Windows Server Containers and Hyper-V Containers. Jeder Containertyp unterstützt entweder die Server Core- oder Nano Server-SKU von Windows Server 2016.Each container type supports either the Server Core or Nano Server SKU of Windows Server 2016.

Diese Konfigurationen sind mit unterschiedlichen Auswirkungen auf die Leistung verbunden. Unten finden Sie eine Beschreibung, damit Sie entscheiden können, welche Konfiguration für Ihre Szenarien geeignet ist.These configurations have different performance implications which we detail below to help you understand which is right for your scenarios. Außerdem werden die Details der Auswirkungen auf die Leistung sowie die Nachteile der Optionen beschrieben.In addition, we detail performance impacting configurations, and describe the tradeoffs with each of those options.

Windows Server-Container und Hyper-V-ContainerWindows Server Container and Hyper-V Containers

Windows Server-Container und Hyper-V-Container weisen viele Portabilitäts- und Konsistenzvorteile auf, aber sie unterscheiden sich in Bezug auf die Isolationsgarantie und die Leistungsmerkmale.Windows Server Container and Hyper-V containers offer many of the same portability and consistency benefits but differ in terms of their isolation guarantees and performance characteristsics.

Windows Server-Container: Bieten Anwendungsisolation mithilfe einer Technologie zum Isolieren von Prozessen und Namespaces.Windows Server Containers provide application isolation through process and namespace isolation technology. Ein Windows Servercontainer teilt sich einen Kernel mit dem Containerhost und allen Containern, die auf dem Host ausgeführt werden.A Windows Server container shares a kernel with the container host and all containers running on the host.

Hyper-V-Container: Erweitern die Isolationsmöglichkeiten von Windows Server-Containern, indem jeder Container auf einem stark optimierten virtuellen Computer ausgeführt wird.Hyper-V Containers expand on the isolation provided by Windows Server Containers by running each container in a highly optimized virtual machine. Bei dieser Konfiguration wird der Kernel des Containerhosts nicht gemeinsam mit den Hyper-V-Containern verwendet.In this configuration the kernel of the container host is not shared with the Hyper-V Containers.

Die zusätzliche Isolation durch Hyper-V-Container wird größtenteils durch eine Hypervisor-Isolationsebene zwischen dem Container und dem Containerhost erreicht.The additional isolation provided by Hyper-V containers is achieved in large part by a hypervisor layer of isolation between the container and the container host. Dies wirkt sich auf die Containerdichte aus (im Gegensatz zu Windows Server-Containern), da es zu einer reduzierten Freigabe von Systemdateien und Binärdateien kommen kann. Dies führt allgemein zu einem größeren Speicher- und Arbeitsspeicherbedarf.This affects container density as, unlike Windows Server Containers, less sharing of system files and binaries can occur, resulting in an overall larger storage and memory footprint. Außerdem kommt es für einige Netzwerk-, Speicher-E/A- und CPU-Pfade zum erwarteten Mehraufwand.In addition there is the expected additional overhead in some network, storage io, and CPU paths.

Nano Server und Server CoreNano Server and Server Core

Windows Server-Container und Hyper-V-Container verfügen über Unterstützung für Server Core und für eine neue Installationsoption, die unter Windows Server 2016 verfügbar ist: Nano Server.Windows Server Containers and Hyper-V containers offer support for Server Core and for a new installation option available in Windows Server 2016 : Nano Server.

Nano Server ist ein remote verwaltetes Serverbetriebssystem, das für private Clouds und Rechenzentren optimiert ist.Nano Server is a remotely administered server operating system optimized for private clouds and datacenters. Das Betriebssystem ähnelt Windows Server im Modus Server Core, ist aber deutlich kleiner, bietet keine Möglichkeit zur lokalen Anmeldung, und unterstützt ausschließlich 64-Bit-Anwendungen, Tools und Agents.It is similar to Windows Server in Server Core mode, but significantly smaller, has no local logon capability, and only supports 64-bit applications, tools, and agents. Es beansprucht erheblich weniger Speicherplatz und startet schneller.It takes up far less disk space and starts faster.

Startzeit von ContainernContainer Start Up Time

Die Startzeit von Containern ist eine wichtige Metrik in vielen Szenarien, in denen sich durch Container die größten Vorteile ergeben.Container start up time is a key metric in many of the scenarios that containers offer the greatest benefit. Daher ist es sehr wichtig zu verstehen, wie die Startzeit von Containern am besten optimiert werden kann.As such, understanding how to best optimize for container start up time is critical. Unten sind einige Kompromisse beschrieben, die beim Optimieren ggf. eingegangen werden müssen, um eine Verbesserung der Startzeit zu erzielen.Below are some tuning trade-offs to understand to achieve improved start up time.

Erste AnmeldungFirst Logon

Microsoft stellt ein Basisimage für Nano Server und Server Core bereit.Microsoft ships a base image for both Nano Server and Server Core. Das Basisimage für Server Core wurde optimiert, indem der Mehraufwand für die Startzeit beseitigt wurde, der mit der ersten Anmeldung (Windows-Willkommensseite) verbunden ist.The base image which ships for Server Core has been optimized by removing the start-up time overhead associated with first logon (OOBE). Dies ist beim Nano Server-Basisimage nicht der Fall.This is not the case with Nano Server base image. Dieser Aufwand kann für Images auf Nano Server-Basis aber beseitigt werden, indem für das Containerimage mindestens eine Ebene committet wird.However, this cost can be removed from Nano Server based images by committing at least one layer to the container image. Für nachfolgende Containerstarts über das Image fällt der Aufwand für die erste Anmeldung dann nicht mehr an.Subsequent container starts from the image will not incur the first logon cost.

Ort des sicheren SpeicherbereichsScratch Space Location

Für Container wird standardmäßig ein temporärer sicherer Speicherbereich auf Systemlaufwerkmedien des Containerhosts verwendet, um Daten während der Lebensdauer des ausgeführten Containers zu speichern.Containers, by default, use a temporary scratch space on the container host’s system drive media for storage during the lifetime of the running container. Dieser Bereich wird als Systemlaufwerk des Containers verwendet, und daher wird dieser Pfad für viele Schreib- und Lesevorgänge der Containervorgänge genutzt.This serves as the container’s system drive, and as such many of the writes and reads done in container operation follow this path. Für Hostsysteme, bei denen sich das Systemlaufwerk auf rotierenden magnetischen Medien (HDDs) befindet und gleichzeitig schnellere Speichermedien verfügbar sind (schnellere HDDs oder SSDs), kann der sichere Speicherbereich des Containers auf ein anderes Laufwerk verlagert werden.For host systems where the system drive exists on spinning disk magnetic media (HDDs) but faster storage media is available (faster HDDs or SSDs), it is possible to move the container scratch space to a different drive. Dies erreichen Sie, indem Sie den Befehl „dockerd –g“ verwenden.This is achieved by using the dockerd –g command. Dieser Befehl ist global und wirkt sich auf alle Container aus, die auf dem System ausgeführt werden.This command is global, and will affect all containers running on the system.

Geschachtelte Hyper-V-ContainerNested Hyper-V Containers

Mit Hyper-V für Windows Server 2016 wird Unterstützung für die Hypervisor-Schachtelung eingeführt.Hyper-V for Windows Server 2016 introduces nested hypervisor support. Es ist jetzt also möglich, einen virtuellen Computer über einen anderen virtuellen Computer auszuführen.That is, it is now possible to run a virtual machine from within a virtual machine. Dies ermöglicht viele nützliche Szenarien, aber es werden auch einige Auswirkungen auf die Leistung verstärkt, die für den Hypervisor bestehen. Der Grund ist, dass oberhalb des physischen Hosts zwei Hypervisor-Ebenen ausgeführt werden.This opens up many useful scenarios but also exaggerates some performance impact that the hypervisor incurs, as there are two level of hypervisors running above the physical host.

Für Container ergibt sich hieraus eine Beeinträchtigung, wenn ein Hyper-V-Container auf einem virtuellen Computer ausgeführt wird.For containers, this has an impact when running a Hyper-V container inside a virtual machine. Da ein Hyper-V-Container die Isolation über eine Hypervisor-Ebene zwischen sich selbst und dem Containerhost realisiert, hat dies folgende Auswirkung, wenn der Containerhost ein virtueller Computer auf Hyper-V-Basis ist: Es kommt in Bezug auf Containerstartzeit, Speicher-E/A und Durchsatz sowie CPU zu Mehraufwand bei der Leistung.Since a Hyper-V Container offers isolation through a hypervisor layer between itself and the container host, when the container host is a Hyper-V based virtual machine, there is performance overhead associated in terms of container start-up time, storage io, network io and throughput, and CPU.

SpeicherStorage

Eingebundene DatenvolumesMounted Data Volumes

Bei Containern ist es möglich, dass das Systemlaufwerk des Containerhosts für den sicheren Speicherbereich des Containers verwendet wird.Containers offer the ability to use the container host system drive for the container scratch space. Der sichere Speicherbereich des Containers verfügt aber über eine ähnlich lange Lebensdauer wie der Container.However, the container scratch space has a life span equal to that of the container. Dies bedeutet, dass der sichere Speicherbereich und alle zugeordneten Daten verloren gehen, wenn der Container angehalten wird.That is, when the container is stopped, the scratch space and all associated data goes away.

Es gibt aber viele Szenarien, in denen Daten unabhängig von der Lebensdauer des Containers beibehalten werden sollen.However, there are many scenarios in which having data persist independent of container lifetime is desired. Für diese Fälle wird das Einbinden von Datenvolumes vom Containerhost in den Container unterstützt.In these cases, we support mounting data volumes from the container host into the container. Für Windows Server-Container kann der Mehraufwand für den E/A-Pfad, der bei eingebundenen Datenvolumes anfällt, vernachlässigt werden (nahezu native Leistung).For Windows Server Containers, there is negligible IO path overhead associated with mounted data volumes (near native performance). Wenn Datenvolumes aber in Hyper-V-Container eingebunden werden, kommt es für diesen Pfad zu E/A-Leistungsbeeinträchtigungen.However, when mounting data volumes into Hyper-V containers, there is some IO performance degradation in that path. Außerdem werden diese Beeinträchtigungen noch verstärkt, wenn Hyper-V-Container auf virtuellen Computern ausgeführt werden.In addition, this impact is exaggerated when running Hyper-V containers inside of virtual machines.

Sicherer SpeicherbereichScratch Space

Sowohl für Windows Server-Container als auch für Hyper-V-Container wird für den sicheren Speicherbereich des Containers standardmäßig eine dynamische VHD mit 20 GB bereitgestellt.Both Windows Server Containers and Hyper-V containers provide a 20GB dynamic VHD for the container scratch space by default. Bei beiden Containertypen nimmt das Betriebssystem des Containers einen Teil des Platzes ein. Dies gilt für jeden Container, der gestartet wird.For both container types, the container OS takes up a portion of that space, and this is true for every container started. Daher ist es wichtig zu wissen, dass sich jeder gestartete Container auf den Speicher auswirkt und je nach Workload bis zu 20 GB auf die Sicherungsspeichermedien schreiben kann.Thus it is important to remember that every container started has some storage impact, and depending on the workload can write up to 20GB of the backing storage media. Dies sollte bei der Konfiguration von Speichermedien jeweils bedacht werden.Server storage configurations should be designed with this in mind. (Kann die Größe des sicheren Speicherbereichs konfiguriert werden?)(can we configure scratch size)

NetzwerkNetworking

Windows Server-Container und Hyper-V-Container verfügen über unterschiedliche Netzwerkmodi, damit die Anforderungen verschiedener Netzwerkkonfigurationen bestmöglich erfüllt werden können.Windows Server Containers and Hyper-V containers offer a variety of networking modes to best suit the needs of differing networking configurations. Für jede dieser Optionen gelten eigene Leistungsmerkmale.Each of these options present their own performance characteristics.

Windows-Netzwerkadressenübersetzung (WinNAT)Windows Network Address Translation (WinNAT)

Jeder Container erhält eine IP-Adresse aus einem internen, privaten IP-Präfix (z. B. 172.16.0.0/12).Each container will receive an IP address from an internal, private IP prefix (e.g. 172.16.0.0/12). Portweiterleitung/-zuordnung vom Containerhost zu Containerendpunkten wird unterstützt.Port forwarding / mapping from the container host to container endpoints is supported. Docker erstellt standardmäßig ein NAT-Netzwerk, wenn dockerd zum ersten Mal ausgeführt wird.Docker creates a NAT network by default when the dockerd first runs.

Von diesen drei Modi ist die NAT-Konfiguration der teuerste Netzwerk-E/A-Pfad, für den aber der geringste Konfigurationsaufwand anfällt.Of these three modes, the NAT configuration is the most expensive network IO path, but has the least amount of configuration needed.

Windows Server-Container verwenden eine Host-vNIC für die Verbindung mit dem virtuellen Switch.Windows Server containers use a Host vNIC to attach to the virtual switch. Hyper-V-Container verwenden eine synthetische VM-NIC (nicht für die Utility-VM verfügbar gemacht) für die Verbindung mit dem virtuellen Switch.Hyper-V Containers use a Synthetic VM NIC (not exposed to the Utility VM) to attach to the virtual switch. Wenn Container mit dem externen Netzwerk kommunizieren, werden die Pakete per WinNAT mit angewendeten Adressübersetzungen weitergeleitet, wodurch es zu Mehraufwand kommt.When containers are communicating with the external network, packets are routed through WinNAT with address translations applied, which incurs some overhead.

TransparentTransparent

Jeder Containerendpunkt ist direkt mit dem physischen Netzwerk verbunden.Each container endpoint is directly connected to the physical network. IP-Adressen aus dem physischen Netzwerk können mithilfe eines externen DHCP-Servers statisch oder dynamisch zugewiesen werden.IP addresses from the physical network can be assigned statically or dynamically using an external DHCP server.

Der Modus „Transparent“ ist in Bezug auf den Netzwerk-E/A-Pfad der kostengünstigste. Externe Pakete werden direkt über die virtuelle NIC des Containers übergeben, sodass direkter Zugriff auf das externe Netzwerk besteht.Transparent mode is the least expensive in terms of the network IO path, and external packets are directly passed through to the container virtual NIC giving direct access to the external network.

L2-BrückeL2 Bridge

Alle Containerendpunkte befinden sich in demselben IP-Subnetz wie der Containerhost.Each container endpoint will be in the same IP subnet as the container host. Die IP-Adressen müssen statisch aus dem gleichen Präfix wie der Containerhost zugewiesen werden.The IP addresses must be assigned statically from the same prefix as the container host. Alle Containerendpunkte auf dem Host verfügen aufgrund der Layer-2-Adressübersetzung über dieselbe MAC-Adresse.All container endpoints on the host will have the same MAC address due to Layer-2 address translation.

Der Modus „L2-Brücke“ ermöglicht eine höhere Leistung als der Modus „WinNAT“, da er direkten Zugriff auf das externe Netzwerk bietet. Die Leistung des Modus „Transparent“ erreicht er aber nicht, da er auch mit der MAC-Adressübersetzung verbunden ist.L2 Bridge Mode is more performant than WinNAT mode as it provides direct access to the external network, but less performant than Transparent mode as it also introduces MAC address translation.