Prozessorarchitekturen und SR-IOV

Kommentieren Drucken
Teil 14 von 19 aus der Serie "Virtualisierungstechniken"

In dieser Serie können die Weiterentwicklungen der Prozessorarchitekturen nicht insgesamt dargestellt und gewürdigt werden. Deshalb werde ich am Beispiel der Intel Nehalem-Architektur einige wesentliche Trends zeigen und dann die Verbesserungen hinsichtlich der I/O für die Virtualisierung genauer betrachten.

Die Nehalem-Architektur hat eine Reihe von wesentlichen Fortschritten hinsichtlich Leistungsfähigkeit, Skalierbarkeit und Wirtschaftlichkeit moderner Prozessorarchitekturen mit sich gebracht. Aktuelle Prozessoren auf Basis dieser Architektur sind die Intel Xeon Prozessoren der Reihen 3500 und 5500. Sie werden von den bekannten Herstellern zurzeit aktuell in Rack- und Blade-Servern sowie in Hochleistungs-Workstations verbaut. Wesentliche Innovationen sind:

  • Intel Turbo Boost Technologie. In Verbindung mit der Intelligent Power Technologie können Prozessoren zeitweise oberhalb der Standard-Taktrate laufen, um bestimmte Aufgaben schneller zu erledigen. Danach fallen sie wieder auf die Basis-Taktrate zurück und sparen Strom.
  • Intel Hyper Threading Technologie. Diese bekannte Innovation liefert mehr Leistung für Anwendungen, die für eine parallele Ausführung mit vielen Threads geschrieben wurden. Sie profitiert von größeren Caches im Rahmen der Mikroarchitektur und einer massiven Bandbreite für den Zugriff auf Speicher.
  • Intel Quick Path Technologie. Diese skalierbare Architektur für gemeinsam benutzten Speicher integriert einen Memory Controller in jeden Mikroprozessor und verbindet Prozessoren und andere Komponenten mit einer neuen Hochgeschwindigkeits-Verbindungstechnik.
  • Intel Intelligent Power Technologie erlaubt eine regelbasierende Kontrolle, die dazu dient, dass die Prozessoren in einem Optimum zwischen Geschwindigkeit und Stromverbrauch laufen können. Diese Kontrolle kann von Betriebssystemen oder Administratoren ausgeübt werden.
  • Intel Virtualization Technologie. Die neueste Version steigert die Leistung einer virtualisierten Umgebung durch den Einsatz von neuen Hardware-unterstützten Möglichkeiten nach Angaben des Herstellers mindestens um das Doppelte.

Blickt man auf die Quick Path Technologie, sieht man, welche Kommunikationsraten innerhalb eines Rechners auftreten können. Quick Path benutzt Links mit einer Leistung von bis zu 6,4 Gigatransfers/s, umgerechnet circa 25,6 GBytes/s oder circa 200 Gbit/s. Unter Mitwirkung der Nehalem L3 Cache Technologie ist das die maximale Geschwindigkeit unter Prozessoren und zwischen Prozessoren und Speichern. Dabei macht das System noch CRC-Checks. Mit der Virtualisierung wird oft die Vision entworfen, dass das Netz zum Systembus der virtualisierten Systeme wird. Selbst wenn man ein 40-GbE einsetzen würde, gibt es immer noch erhebliche Unterschiede zwischen der Übertragungsgeschwindigkeit innerhalb und außerhalb eines Prozessors. Das ist auch nicht weiter schlimm, weil es eigentlich seit über 40 Jahren immer so war. Dennoch sollte man einerseits allzu großen Optimismus hinsichtlich der möglichen Verlagerungen dämpfen und sich andererseits im Klaren darüber sein, dass solche Systeme schlicht verhungern, wenn man sie mit nur 1-GbE irgendwo anschließen möchte. Welches Verhältnis zwischen interner und externer Kommunikationsleistung letztlich benötigt wird, hängt von vielen Installations- und Applikations-spezifischen Einflüssen ab, das können wir hier nicht weiter diskutieren.

Die nächste Generation der Intel Virtualization Technology Intel VT verbessert die Virtualisierungsleistung bei Workstations und Servern durch neue Hardware-unterstützte Möglichkeiten in Prozessor, Chipsätze und Netzwerkadaptern.

Im Prozessor basieren die Verbesserungen von Intel VT für IA-32, Intel 64 und Intel VT-x auf Hardware-unterstütztem Page Table Management, welches dem Gast-Betriebssystem (der VM) einen direkteren Zugriff zur Hardware erlaubt und somit die rechenintensive Software-Umsetzung durch den Hypervisor reduziert. Das hatte ich ja schon in einem früheren Artikel detailliert dargestellt. Intel VT-x enthält darüber hinaus die Intel VT FlexMigration und Intel VT FlexPriority. Das sind Methoden zur Unterstützung der Workload-Migration und Leistungsoptimierung über den gesamten Bereich von 32- und 64-Bit-Umgebungen. Sehen wir uns das einmal näher an:

  • Intel FlexPriority. Wenn ein Prozessor eine Task laufen lässt, erhält er oft Requests oder Interrupts von anderen Geräten oder Anwendungen, die seine Zuwendung benötigen. Das ist schon immer so und führt meist zu Prozesswechseln. Viele davon betreffen die I/O. So kann eine Anwendung laufen und benötigt einen aktuellen Wert. Dieser muss von einem I/O-Prozess geholt werden. Also gibt es einen Interrupt für die Beauftragung des I/O-Prozesses und mindestens einen weiteren, wenn der I/O-Prozess fertig ist. Das heißt aber nicht, dass der I/O-Prozess ungestört weiterlaufen könnte. Es kann z. B. sein, dass zwischenzeitlich ein anderer Systemprozess, der wichtiger ist, an die Reihe kommt. Also gibt es wichtige und weniger wichtige Prozesse und meistens sind die, die letztlich die Anwendungen bearbeiten, meist ziemlich unwichtig aus der Perspektive des Systems. Um die Auswirkungen auf die Performance zu minimieren, gibt es ein spezielles Register im Prozessor, das APIC Task Priority Register, kurz TPR, welches die Prioritäten von Task beobachtet und dafür Sorge trägt, dass nur Interrupts, die eine höhere Priorität als die aktuell laufende Task haben, berücksichtigt werden. Das ist bei praktisch allen Rechnern und Betriebssystemen so. Natürlich gibt es den gesamten Mechanismus im Rahmen der Virtualisierung für jede VM. Intel FlexPriority erzeugt eine virtuelle Kopie des TPR, die durch die VM gelesen und in manchen Fällen auch verändert werden kann, ohne dass der Hypervisor eingeschaltet werden muss. Das kann z. B. bei 32-Bit Systemen, die die TPR häufig benutzen, zur Leistungsoptimierung eingesetzt werden und bringt nach Angaben des Herstellers bis zu 35% Gewinn.
  • IntelFlexMigration. Einer der Hauptvorzüge der Virtualisierung ist die Möglichkeit, laufende Anwendungen ohne Downtime von einem Server zum anderen zu bringen (wandernde VMs). FlexMigration ist dazu gedacht, eine nahtlose Wanderung von VMs zwischen aktuellen und zukünftigen Servern mit Intel-Prozessoren zu ermöglichen, auch dann, wenn die neueren Prozessoren erweiterte Befehlssätze haben. Damit können Hypervisoren einen über alle physikalischen Server in einem Migrationspool hinweg konsistenten Befehlssatz festlegen. So können derartige Pools auch aus Maschinen unterschiedlicher Generationen gebildet werden.

Im Chipsatz dient die Intel Virtualization Technology for Directed I/O (VT-d) der Beschleunigung des Datenverkehrs. Der Overhead wird dabei vor allem dadurch minimiert, dass die VMs ihre eigenen dedizierten I/O-Geräte bekommen und dadurch der Hypervisor massiv vom Management des I/O-Verkehrs befreit wird. Technisch wird das so realisiert, dass ein Hypervisor den spezifischen Gastbetriebssystemen (VMs) spezifische I/O-Geräte sicher zuordnen kann. Jedes Gerät hat einen dedizierten Bereich im Hauptspeicher, der nur für das Gerät und die assoziierte VM zugänglich ist. Sobald die initialen Zuordnungen gemacht sind, können Daten direkt zwischen einer VM und den ihr zugeordneten I/O-Geräten fließen. Dadurch werden auch Sicherheit und Verfügbarkeit verbessert, da auf Daten, die für eine spezifische VM bestimmt sind, weder von irgendeiner anderen Hardware noch von einer anderen VM zugegriffen werden kann. VT-d alleine ist schon sehr leistungsfähig, so richtig gut wird es allerdings erst mit einer zusätzlichen Hardware-Unterstützung im Rahmen von VT-c.

Die Intel Virtualization Technology for Connectivity (VT-c) verbessert die I/O-Lösungen für Server durch die Integration weitreichender Hardware-Unterstützung in die I/O-Geräte, die dazu benutzt werden, Server in einem RZ mit der Speicher-Infrastruktur und anderen externen Geräten zu verbinden, noch weiter. Durch die Ausübung von Routing-Funktionen zu und von den VMs in z. B. Netzwerk-Adapter-Chips beschleunigt Intel VT-c die Auslieferung von Daten und reduziert die Last auf dem Hypervisor und den Server-Prozessoren. Die Leistung kann dabei gegenüber gleichartigen Adaptern ohne diese zusätzliche Funktionalität durchaus verdoppelt werden. Zur Realisierung von VT-c gibt es zwei wichtige technische Elemente, die heute von allen Intel 10-GbE-Adaptern und ausgewählten 1-GbE-Adaptern unterstützt werden:

  • Virtual Machine Device Queues (VMDq). In einer traditionellen Virtualisierungsumgebung muss der Hypervisor jedes einzelne Datenpaket sortieren und es dann zu der passenden VM weiterleiten. Das verbraucht viele Prozessorzyklen. Mit VMDq wird diese Sortierfunktion von spezieller Hardware in den Server-Adaptern ausgeführt. Das einzige, was der Hypervisor noch tun muß, ist, die vorsortierten Paketgruppen an die richtige VM weiterzuleiten. Dadurch wird die I/O-Latenz deutlich reduziert und der Prozessor hat mehr Zeit für seine eigentlichen Aufgaben
  • Virtual Machine Direct Connect (VMDc). VMDc ermöglicht den VMs den unmittelbaren Zugriff auf die I/O-Hardware im Rahmen der weiter oben besprochenen Funktionen von PCI-SIG SR-IOV. Dadurch entsteht ein direkter Kommunikationsweg zwischen einer VM und einem physikalischen I/O-Port auf einem I/O-Gerät. SR-IOV ermöglicht aber darüber hinaus die Definition mehrerer direkter Kommunikationswege für jeden physikalischen I/O-Port auf dem Gerät. Seien z. B. 10 VMs auf einem Server, der einen 10-GbE-Adapter besitzt. Dann kann z. B. jede VM eine isolierte und von den anderen Verbindungen völlig getrennte individuelle 1-GbE-Verbindung bekommen und sich über diesen Single Link mit dem Corporate Network verbinden. Diese Direct Links umgehen den Hypervisor-„Switch“ und führen so zu einer wesentlich gesteigerten I/O-Leistung bei gleichzeitiger Entlastung der Server Prozessoren.

Sehen wir uns jetzt einmal an, was ein Controller im Detail können muss, um die I/O-Virtualisierung im bis jetzt besprochenen Umfang zu unterstützen:

  • Multiple Descriptor Queues
  • Receive-Side Scaling
  • Virtual Machine Device Queues (VMDq)
  • Extended Message-Signalled Interrupts (MSI-X)

Multiple Descriptor Queues. Multiple Sende- und Empfangsschlangen im Controller ermöglichen es, Netzwerk-Verkehrsströme in Queues aufzugliedern. Diese Queues können dann spezifischen Prozessorkernen zugeordnet werden, was die Verteilung von Workload ermöglicht und dabei hilft, dafür zu sorgen, dass ein einzelner Core nicht vom Datenverkehr überschwemmt wird. Auf die Paket Queues können Treiber-Threads zugreifen, die auf unterschiedlichen Prozessor-Cores laufen, so dass multiple Cores Netzwerk-Pakete parallel bearbeiten können. Die Pakete können mit zwei Methoden in individuelle Queues geleitet werden, RSS und VDMq. Bei RSS gibt es eine Tabelle zur Abbildung von Queues auf Prozessor-Kerne. VDMq filtert Daten aufgrund von MAC-Adressen oder VLAN-Tags in Queues. Der Intel 82589 10-GbE-Controller bietet 32 Sende-Queues und 64 Empfangs-Queues pro Port, die auf maximal 16 Cores abgebildet werden können. Das ermöglicht ein beträchtliches Load Balancing.

Receive-Side Scaling RSS. Um zu bestimmen, welche Empfangsschlange für ankommende Pakete benutzt werden soll, können Controller auf Systemen mit Windows Server 2003 oder Vista RSS benutzen. Bei Linux-Systemen ist das als Scalable I/O bekannt. RSS leitet Pakete an unterschiedlichen Schlangen, ohne dass sie vorher sortiert werden müssten. Ankommende Pakete werden zuerst in Flows aufgeteilt. Der für ein gegebenes Paket spezifische Flow wird durch die Berechnung eines Hash-Wertes, der von Feldern im Paket-Header abgeleitet wird, bestimmt. Der Hash Wert dient als Look-Up-Wert in einer Tafel, die anzeigt, zu welchem Flow oder in welche Schlange das Paket kommen soll. Die Hash Werte können auch dazu benutzt werden, einen speziellen Prozessor auszuwählen, der den Paketfluss behandeln soll. So wird sichergestellt, dass die Pakete der Reihe nach behandelt werden. RSS ist hinsichtlich der Verteilung der Pakete intelligent und programmierbar. So kann man z. B. dafür sorgen, dass multiple TCP/IP-Paketströme gezielt von verschiedenen Cores behandelt werden, wenn die Controller Multiple Queues unterstützen. Der Intel 82575 1-GbE- und der Intel 82589 10-GbE-Controller unterstützen beide RSS.

Virtual Machine Device Queues VMDq. Die Fähigkeit, Streams an verschiedene Cores zu leiten, ist ein wesentliches Element für die Unterstützung der Virtualisierung. Dieses Design ermöglicht, dass sich VMs, die von einem Hypervisor gehostet werden und Netzwerk-Controller emulieren, auf einen dedizierten Netzwerk-Strom verlassen können, der von einem einzigen Core behandelt wird. Sind multiple VMs aktiv, können sie sich die Controller Ports teilen, aber die Vorzüge eines „eigenen privat bearbeiteten Paket-Stroms“ genießen. Diese Lösung steigert die Leistung einer virtualisierten Umgebung erheblich. Die VMDq-Technologie liefert multiple Hardware-Schlangen und Offload-Möglichkeiten, die dazu benutzt werden können, den Software-Overhead, der durch eine simultane Benutzung eines einzigen physikalischen Netzwerk Controllers durch multiple VMs entsteht, zu reduzieren. Bevor es diese Technologie gab, musste ein Netzwerk-Switch, der in der Hypervisor-Software emuliert wurde, alle Pakete sortieren und sie individuell an die laufenden VMs weitergeben. Neben der erheblichen Belastung des Hypervisors hat das vor allem zu erheblichen Verzögerungen in der Paket-Weiterleitung geführt. Mit VMDq werden Zuordnungen zwischen individuellen Hardware-Queues und den emulierten Netzwerkschnittstellen der laufenden VMs hergestellt, das heißt der Controller selbst nimmt das Routing zwischen physikalischem Port und VMs vor, was den Overhead signifikant senkt. Die Funktion kann man auch auf Pakete anwenden, die die VMs nach draußen schicken, um Fairness bei der Sendung zu erzielen und die Blockierung eines Controllers durch eine einzelne VM zu verhindern.

Extended Message-Signalled Interrupts (MSI-X). De Fähigkeit, effektiv zwischen Schlangen und Cores zu kommunizieren, wird durch MSI-X erbracht. MSI-X ist die nächste Generation von MSI, die Interrupts auf einen spezifischen Core leitet. MSI-X arbeitet mit multiplen Interrupt-Vektoren. So können multiple Interrupts simultan behandelt werden, was einen Lastausgleich zwischen den Cores ermöglicht. Die Controller, die MDQ unterstützen, haben für jede Schlange einen eigenen Satz von MSI-X-steuerbaren Interrupt-Vektoren. Dadurch kann man ein sehr genaues Paket-Management und ein Feintuning der Prozessor-Last realisieren. Durch einen Interupt-Vektor für jede Queue kann der Controller multiple Interrupts gleichzeitig behandeln und vermeidet die Engpässen, die entstehen können, wenn alle Interrupts durch einen einzigen Vektor beschrieben werden.

Netzwerk-Controller, die alle die genannten Funktionen unterstützen, haben noch weitere Funktionen, wie die Intel I/O Acceleration Technology I/OAT, die die Bandbreite z. B. dadurch optimiert, dass der Speicherzugriff zu Paketkomponenten verbessert wird und ordentliche Puffer, wie z. B. einen 512 KB Empfangspuffer und einen 320 KB Sendepuffer bei 10-GbE. Darüber hinaus werden Teilaufgaben von TCP/IP, wie Checksum oder Segmentierung, bereits im Controller erledigt.

Intel, DELL und VMware haben in verschiedenen Versuchen die Leistungsfähigkeit der neuen Konzepte belegt. Ich greife hier einmal einen heraus, der mir besonders typisch erscheint und bei dem der Server nicht allzu groß ist. Intel hat mit VMDq eine Technologie entwickelt, die das Sortieren und Weiterleiten der Datenpakete in die Hardware verlegt hat. VMware musste die Hypervisor Switch Layer ändern, nicht nur um die Daten an die entsprechende Ziel-VM zu bringen, sondern auch, um die Interrupts an die entsprechenden CPU-Kerne und die passende VM zu bringen. Mit dieser kombinierten Implementierung der Queuing-Technologie in der virtuellen Umgebung kann der Durchsatz mehr als verdoppelt werden. Im speziellen Szenario besteht die Konfiguration aus einem Intel Xeon-basierenden Server mit Windows Server 2003 mit vier VMs unter VMware ESX 3.5 Update 4 und einem Intel 82598 10-GbE-Controller. Mit der IxChariot Benchmarking Anwendung wurde als „receive-only“-Durchsatz ohne VMDq 4 Gbit/s gemessen. Das entspricht in etwa dem Wert, den ich in meinem früheren Artikel für die herkömmlichen Virtualisierungslösungen evaluiert und erklärt hatte. Mit VDMq konnte der Durchsatz mit 9,2 Gbit/s mehr als verdoppelt werden. Sieht man genau hin, ist das sehr nahe an der Obergrenze davon, was ein 10-GbE-Adapter überhaupt schaffen kann. Die Lesevorgänge wurden mit der Standard-Paketgröße 1500 Byte durchgeführt. Der Einsatz von Jumbo Frames mit einer Länge von 9000 Byte konnte der Durchsatz sogar auf 9,5 Gbit/s gesteigert werden. Beide Werte korrespondieren mit den generell möglichen Grenzwerten von 10-GbE-Adaptern!

Das stützt meine Theorie, dass zukünftige Server mit 16, 32 oder 64 Cores in wenigen Jahren durchaus eine 40-GbE-, 32-GbFC- oder 40-GbIB-Ausstattung benötigen werden.

Konsequenzen für die Unternehmensnetze
Das Konzept der I/O-Virtualisierung hat weit reichende Konsequenzen für die Unternehmensnetze und die Gestalt von Virtualiserungslösungen.

I/O-Virtualisierung findet in mehreren Stufen und an mehreren Stellen statt. Die wichtigste Erkenntnis ist sicherlich:

  • Durchbruch der 10-GbE-Marke. Systeme, die mit den Hardware-Erweiterungen zur I/O-Virtualisierung ausgestattet sind, entlasten den Hypervisor enorm. Man kann also nicht mehr davon ausgehen, dass diese Systeme nur eine geringe I/O-Leistung haben. In 2010 sehen wir 20-Gb-Systeme, die 10-GbE und 8/10-GbFC unterstützen, in größerem Umfang. Muster gab es ja schon in 2009.

Das ist keine exotische Entwicklung, sondern findet im Rahmen von handelsüblichen Prozessorarchitekturen und Produkten wie dem Intel Xeon 5500-Prozessor statt. Virtualisierungssoftware ab z. B. VMware ESX 3.5 kann damit sinnvoll umgehen. Zukünftige Leistungssteigerungen sind vor allem dann zu erwarten, wenn die Intel Quick Path Interconnect Architektur, die ich hier nur kurz ansprechen konnte, ihre völlige Entfaltung erlebt und gleichzeitig die Anzahl der Cores steigt. Damit kommen wir locker binnen der nächsten zwei Jahre in den 40-GbE-Bereich.

Der aufmerksame Leser wird gemerkt haben, dass ich die Intraserver-IOV mit dem Beispiel Intel am Server mit einer 10-GbE-Schnittstelle habe enden lassen. Das ist sozusagen die kleinste denkbare sinnvolle Schnittstelle. Andere Hersteller unterstützen via des SR-IOV-Standards weitere Schnittstellen, vor allem FC und IB. Das führt nämlich zu einem weiteren interessanten Diskussionsbereich:

  • Einführung von InfiniBand im Rack-Bereich. Durch den dramatischen Preisverfall können wir zum ersten Male auch im Bereich der kleineren Systeme von einer überragenden Netzwerktechnologie profitieren, die Ethernet und FC wirklich integrieren kann.

Natürlich kann man im Rack-Bereich von den Vorzügen der Intraserver-IOV auch dann profitieren, wenn man für die Anbindung 10-GbE mit oder ohne FCoE oder iSCSI, 8/10-GbFC oder FLEX-10 benutzt. Das wird in vielen, wahrscheinlich sogar der überwiegenden Anzahl der Installationen so sein. Als technologischer Fundamentalist muss ich allerdings darauf hinweisen, dass das jetzt gut arbeitet, aber mit jeder Erweiterung oder Änderung kann sich die Frage nach der geeigneten Übertragungs-Technologie im Rack erneut stellen. IB ist zwar im Moment aktuell etwas teurer, mit seiner Einführung ist aber dann für lange Zeit Ruhe.

Der nächste Punkt, der auf uns zukommt ist der

  • Durchbruch der 40-Gb-Marke.

Ob nun mit oder ohne IB, das Sparpotential durch I/O-Virtualisierung ist enorm, z. B. von der Gardner Group für größere Installationen verifiziert:

  • 70% weniger I/O-Karten, Kabel, FC und Ethernet Switch Ports führen zu 35 -50% Kostenersparnis bei der I/O Ausstattung
  • Ersparnis von über 5000 US$ pro Server. Die Server können als 1U oder 2U-Server statt als 4U-Server aufgebaut werden, weil sie nicht mehr den Wust von Karten beinhalten müssen.
  • 90% Zeitersparnis für routinemäßige I/O-orientierte Management-Aufgaben
  • 40 Watt Stromersparnis pro Server durch den Wegfall der I/O-Adapter, oder 80 Watt, wenn man Transformation und Kühlung mit berücksichtigt

Dazu kommen

  • Viele betriebliche Vorteile, die weiter oben schon dargestellt wurden
  • Erhebliche Vorteile für wandernde virtuelle Maschinen. Bei einer konventionellen I/O-Lösung müssen die VMs via des virtuellen Switches außen herum über das Ethernet laufen, auch dann, wenn die Server direkt übereinander im Rack montiert sind. Diese Schleife wird ihnen jetzt vielfach erspart, weil sie direkt von einem ToR Virtual I/O-Director z. B. über InfiniBand auf ihre Zielmaschine gelangen, sofern diese mit diesem Director unmittelbar verbunden ist. Dieses Konzept wird von VMware ESX unterstützt und ist natürlich in Zukunft via IB-Switches erweiterbar.

Und das Beste zum Schluss: das RZ-Netz bleibt das RZ-Netz und das SAN bleibt das SAN! Virtual I/O sorgt dafür, dass die virtualisierten Server den Netzen gegenüber wie normale Server erscheinen. Die gesamten Diskussionen über virtuelle Switches und ihre mögliche Einbindung entfallen vollständig. RZ-Netze und SANs können weiterhin nach normalen Gesichtspunkten wie Leistung, Reaktionsfähigkeit, … geplant werden. Alle bisherigen Investitionen in die an die SAN-Infrastruktur gebundenen Funktionen bleiben erhalten. Die I/O-Konsolidierung wird genau an den Stellen eingesetzt, wo es am dringendsten nötig ist: an den Servern, in den Racks.

« Teil 13: SR-IOVTeil 15: Zur Kommunikation virtueller Maschinen unter besonderer Berücksichtigung von SR-IOV, DirectPath und VNLink »


zugeordnete Kategorien: Virtualisierung
zugeordnete Tags:

Sie fanden diesen Beitrag interessant? Sie können



Anmerkungen, Fragen, Kommentare, Lob und Kritik:

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

.