Abgabetermin:

Werbung
I.
7 März 2011
Stoyan Varlyakov | Motivation
1
t
Inhalt
I.
Motivation ............................................................................................................................................. 4
II.
Problemübersicht .................................................................................................................................. 6
A.
Anpassungen in der Hardwareebene ................................................................................................ 8
B.
Anpassungen der Protokollebene (OSI3+) ........................................................................................ 9
C.
Prefetching ...................................................................................................................................... 12
D.
Per-Packet Overhead (als der schwierigsten Operation) ................................................................ 14
E.
SMP Overheads ............................................................................................................................... 16
F.
Virtualization Overheads ................................................................................................................. 17
G.
Zusammenfassung TCP Overhead ................................................................................................... 20
H.
Netzwerkbonding als Lösung des Flashenhalsproblems: ................................................................ 21
III.
Theoretische Lösung........................................................................................................................ 27
A.
Syntetische Tests: ............................................................................................................................ 27
B.
Echte Dateitransferaufgaben: ......................................................................................................... 29
C.
Receive Aggregation ........................................................................................................................ 30
D.
Acknowledgment Offload................................................................................................................ 37
IV.
Praktische Lösung (Beweis) ............................................................................................................. 40
A.
Testverfahrenerklärung ................................................................................................................... 40
B.
Teste ................................................................................................................................................ 40
V.
Resultaten in Ausgangssituation ......................................................................................................... 43
A.
Schritt1 ............................................................................................................................................ 44
B.
Schritt 2 ........................................................................................................................................... 46
C.
Schritt 3 ........................................................................................................................................... 48
D.
Validierung der Resultate in Linux................................................................................................... 49
VI.
2
Analyse der Pakete per Wireshark .................................................................................................. 51
Motivation | Stoyan Varlyakov
7 März 2011
A.
Ausgangssituation ........................................................................................................................... 51
A.
Schritt1 – nur Offloading ................................................................................................................. 52
B.
Schritt 2 und 3 – MTU = 16386 mit und ohne Offloading ............................................................... 52
C.
Sicherheit der implementierte Lösungen – Der UDP Test .............................................................. 53
VII.
Zusammenfassung ........................................................................................................................... 55
A.
Windows Resultate der Verbesserung: ........................................................................................... 55
B.
CPU Auslastung in der gegebenen Tests: ........................................................................................ 56
C.
Resultate in der Linux Implementierung ......................................................................................... 56
7 März 2011
Stoyan Varlyakov | Motivation
3
I.
Motivation
Es sind schon mehr als 20 Jahren seit den ersten größeren Netzwerken entstanden. Für dieses
Periode hat sich der Netzwerkwelt mehrmals verändert. Da sich der Kundenzentrirung der
Lösungen einen größeren Schwiergrad bekommt mit jeden nächsten Tag, werden immer
größere Anforderungen an der Netzwerkumgebung präsentiert. Somit wachst der Komplexität
der Umgebungen und die Anforderungen an sichere, schnelle und fehlertolerantes
Netwerkumgebung sind immer höher.
Heutzutage HD Video direkt vom Netz zu sehen, oder immer mehr virtualiserte Anwendungen
zu verwenden, die physikalisch und geographisch weit entfernt sind ist ganz normal. Auch die
Interaktive Inhalt, 3D und weitere datendurchsatzfristige Anwendungen sind immer häufiger
gewünscht von Endkunden und das im Endeffekt bringt weitere Anforderungen an der
Netzwerkebene, die dahinter das ganze ermöglicht.
Auf der Serverniveau, mit den immer mehr verwendeten Virtualisiernungslösungen von
verschiedenen Anbieter (Microsoft, VMWare, Citrix, Novell...) der endbenutzerorientierte
Netzwerke wachsen weiterhin an Anforderungen.
Das bringt der Typischen Problem „Ich will alles haben und doch sofort“. Die
Netzwerklösungsanbieter reagieren sehr schnell auf diesen Marktanforderungen, um
Einkommen Erniedrigungen zu vermeiden. Aber die Recherche in der Richtung von radikalen
Veränderungen ist leider nicht so schnell und alle Lösungen verbleiben einen Firmengeheimnis.
Letzter Zeit ist einen Tendenz sehr stark entwickelt – kostenoptimierte Lösungen, die aber sehr
gute Sicherheit und Fehlertoleranz anbieten und aufgrund der niedrigen Kosten lassen sich sehr
leicht in Faktoren multiplizieren.
Ein sehr guter Beispiel für diese aus der Festplattenlösung ist der RAID Arrays (Redundant Array
of Inexpensive Disks). Auf ähnlichen Arbeitsart- und weise hat sich die Netzwerkumgebung stark
modifiziert und der IEEE Standard 802.3 für Ethernetverbindungen gewinnt immer mehr und
mehr Marktanteil und alle Forschungen in der Richtung werden eigentlich immer von der
Marktanfrage betrieben.
4
Motivation | Stoyan Varlyakov
7 März 2011
Was passiert aber mit der gesamten Protokollumgebung die schon 20 Jahre alt ist? Eigentlich
nicht viel. Alle dazugehörigen Lösungen für die immer steigenden Anforderungen sind fast
immer Betriebssystemabhängig oder Hardwarelösungsanbieter abhängig.
Der IETF hat mehrere RFCs in der Richtung aufgemacht aber keinen bringen klare Lösungen und
das ursprüngliche Design verbleibt unverändert. Aber alle Nachteile, die früher aufgrund der
niedrigen Durchsatzanforderung nicht sichtbar/wichtig waren, sind momentan einen
Flaschenhalslimitierung der gesamten Struktur.
Auch schnellere Leitungen wie Infiniband und 10Ge bringen keine wirkliche Verbesserung der
Situation aufgrund der veralteten Protokolle, die verwendet werden und die
Flaschenhalsproblem an der CPU Leistung.
Um die Lösungseinsatz für den Netzwerkumgebung immer schwieriger zu machen, gibt es
immer der Anforderung für Kompatibilität. Oft Protokolle, die aus Serversicht angepasst werden
können, bringen Probleme für Klienten, die verschiedenen Anforderungen an dasselbe Protokoll
verwenden.
Deshalb soll man immer einen Teaming (Netzwerkbonding) Lösung mit Anwendungsansicht im
Vordergrund implementieren. Und genau diesen Ausgangspunkt werde ich in der folgenden
Diplomarbeit forschen und die meist verwendete Szenarien als Case Study in Detail erforschen.
Viel Spaß beim Lesen!
7 März 2011
Stoyan Varlyakov | Motivation
5
II.
Problemübersicht
Hochleistungnetzwerke sind heutzutage immer häufiger eine Voraussetzung für den normalen
Betrieb. Die Streben nach hochverfügbaren Hochleistungssystemen bringt sehr hohe
Anforderung an der Transportsschicht. Das Problem ist, dass die grundlegende Protokolle für
den Datenaustausch sind schon veraltet und einen neueren Methode für Anpassung gibt es
leider nicht.
Auch die Gesellschaft ist in verschiedene Richtungen verteilt – Protokollanpassung auf eine
höhere Niveau der OSI Tabelle oder eine Hardwaregebundene Anpassung mit der riesigen Last.
Schlussendlich die Aspekte des Problems sind mehrere und man muss immer den Flaschenhals
suchen, um das gesamte Durchsatz zu verbessern. Einen kurzen Anblick in einen
Systemarchitektur zeigt gleich, warum Overhead und Performance eine größere Thema sind:
Typisches RDMA Access auf Netzwerkebene verglichen mit DMA auf dem lokalen Knoten
6
Problemübersicht | Stoyan Varlyakov
7 März 2011
Mit der hellgrünen Linie wird ein direkter Datenaufruf aus der Festplatte dargestellt.
In dem zweiten Szenario (mit der roten Linie) wird einen Aufruf von einen iSCSI Target
dargestellt. Dann sieht man, dass die Daten mehrmals umgewandelt werden und im Endeffekt
ist der Prozessor wesentlich mehr belastet.
Der zweite Aspekt des gegebenen Szenarios ist die Situation, wenn eine Anwendung nicht
netzwerkfähig ist. Dann emuliert das Betriebssystem lokale Festplatenverhalten. Das aber
verursacht im Endeffekt wesentlich höhere Netzwerkauslastung aufgrund des
Flaschenhalsproblems auf Netzwerkebene. Schematisch dargestellt, sieht die Verbindung auf
Netzwerkebene so aus:
Physikalischer Schicht Darstellung, verglichen zu der (OSI) Referenzmodell[4]
7 März 2011
Stoyan Varlyakov | Problemübersicht
7
Um das Flaschenhalsproblem zu kämpfen haben wir mehrere Optionen.
A.
Anpassungen in der Hardwareebene
1.
Hardwarespezifische Losungen
Diese Lösungen sind keinen echten Fortschritt, da eine Lösung in dieser Form hat
nur wirtschaftlichen Sinn. Die erste Schritte in Verbessern der Netzwerkdurchsatz
sind immer von Großhersteller und sind eigene Standarte und Lösungen. Die
Erfahrungen in der Richtung, aber verbleiben Eigentum der Hersteller und sind
keine Thema in dieser Diplomarbeit
2.
Durchsatzoptimierung
Manchmal wir die Optimierung einer Lösung verpasst. Aber es ist äußerst
wichtig, weil wir bis zum 50 % der Leistung nicht verwenden konnten, aufgrund
weniger Zeit für Optimierung der Lösung. Bei der Durchsatzoptimierung wird das
ganze Netzwerk betrachtet und durch Netzwerkdumps analysiert, damit die
reelle Auswirkung der Lösung analysiert wird. Oft werden Design- oder
Implementierungsprobleme nur mit dieses Verfahren entdeckt, die am Anfang
wegen der niedrigen Last versteckt verbleiben.
3.
“Brute force” Verfahren
Durch Bruteforce Verfahren ermöglicht immer schnellere, breitere usw.
Verbindungen. Das ist aber technisch schwer möglich, da die Anforderungen an
der Umgebung werden immer Höher mit dem Erhöhung der Taktfrequenz auf
Hardwareebene und reines Bruteforce passt leider in den reellen Welt nicht, da
die unkontrollierte Erhöhung der Frequenz setzt immer hohe Anforderungen an
der Netwerkumgebung und die Realisierung wird schon zu schwierig sein. Ein
perfektes Beispiel in dieser Richtung ist die CX4 Kabelanforderung für 10 Gb
Netzwerke – anstatt 100m auf Cat5e Kabel, kann man 10 GbEthernet nur bis zum
10 Meters betreiben mit derselben Kabelgröße 24AWG.
4.
Anpassungen in der Transportsicht

8
OSI Layer 1+2 Anpassungen – Ethernetstandarterweiterungen
Problemübersicht | Stoyan Varlyakov
7 März 2011
Es wäre möglich Optimierung auf OSI Layer 1+2 zu realisieren. Aber in
meinem Diplomarbeit wurde ich eher in Richtung Transportoptimierung
in Netzwerkprotokoll eingrenzen und diese Aufgabe verbleibt für den
nächsten Jahrgang.
B.
Anpassungen der Protokollebene (OSI3+)

Anpassungen der Inhalt der Pakete, anstatt der Transportmedium
Es wäre optimal wenn man die Anwendungen für ein bestimmtes Protokoll
anpasst – bspw. Wenn man in lokales Netz einen riesigen Fail transportiert, kann
er der unsicheren aber sehr schnelle UDP verwenden mit einen sehr hohen MTU
(bspw. 65000) anstatt der sichere aber nicht-so-schnelle TCP. Dann braucht man
aber einen Algorithmus für Bestätigung der Transferierte Dateien im Anwendung
selber, der schneller als der TCP Protokoll funktioniert…

Die Protokolle an den Situation anpassen anstatt die Situation an der Protokolle
Man kann das Verhalten der Protokolle anpassen für die Situation, deshalb ist
einen sicheren, schnellen, skalierbarer Protokoll erforderlich für eine optimale
Lösungseinsatz
Ich werde in diese Diplomarbeit die Implementierung „Netzwerkbonding“
weitererforschen als Hardwarelösung für Verbesserung der Durchsatz und verschiedene
Optionen bei der TCP-Protokolleinpassung für Arbeit unter stärkerer Auslastung.
Auf die physikalische Ebene sollen wir einen Netzwerkbonding-verfahren
implementieren. Dieses Methode war ursprünglich im Jahre 2000 beim 802.3ad definiert
auf eine Protokollebene, nämlich LACP, aber im Jahre 2008, als die Interesse an der
Technologie schon sichtbar war und mehrere Hardwareanbieter haben eigene Lösungen
zum Thema vorgestellt, hat sich die IEEE entschieden die Technologie auf die
Transportebene zu verschieben, deshalb wird 802.1x Standard klassifiziert.
Sollte man die Netzwerkebene als Flaschenhals betrachten, dann wäre es möglich, die
theoretische Lösung des Problems folgendermaßen grafisch darzustellen:
7 März 2011
Stoyan Varlyakov | Problemübersicht
9
Die Szenario vom Bild 1 im Bondingkonfiguration
In diese Implementierung durch „Bonding“ von 4 verschiedenen Netzwerkkarten in
einen Bond, haben wir das Flaschenhalsproblem aus Bandbreiteaspekt gelöst.
Die Realisierung von Bondingmodell auf Netzwerkebene sieht folgendermaßen so aus:
Physikalischer Schicht Darstellung mit Netzwerkbonding eingeschaltet, verglichen zu der (OSI)
Referenzmodell [3]
10
Problemübersicht | Stoyan Varlyakov
7 März 2011
Das Bonding von Netzwerkkarten war ursprünglich im 802.3ad definiert. Andere
wirtschaftliche
Bezeichnungen
sind
„Netzwerkteaming“
„Hochverfügbare
Netzwerklösung“, „Scalable Networking Pack“. Im 2006 nach der Veröffentlichen der
Dokument „IEEE 802.3 Maintenance“ hat die Entscheidung getroffen, dass LACP
(Netzwerkbonding) ist einen Sublayer von 802.3, deshalb muss man diese in 802.1ax
verschieben. Die Argumente für dieses sind mehrere, aber im großen und ganzen kann
man die Lösung LACP so betrachten, dass keine Protokollkontrolle existieren kann (oben
gezeigtes Bild) , sondern einfaches mehrkanaliges Bond auf Data Link Niveau (OSI Layer
2). Aber um mit dem Problem von „established Sessions are lost when the link which
handled the connection is dropped“ zu Lösen, implementiert man einen Protokolllösung
in der Form von LACP, die immer noch auf Niveau 3 funktioniert, deshalb betrachtet man
die Teaming als 802.1ax + 802.3ad. LACP hat aber einen Nachteil – es ist nicht gedacht,
dass LACP über mehrere Switche funktioniert. Zum Beispiel wenn man 2 Bonds von
jeweils 2 Netzwerkkarten, und dann wird das Trafik durch einer der Beiden geleitet.
Nehmen wir an, dass der Switch, denen der Trafik handelt ausfällt. Dann mussten alle
Klienten nochmals ARP lookup machen, um den anderen Team zu sehen auf den zweiten
Switch.
Dieses Problem beseitigt man, mit einem Verfahren „alle Switche als virtueller Cluster
betreiben“. Diese Lösung betrachtet jeder Switch als kleiner Baustein einen größeren
Switch. Dann wenn einen Switch ausfällt, die andere leiten alle Pakete der Topologie
entsprechend und dieser Ausfall verbleibt für den Klient nicht sichtbar.
Es verbleibt aber ein anderer Aspekt und zwar – CPU Leistung Problem. Angesehen
davon, wie viel Overhead gibt es bei jedem einzelnem Netzwerkadapter und die
Summierung der Overhead an die alle 4 Adapter plus den Overhead bezüglich der
Teaminglösung beobachten wir Ressourcenmangel. Der Grund dafür ist der etwas
kompliziertere Arbeits- Art und Weise der TCP Protokoll, die aufgrund der Grundlage für
sicheres Transport auftritt.
Um die Situation zu behandeln, können wir sämtliche Optionen der TCP Standard
modifizieren, die aber einen stärkeren Einfluss über die Sicherheit des geleiteten Pakets
hat*. Die RFC Gemeinschaft hat mehrmals erfolglos versucht einen generellen TCP
7 März 2011
Stoyan Varlyakov | Problemübersicht
11
Abladungmechanismus (TCP/IP Offloading Engine - TOE) darzustellen, der für jede
beliebige Situation fähig wäre.
*Diese Aussage wird in den praktischen Teil der Diplomarbeit bewiesen.
Leider die Resultate für solche Implementierungen sind der Ziel nicht entsprechend und
seit Jahr 2003 gibt es keinem vernünftig arbeitenden Algorithmus. Die ursprüngliche Idee
für konzentrieren der Netzwerkstack in einen klügeren Netzwerkkarte hat leider nicht
funktioniert, da es von Realisierungssicht sehr schwierig ist, das Ziel zu erreichen. Die
intelligenten NICs, die Offloading machen könnten, sind am Anfang der Implementierung
schneller als eine CPU, aber mit der Zeit (und Kosten) macht es wirklich weniger Sinn, die
Netzwerkstack offzuloaden.
Deshalb gibt es auch andere Verfahren die Netzwerkstack zu optimieren und trotzdem
Hardwareunabhängig zu verbleiben. Aravind Menon und Willy Zwaenepoel beschreiben
solchen Verfahren bei Linux-Systemen. [7]
C.
Prefetching
Einerseits muss man den Prefetching bei modernen CPUs betrachten. Prefetching
kommt als Lösung für zu schnelle CPUs, die die Unbenutzte Bandbreite zu RAM
verwenden die nächsten vermuteten Speicherblöcke in den Puffer anzulegen. Moderne
CPUs wie der Intel Nehalem (Core i7) und AMD Phenom 2 haben 3 Niveaus von Cache,
und der gesamte Größe ist bis zum 12 Mb. Diesen erweiterten Caching-Speicherplatz
ermöglicht verbessertes Data Prefetching, die zu einen höheren Leistungsverbesserung
führen.
Alle Tests sind durch den Tool OProfile gemacht und die Grafen zeigen nur die
Resultaten.
Die durchgeführte Analyse zeigt dem Overhead beim Transportieren von 1500 Byte
große Einheiten (maximaler Auslastung) auf einen Single CPU System.
12
Problemübersicht | Stoyan Varlyakov
7 März 2011
Overhead im Abhängigkeit von der Prefetching [7]
Die Konfiguration “None” verwendet kein Prefetching der TCP Stack, “Partial” verwendet
cache-line prefetching, und „Full“ verwendet cache-line prefetching und schritt-based
prefetching.
Wie zu sehen ist, der Overhead per-packet ist inversproportional zu der per-Byte
Overhead und per-Byte overhead ist inversproportional zu Prefetching.
Da Prefetching einer der meist verwendete Performance Optimierung ist, in den
weiteren Bearbeitung dieses Dokument werde ich immer die aggressivsten Einstellung
implementieren.
Weiterhin, die nächste problematische Zone bei der TCP-Optimierung ist die Architektur
des Rechners. Aravind Menon und Willy Zwaenepoel3 haben auch diese Auswirkung
getestet in 3 verschiedene Umgebungen: Uniprozessor (UP), Symmetricmultiprozessor
(SMP) und einen virtualiserte Umgebung durch Xen Kernel. Die Resultate sind in der
nächsten Grafik gezeigt:
7 März 2011
Stoyan Varlyakov | Problemübersicht
13
Auswirkung der Systemarchitektur auf der CPU basertes Overhead [7]
D.
Per-Packet Overhead (als der schwierigsten Operation)
Aus der schon dargestellte Grafik2 ist klar zu sehen, dass die Per Packet Overhead die
größte Anteil bei der schwierigen mathematische Kalkulationen hat, deshalb werde ich
mich in diese Richtung vertiefen. Am wichtigsten ist, dass wir einen klaren Unterschied
zwischen den echten Berechnungen der TCP Stack Anarbeiten machen und die
Operationen, die aus historische oder architektonische Gründen immer noch von der
CPU durchgeführt pro Packet werden, aber haben nichts mit den Empfanganarbeiten zu
tun.
Grafik 3 zeigt die Analyse der TCP Empfangabarbeiten Overhead in 5 verschiedene
Kategorien der Linux Kernel 2.6.26.34 auf 3 Ghz Xeon (Hyperpath), in Uniprocessor
Konfiguration mit voll Prefetching eingestellt. Die vertikale Achse stellt die gebrauchte
CPU Takten für jede der folgenden 5 Kategorien von Anarbeiten dar:
1. rx: TCP/IP Protokollanarbeitenroutinen in dem Empfangspfad der TCP Stack.
2. tx: TCP/IP Protokollanarbeitenroutinen in dem Sendepfad der TCP Stack für
Übermittlung von Bestätigungsquittungen (ACKs).
3. Buffer: Pufferverwaltungroutinen für Netzwerkpakete, ACKs, sk_buffs (Linux
Eigenschaft) , die Puffermetadateistruktur im Linux.
14
Problemübersicht | Stoyan Varlyakov
7 März 2011
4. non-proto: Andere Routinen, die operieren pro Packet, aber sind keiner Teil der Kern
TCP/IP Protokollanaberiten. Einige von diese sind Linux spezifisch, z.B wie Routinen
für softIRQ zum Interruptkontext Bewegung, aber andere sind eher generisch z.B.
Paketfiltrierung oder Netzwerkbrückenbehandlung im Kernel.
5. driver: Treiberspezifische Routinen, die arbeiten in Interruptmodus.
Erweiterte Overheadanalyse für Uniprozessorsysteme [7]
Die Spalte „per byte“ zeigt die Operationen pro Byte in den Empfangspfad.
Die „misc“ Routinen sind nicht relevant zum Empfangsprozessing und sind nicht strikt
definiert „pro Byte“ oder „Pro Packet“, deshalb gibt es eine separate Spalte für diesen
Overhead.
Der Overhead für „driver“ ist um 21%. Diesen Overhead ist per Paket, aber man kann
dieses Overhead ohne Hardwaredesignveränderungen nicht beeinflussen, deshalb wir
nehmen dieses Overhead als Fixwert und fokussieren uns auf die verbleibende 79% im
rx, tx, buffer und non-proto. Auch wenn wir den Treibereinfluss ausschließen, the
Overhead von den verbleibende Routinen ist 46% und diesen Wert ist in Faktor 3 großer
als der „per-byte“ Overhead mit 17%. Den Overhead der TCP/IP Protokoll Routinen
selber enthält Tx und Rx Routinen, die haben einen Anteil von ungefähr 21%. Den
größeren Anteil der Overhead ist der Pufferverwaltung und „non-proto“ mit ungefähr
25% zusammen. Erweitertes Profilierung der Pufferverwaltungsoverhead zeigt, dass die
meisten Overhead ist von sk_buffs Zyklen verursacht und nicht Speicherverwaltung
7 März 2011
Stoyan Varlyakov | Problemübersicht
15
selber. In Schlussfolgerung können wir zusammenfassen, dass die meßten
Overheadzyklen sind aufgrund Routinen, die irrelevant für die Protokollbearbeitung im
Kernel sind.
E.
SMP Overheads
Da alle moderne CPUs haben mehr als ein Kernel, werde ich auch die Overhead
vergleichen zwischen 2.6.16.34 UP Kernel und SMP Kernel auf einen 3.0 GHz Netburst
Xeon CPU. Da das Profil der Overhead sehr ähnlich ist, werde ich dieselben
Bezeichnungen verwenden, wie bei der UP System. Für ein besseres Verstehen der
Overhead von Multiprozessormaschinen und der Auswirkung der SMP auf die
verschiedene Komponente der TCP Stack, werde ich die UP Resultaten auch in den Grafik
darstellen:
Aufriss der Empfanganarbeiten in eine SMP gegen UP Umgebung [7]
Einige Schlussfolgerungen lassen sich von der Graphen ziehen:
1.
Bei der UP System ist der Overhead „pro Paket“ wesentlich höher (bei 48%)
verglichen zum „pro Bit“.
2.
Die Migration von UP zum SMP verbleibt der Overhead „pro Byte“ fast dasselbe,
aber wir beobachten wesentlich Erhöhung in einige der „Pro Paket“ Operationen.
Genauer angesehen, die Rx Routinen brauchen 62% mehr CPU Zeit und die Tx Routinen
16
Problemübersicht | Stoyan Varlyakov
7 März 2011
entsprechend 40% im Vergliech zu der UP System. Der Pufferverwaltungsoverhead
verbleibt ungefähr dasselbe.
Offen verbleibt die Frage, ob hinzufügen einen weiteren Kern wurde die Overhead
immer noch erhöhen. Leider kann ich selber kein Recherchieren in der Richtung finden.
F.
Virtualization Overheads
Ein wichtiger Schwerpunkt bei der heutige Systemen- und IT-Lösungen ist die
Virtualisierungsoverhead. Selbst der größte Hersteller von CPUs Intel hat deshalb eine
ganze Reihe von Produkte, die sind speziell an Virtualisierungslösungen optimiert.
Was heißt das auf Netzwerkebene? Schauen wir uns die Struktur von der sogenannten
Virtualisierungsmodell v. 1.0
Nichtoptimiertes Virtualisierungsmodell [14]
Dann hat Intel auf Systemebene den VT-x Instruktionen implementiert, so dass den
Hypervisor kann eine Netzwerkschnittstelle pro virtuelle Maschine zuweisen. Dann kann
die Virtuelle Maschine einen größeren Teil der Overhead aufgrund der Vitalisierung
ersparen und im Endeffekt den Bus für wichtigere Operationen befreien. So wird sogar
7 März 2011
Stoyan Varlyakov | Problemübersicht
17
die IRQs direkt an die Netzwerkkarte geleitet und die verdoppelte Handlung dasselbe
verursacht ziemlich stärkere Last auf Systeme.
Schematisch dargestellt die V2P (Virtuell to Physikalisch) Konfigurierung sieht so aus:
Physikalischer Passtrough von Netzwerkadapter in die virtuellen Maschinen [14]
Eine Lösung in dieser Form würde den Overhead bei normaler Virtualisierung ersparen.
Aravind Menon und Willy Zwaenepoel3 haben dem Overhead bei einer Xen virtualiserte
Maschine durch OProfile angemessen. Zusätzlich der schon bekannte Spalten Tx, Rx, Per
Byte, non-proto, driver und misc, gibt es bei der virtualiserte Systeme die
Overheadkategorien [7]
Netback: Die Netback Treiber initialisiert Transfers von der TCP Stack (Hostmaschine) zu
der Gasmaschine. Diese Overheadeinheiten sind meistens pro Paket und sind
proportional zu der Fragmente (Frames) die transferiert werden.
18
Problemübersicht | Stoyan Varlyakov
7 März 2011
Netfront: Die Netfront Treiber transferiert Pakete von der virtualiserte mMaschine und
transferiert diese zu der zu der Hostmaschine. Der Overhead ist zu der Netback ähnlich
und wieder proportional zu den Fragmenten, die transferiert werden.
Overheadprofill laut Oprofil [1] [7]
Die allgemeine Resultaten für “pro Paket” Overhead, generiert als Summe der
Kategorien non-proto, netback, netfront, tcp rx, tcp tx und buffer sind insgesamnt 56%
der gesamnten Overhead und sind wesentlich mehr als der „Pro Byte“ wert von 14%. Die
Ursache für diese erhöhte Overhead-Resultaten ist die verdoppelte Kopieren der Dateien
zwischen die VM und HM aufgrund der verwendete VMM 1.0 Struktur. VMM 2.0 sollte
die Situation deutlich verbessern, aber die Leistung eine physikalische Maschine ist als
Orientierungswert leider nie immer zu erreichen.
Interesanterweise non-proto, netback, netfront und buffer sind 46% des gesamten
Overheads. Für die TCP/IP Protokoll selber ist die Overheadprozenteinsatz genau 10%.
Diese Resultate weisen auf eine mögliche Verbesserung der Leistung in Faktoren nach
TCP/IP Optimierung hinauf.
7 März 2011
Stoyan Varlyakov | Problemübersicht
19
G.
Zusammenfassung TCP Overhead
Die modernen Rechnerarchitekturen sind aufgrund der Prefetchingverfahren,
implementiert in moderne CPUs, wesentlich optimiert in Richtung sequenzieller
Speicherzugriff. Bei nichtsequenziellem Zugriff, gibt es keine Möglichkeit auf CPU-Ebene
das Lese- oder Schreibvorgänge zu beschleunigen. Allerdings in den meisten
Programmen wird schon eine verbesserte Speicherstruktur verwendet, damit
Prefetchingalgorithmen die gesamte Leistung des Programms verbessern können.
Dieses Tendenz hat einen bestimmten Auswirkung auf der Netzwerkstruktur und protokolle gebracht. Früher war Dateikopierung der Flaschenhals. Jetzt aber mit den
neueren Architekturen hat sich die Flaschenhals auf die „per Packet“ Operationen
verschoben, sprich die Netzwerkstack ist momentan die langsamste Teil in der
Datenaustauschprozess. Ich habe dieses in 3 verschiedenen Netzwerkarchitekturen
bewiesen.
Als zweite Schlussfolgerung, können wir eindeutig bestimmen folgendes:
Wenn wir die gesamte Anzahl der Pakete in der TCP Empfangprozessing verkleinern,
dann würden wir die gesamte Overhead direktproportional verkleinern.
TCP/IP Anarbeiten ist die einzige nötige Overhead, die wir nicht vermeiden können, aber
in Wirklichkeit ist diese obligatorische Berechnung eine sehr sehr kleine (10-15%) Anteil
des gesamten Overheads. Die meisten Komponente der Overhead (system,
virtualisierung und SMP Skalierung) kommen auch in der „Pro Packet“ Berechnung, aber
die sollten wir irgendwie ausschließen.
Ich werde in der theoretische Lösungsteil 2 mögliche Lösungen der oben beschriebenen
Problem vorschlagen und nämlich Receive Aggregation (auch MTU Erweiterung „Jumbo
Frames“ als ähnliche Arbeitsart und -weise)und Acknowledgment Offload.
20
Problemübersicht | Stoyan Varlyakov
7 März 2011
H.
Netzwerkbonding als Lösung des Flashenhalsproblems:
Wie schon früher diskutiert, wird die Netzwerkbandbreite- und Verbindungssicherheit
ein Problem.
Da die Lösung des Problems sehr tief in der OSI Layer liegt (OSI Layer 1), war oftmals die
Lösung oftmals hardwarespezifisch und daher Herstellerspezifisch. Um dieses
Kompatibilitätsproblem zu kämpfen, haben sich die meisten Hardwareanbieter im Jahre
1997 auf einer Symposium getroffen und folgende Ideen dargestellt, bezüglich den
Bedarf von Standardisierung.
Die genauste Definition finden wir in der Präsentation von Sun Microsystems:



Kapazität der Leitung - Erhöhung der Kapazität ist durch Parallelschaltung
mehrerer Verbindungen zwischen zwei Endpunkten realisiert. [11]
Transparenz - Keine Auswirkungen auf die Protokolle und Schnittstellen
über den Stamm Endpunkte
(oder eine einfachere Formulierung: Nichts kaputt machen beim
Verbesserung)
Um dieses Problem zu lösen hat die IEEE der Standard 802.3ad formuliert. Die
ursprüngliche Idee war, einen Protokoll zu formulieren, der würde die
Hardwareabhängige Lösungen abstrahieren, ähnlich der Java virtuelle Maschine beim
Java Programmiersprache. Später aber in Jahre 2008 hat die Gesellschaft, die
Protokolldefinition auf Hardwareniveau verschoben, da es sehr „teuer“ ist die
Hardwarespezifischelösungen ins Betribessystemunabhängigelösgunen umzuwandeln.
So ist 802.1ax zum ersten Mal formuliert. Dank des Protokolls ist es möglich
verschiedene Hardwarekarten in einen Netzwerkbond zu verpacken. Auszug aus der
Anleitung der meistverwendete Servernetzwerkadapter:
Multi-Vendor-Teaming (MVT) gilt für alle Modi in Microsoft Windows.
Linux-Ethernet-Bonding (auch als Channel Bonding bekannt oder Teaming) unter Linux
Channel Bonding-Dokumentation finden Sie im Linux Kernel-Quellen finden Sie hier:
http://www.kernel.org/doc/Documentation/networking/bonding.txt [12] [13]
7 März 2011
Stoyan Varlyakov | Problemübersicht
21
Der Linux-Treiber Bindung stellt ein Verfahren zur Aggregation mehrere
Netzwerkschnittstellen in einem einzigen logischen "gebunden"-Schnittstelle. Das
Verhalten des gebundenen Schnittstellen hängt vom Modus, meist Sprechen, bieten
entweder Hot-Standby-Modi oder Load Balancing Services. Darüber hinaus kann Link
Integrität Überwachung durchgeführt werden. [13]
Da der Realisierungen der Netzwerkloadbalancing bei Windows und Linux/Unix dieselbe
Modi haben, werden wir uns nur auf der LInuxlösungen konzentriere, wo unter der
Name des Modus werde ich auch die entsprechenden Bezeichnung aus der Windows
Welt einschreiben, wieso (Win:):
1.
balance-rr or 0 (Win:keine)
Round-Robin-Politik: Versendet Pakete in der angegebenen Reihenfolge aus dem
ersten freien Sklaven (Slave) durch die letzte. Dieser Modus bietet Lastverteilung
und Fehlertoleranz.
2.
active-backup or 1(Win:)
Active-Backup-Politik: Nur ein Slave im Bond ist aktiv. Ein anderer Slave wird
aktiv, dann und nur dann, wenn der aktive Slave fehlschlägt. Die Wandelanleihe
hat eine MAC-Adresse, die von außen auf nur einem Port (Netzwerkadapter)
sichtbar ist. In Kernel Version 2.6.2 oder höher, wenn ein Failover in aktivBackup-Modus auftritt, wird Bindung eines oder mehrerer grundlose ARPs auf
dem neu aktiven Slave schon ein Problem. Eine kostenlose ARP ist für das
Verkleben Master-Schnittstelle ausgegeben und jedes VLAN-Schnittstellen
konfiguriert darüber, vorausgesetzt, dass die Schnittstelle mindestens eine IPAdresse konfiguriert wurde. Grundlose ARPs ausgestellt für VLAN-Schnittstellen
mit dem entsprechenden VLAN-ID gekennzeichnet sind. Dieser Modus bietet
Fehlertoleranz. Die erste Möglichkeit, dokumentiert unten, wirkt sich das
Verhalten dieses Modus.
3.
balance-xor or 2 (Win: SFT)
XOR-Politik: Transmit von der gewählten übertragen Hash Politik. Die StandardPolitik ist ein einfaches [(Quell-MAC-Adresse XOR mit Ziel-MAC-Adresse) Modulo
22
Problemübersicht | Stoyan Varlyakov
7 März 2011
Slave count]. Alternate, kann man über die xmit_hash_policy die unten
beschriebene Option gesteuert werden. Dieser Modus bietet Lastverteilung und
Fehlertoleranz.
4.
broadcast or 3 (Win: AFT)
Broadcast-Politik: überträgt alles auf allen Slave-Schnittstellen. Dieser Modus
bietet Fehlertoleranz.
5.
802.3ad or 4 (Win: IEEE 802.3ad + SLA/DYNAMIC)
IEEE 802.3ad Dynamische Link-Aggregation. Erstellt Aggregation Gruppen, die die
gleiche Geschwindigkeit und Duplex-Einstellungen. Nutzt alle Slaves im aktiven
Aggregator nach 802.3ad-Spezifikation.Slave Auswahl für ausgehenden
Datenverkehr wird nach der Übertragung Hash Politik, die von der
Standardeinstellung einfaches XOR Politik über die xmit_hash_policy Option,
dokumentiert unten verändert werden kann getan. Beachten Sie, dass nicht alle
Maßnahmen übertragen werden können 802.3ad, insbesondere in Bezug auf das
Paket mis-Bestellung Anforderungen von Abschnitt 43.2.4 der 802.3ad Standard.
Unterschiedliche Peer Implementierungen haben unterschiedliche Toleranzen für
die Nichteinhaltung.
Voraussetzungen:



6.
Ethtool Unterstützung in der Basis-Treiber für das Abrufen der
Geschwindigkeit und Duplex jedes Slaves.
Ein Schalter, IEEE 802.3ad Dynamische Link-Aggregation unterstützt.
Die meisten Schalter erfordert irgendeine Art von Konfiguration 802.3adModus aktivieren.
balance-tlb or 5 (Win: ALB)
Adaptive Load Balancing übertragen: Kanalbündelung, die nicht benötigt keine
speziellen Schalter zu unterstützen. Der ausgehende Verkehr wird entsprechend
der aktuellen Belastung (berechnet in Bezug auf die Geschwindigkeit) auf jeden
Slave verteilt. Eingehender Verkehr wird von der aktuellen Slave empfangen.
7 März 2011
Stoyan Varlyakov | Problemübersicht
23
Wenn der empfangende Slave ausfällt, übernimmt ein anderes Slave über die
MAC-Adresse des ausgefallenen Empfang Slave.
Voraussetzung:
Ethtool Unterstützung in der Basis-Treiber für das Abrufen der Geschwindigkeit
der einzelnen Slave.
7.
balance-alb or 6 (Win: ALB+RLB)
Adaptive Load Balancing: umfasst Balance-TLB-plus erhalten Load Balancing (RLB)
für IPv4-Datenverkehr und erfordert keine speziellen Schalter zu unterstützen.
Der Lastausgleich beim Empfangen von ARP Verhandlungen erreicht. Die Bindung
Treiber fängt die ARP-Antworten gesendet durch das lokale System auf ihrem
Weg aus und überschreibt die gefundenen Hardware-Adresse mit der
einzigartigen Hardware-Adresse von einem der Sklaven in der Bindung, so dass
verschiedene Peers verschiedenen Hardware-Adressen zu verwenden für den
Server.
Erhalte Verkehr von Verbindungen, die vom Server erstellt wird ebenfalls
ausgeglichen. Wenn das lokale System sendet eine ARP-Request die Bindung
Treiber kopiert und speichert die Peer-IP-Informationen aus dem ARP-Paket.
Wenn der ARP-Antwort aus der Peer eintrifft, wird seine Hardware-Adresse
abgerufen und die Bindung Fahrer initiiert eine ARP-Antwort auf dieses Peer
Zuordnung zu einer der Sklaven in die Bindung. Ein problematischer Ergebnis mit
ARP Verhandlung für den Ausgleich ist, dass jedes Mal, wenn eine ARPAnforderung gesendet wird es verwendet die Hardware-Adresse der Anleihe.
Daher lernen Peers die Hardware-Adresse der Anleihe und die Vereinbarkeit von
Verkehrsinformationen empfangen bricht die aktuelle Slave. Dies kann durch
Senden Updates (ARP-Antworten), um alle Peers mit ihren individuell
zugeordneten Hardware-Adresse, so dass der Verkehr verteilt behandelt wird.
Erhalte Verkehr ist auch neu verteilt, wenn ein neuer Slave, um die Bindung zu
und wenn ein inaktiver Slave ist wieder aktiviert. Der Empfangs-Last wird
sequentiell (Round Robin) in der Gruppe der höchsten Geschwindigkeit Sklaven in
der Anleihe verteilt.
24
Problemübersicht | Stoyan Varlyakov
7 März 2011
Wenn ein Link wieder angeschlossen ist oder ein neuer Slave verbindet die
Bindung der Verkehrsinformationen empfangen unter allen aktiven Slaves in der
Bindung durch die Einleitung ARP-Antworten mit dem gewählten MAC-Adresse
für jeden der Clients umverteilt. Die updelay Parameter (siehe unten) muss auf
einen Wert gleich oder größer als der Schalter die Weiterleitung Verzögerung
eingestellt werden, so dass der ARP-Antworten auf die Peers werden nicht durch
den Schalter blockiert werden gesendet.
Voraussetzungen:
1. Ethtool Unterstützung in der Basis-Treiber für das Abrufen der
Geschwindigkeit der einzelnen Slave.
2. Base Treiber-Unterstützung für die Einstellung der Hardware-Adresse eines
Gerätes, während es geöffnet ist. Das ist so, dass es immer ein Slave im Team
mit der Bindung Hardware-Adresse (die curr_active_slave), während mit
einer einzigartigen Hardware-Adresse für jeden Slave in der Bindung werden
benötigt. Wenn das fehlschlägt curr_active_slave seine Hardware-Adresse
wird mit der neuen curr_active_slave dass gewählt wurde getauscht.
Wie zu sehen ist, in einige Modi ist es nötig, dass auf man der Netzwerkswitchebene
einige Anpassungen unbedingt implementieren muss.
Für diesen Abschnitt "Switch" bezieht sich auf jedes System der Netzwerkkarten sind
direkt verbunden (dh, wo das andere Ende des Das Kabel wird). Dies kann eine
tatsächliche gewidmet Schalteinrichtung werden, oder es kann ein anderes regulären
Systems (z. B. einem anderen Computer ausgeführt werden Linux), Die aktive Backup-,
Balance-TLB-und Balance-Alb-Modi benötigen keine spezielle Konfiguration des
Switches.
Die 802.3ad-Modus erfordert, dass der Switch über die entsprechenden Häfen als
802.3ad Aggregation konfiguriert. Die genaue Methode Um dies zu konfigurieren variiert
von Switch zu Switch, sondern zum Beispiel ein Cisco 3550 Serie Switch erfordert, dass
die entsprechenden Ports zuerst zusammen in einer einzigen Instanz etherchannel
gruppiert, dann etherchannel ist auf den Modus "LACP" gesetzt, um die 802.3ad
(anstelle von Standard EtherChannel).
7 März 2011
Stoyan Varlyakov | Problemübersicht
25
Die Balance-rr, Balance-xor-und Broadcast-Modi im Allgemeinen verlangen, dass der
Switch die entsprechenden Ports zusammengefasst haben. Die Nomenklatur für eine
solche Gruppe unterscheidet zwischen Switches, kann es genannt "etherchannel" (wie in
der Cisco Beispiel oben), ein "Stamm Gruppe "oder andere ähnliche Variante. Für diese
Phasen, jeder Switch wird auch eine eigene Konfigurations-Option für die Umstellung
der Übertragung Politik auf die Bindung. Typische Entscheidungen sind XOR entweder
der MAC-oder IP-Adressen. Die Sende-Politik der beiden Peers muss nicht
übereinstimmen. Für diese drei Modi, die Bindung Modus wirklich wählt einen
übertragen Politik für eine EtherChannel Gruppe, alle drei werden interoperabel mit
einem anderen EtherChannel Gruppe.
26
Problemübersicht | Stoyan Varlyakov
7 März 2011
III.
Theoretische Lösung
Um das Problem richtig zu überprüfen, ist es nötig eine gut erarbeitete Benchmarkingverfahren
zu erarbeiten, damit wir die Korrektheit der vorgeschlagene Lösungsweg überprüfen können.
Ich habe mich in die 2 verschiedenen Betriebssystemen für die folgende Tests entschieden:
A.
Syntetische Tests:
1.
Linux – Netperf
Netperf ist um ein grundlegendes Client-Server-Modell konzipiert. Es gibt zwei
ausführbare Dateien - Netperf und NetServer. Generell sollten Sie nur dann
ausführen, die Netperf Programm, mit dem NetServer Programms durch die RemoteSystems inetd oder gleichwertige geltend gemacht wird. Wenn Sie Netperf
ausführen, ist das erste, das das passieren wird die Einrichtung einer Kontrolle
Verbindung zum entfernten System. Diese Verbindung wird verwendet, um TestKonfiguration Informationen und Ergebnisse zu und von dem Remote-System
übergeben werden. Unabhängig von der Art des Tests ausgeführt werden, wird das
Steuerelement Verbindung eine TCP-Verbindung mit BSD-Sockets werden. Die
Steuerung Verbindung können entweder IPv4 oder IPv6.
Sobald die Kontrolle Verbindung besteht und die Konfigurations-Informationen
übergeben wurde, eine separate "Daten"-Anschluss für die Messung selbst mit Hilfe
der API's und Protokolle für die angegebene Test wird geöffnet. Wenn der Test
abgeschlossen ist, wird die Datenverbindung-abgerissen werden und die Ergebnisse
der NetServer-back wird über die Steuerung Verbindung geleitet werden und in
Kombination mit Netperf das Ergebnis für die Anzeige für den Benutzer.
Netperf macht sicher, dass keine Netzwerkpakete über die Kontrollverbindung
transportiert werden, während eines Tests im Gange ist. Bestimmte TCP-Optionen
wie SO_KEEPALIVE, wenn Ihre Systeme wie voreingestellt, kann gestellt Pakete an
den Kontroll-Verbindung während eines Tests im Gange ist. Generell wird dies keine
Auswirkung auf die Ergebnisse haben.
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
27
2.
Windows – Passmark 7.0 NetworkTtest
Fast alle Computer in diesen Tagen über eine Netzwerkverbindung von einigem
Typen. Ob es eine Modemverbindung zu einem ISP oder ein Ethernet-Verbindung zu
einem Intranet, das Senden und Empfangen von Daten zu und von anderen
Computern ist ein wesentlicher Bestandteil des täglichen Betrieb. Eine Vielzahl von
Anwendungen verwenden TCP / IP-Networking-Technologie - E-Mail, Webbrowser
und Spiele, ein paar populäre Anwendungen zu nennen. In den meisten Fällen gibt es
eine Performance-Kennzahl wird der Benutzer mit am stärksten betroffenen - die
Geschwindigkeit oder Übertragungsrate.
Die PassMark Advanced Network Test (das ist Teil des PerformanceTest) soll die
Datenübertragungsrate zwischen zwei Computern beide müssen ausgeführt werden
PerformanceTest testen. Einer der Computer muss als Server fungieren und sitzen
auf eine Verbindung wartet. Der andere Computer dient als Client. Es verbindet sich
mit dem Server-Rechner und sendet Daten an ihn für die Dauer des Tests.
Das Netzwerk Benchmarktest wird mit jeder Art von TCP / IP-Verbindung arbeiten.
Einschließlich Ethernet, DFÜ-Modems, ADSL, Kabelmodem, Local Area Networks
(LAN), Wide Area Networks (WAN) und drahtlose Netzwerke (WLAN). Die Software
wurde optimiert, um ein Minimum an CPU-Zeit, so dass auch High-Speed-GigabitEthernet-Verbindungen Vergleichstests werden.
Die Benutzer haben die Möglichkeit, die folgenden Test Parameter zu ändern:




28
Die IP-Adresse der Maschine als Server und die Port-Nummer für den
Test, um mit Firewall-Problemen zu helfen.
Die Größe der Daten für jede Anfrage senden verwendet blockieren. Es ist
auch möglich, um variable große Blöcke, um die Leistung Deltas als
Blockgröße erhöht oder verringert messen.
Die Dauer der Prüfung.
Das Protokoll TCP oder UDP. Das TCP-Protokoll ist, wenn die Integrität der
Daten wichtig (Fehler werden korrigiert mit Hilfe von DatenÜbertragungen) ist. UDP ist für Anwendungen, tolerant zu Datenverlust
sind wie Video-Streaming verwendet.
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
B.
Echte Dateitransferaufgaben:
1.
Linux – Kopieren einer Datei von Server zu Klient auf NFS
Die Idee hinter dieser Benchmark ist, dass man mit einen Protokoll auf ein
höheres Niveau die Auswirkung der Einstellungen überprüft. Ich habe den
folgenden Testverfahren erarbeitet: Client-Server Modell, 1 Server am Anfang
ohne Verbesserungen der Netzwerkstack, dann mit verbessertes TCP
Einstellungen und dann einen Teaminglösung drauf konfiguriert auf der
Serverseite. Ich teste mit 3 verschiedenen parallelen Ausführungen der Test von
3
verschiedenen
Klienten.
Somit
kann
ich
am
besten
Flaschenhalsüberprüfungmachen. Für alle Test nehmen wir OpenSUSE 11.3 64 bit
Rechnern an.
2.
Windows – Kopieren einer binären Datei (.exe)über SMB 1.0 (Windows
2003 Server, Windows XP Clients SP3 alle 32 Bit.)
Die Idee dieser Test is ähnlich der Test beim Linux. Server ist 2003 R2 SP2 RTM
und die Klienten sind Windows XP Rechner mit SP3 drauf. Alle sind 32 Bit.
Die alle vier verschiedenen Tests sollen die Behauptungen in die theoretische
Lösung überprüfen. Ein sehr wichtiger Teil der Tests in der Windows Welt ist die
sogenannte Sicherheitstest, wo der PassMark Netzwerktest würde so
konfiguriert, dass UDP Pakete auf 1000 Mbit/sec von der Klient gesendet werden
(Simulation von VPN Trafik oder VoIP/Video Streaming).
Erstmals sollen wir die Baustein 99% alle Netzwerkverbindungen optimieren – TCP/IP.
Wie ich schon dargestellt habe, ist der Anarbeiten bei TCP Protokollberechnungen
weniger als 30% der gesamten Anarbeiten und wenn wir die Anzahl der „zu
bearbeitenden Pakete“ minimieren dann bekommen wir wesentlich weniger
Berechnungen im Endeffekt. Das können wir in 2 verschiedenen Wege schaffen – mit die
Technologie Receive Aggregation Offloading oder durch Vergrößerung der Maximal
Transfer Unit(MTU). Der Endeffekt ist immer, dass weniger Pakete werden bearbeitet
und somit gibt es wesentlich mehr freie Zyklen der CPU. Auch zu beweisen ist die
Behauptung, dass mehrere Netzwerkkarten sich ähnlich wie der Baustück verhalten –
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
29
d.h. die Resultaten, die gelten für die Einzige Netzwerkkarte sind für den gesamten Bond
fähig.
Beweis finden wir in der Definition der LACP Protokoll (grundlegend für die
Netzwerkbonding), die auf OSI Layer 2 mehrere MAC Kontrolle implementiert. (siehe
Bild4) Die praktischen Tests sollen einfach einer Tendenz zeigen, wie viel skaliert die
Lösung mit jeder nächsten Schnittstelle.
C.
Receive Aggregation
1. Welche Netzwerkpackete sind aggregiert
Das Ziel der Aggregation ist Erhalte die Anzahl der Pakete, die der Netzwerk-Stack zu
verringern, hat auf dem Weg empfangen Prozess, und gewährleistet zugleich, dass
die TCP / IP-Protokoll-Verarbeitung der Datenpakete korrekt ausgeführt wird. [7]
Die Grundidee ist, dass Erhalte Aggregation, anstatt dass das Netzwerk zu
verarbeiten Pakete von der Netzwerkkarte direkt empfangen Stapel, die Pakete sind
vorverarbeitet und verschmolzen in `aggregierten" TCP-Pakete, die dann auf mit dem
Netzwerk-Stack zur weiteren Verarbeitung übergeben. Mehrere "Netzwerk" TCPPakete sind zusammengefasst in einem einzigen "Host" TCP-Paket, wodurch die
Anzahl der Pakete, die Netzwerk-Stack hat zu verarbeiten.
Im Idealfall würde die Aggregation vollständig in einen Proxy zwischen dem Fahrer
und der TCP-Stack getan werden, und ohne Änderungen an den Rest der KernelCode. Für die Richtigkeit und Leistung, kann diese vollständige Trennung nicht
erreicht werden, und kleine Änderungen an den Treiber und die TCP-Schicht
notwendig. Es wurden keine Änderungen der IP-Schicht oder das Layout der KernelDatenstruktur für die Speicherung von Paketen, sk_buff in Linux gemacht.
Erhalte Aggregation erfolgt am Eintrittspunkt des Netzwerk-Stacks. Packet
Koaleszenz ist für Netzwerk-TCP-Pakete, die ankommen "in-sequence" im gleichen
TCP-Verbindung. So muss die eingehenden Pakete den gleichen Ursprung haben IP,
Destination IP, Source Port und Destination Port Felder aus. Die Pakete müssen auch
in Folge, und zwar sowohl von TCP Sequence Nummer und TCPBestätigungsnummer. Somit muss die Summe der TCP-Sequenznummer von einem
30
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
Paket und seine Länge entspricht der TCP-Sequenznummer des nächsten Pakets.
Auch ein TCP-Paket später in der aggregierten Folge muss eine TCPBestätigungsnummer größer oder gleich dem eines vorherige Paket in der Sequenz.
Packet Aggregation gilt nur für TCP-Pakete, also solche mit einer gültigen TCP-und IPPrüfsumme getan. Wir überprüfen nur die IP-Prüfsumme Bereich der Netzwerk TCPPaket, bevor es zur Aggregation verwendet wird. Für die TCP-Prüfsumme,
übernehmen wir die gemeinsamen Fall, dass die NIC Prüfsummenverschiebung
unterstützt, und hat die TCP-Prüfsumme validiert. Dies liegt daran, Überprüfung der
TCP-Prüfsumme in der Software würde die Aggregation teuer.
Wenn die Netzwerkkarte nicht unterstützt, erhalten Prüfsummenverschiebung wir
nicht ausführen Erhalte Aggregation.
TCP-Pakete der Länge Null, wie reine ACK-Pakete werden nicht zusammengerechnet.
Dies vereinfacht die Handhabung von doppelten ACKs in der TCP-Schicht und ist in
Abschnitt 3.6 diskutiert.
Da die TCP-und IP-Header eine große Anzahl von Option Felder zu unterstützen, ist
es nicht möglich, insgesamt zwei TCP-Pakete, wenn sie andere Option Felder
enthalten. Auch wird die Aggregation-Funktion recht kompliziert, wenn es um alle
möglichen TCP-und IP-Optionen unterstützen hat. So einfach haben wir nur TCPPakete Aggregat, dessen IP-Header verwenden Sie keine IP-Optionen oder die IPFragmentierung und dessen TCP-Header verwenden Sie nur die TCP-ZeitstempelOption.
Pakete, die nicht auf Spiel eine der Voraussetzungen für Erhalte Aggregation an das
Netzwerk weitergegeben unverändert Stapel. Dabei stellen wir sicher, dass es keine
Päckchen Neuordnung zwischen den Paketen der gleichen TCP-Verbindung, dh alle
teilweise aggregiert Paket die Zugehörigkeit zu einer TCP-Verbindung wird vor jeder
späteren unaggregierte Paket geliefert wird geliefert.
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
31
2. Die Struktur einen aggregiertes Packet
Sobald eine gültige Satz von Netzwerk-Pakete für die Aggregation identifiziert wird,
nach den oben beschriebenen Bedingungen, die Aggregation Funktion verschmilzt
sie in aggregierter TCP-Paket für das Netzwerk Stack. [7]
Die aggregierten TCP-Paket wird durch Verkettung `'zusammen einzelne TCP-Pakete
auf die` Fragmente Form "der aggregierten Paket und durch Umschreiben der TCP /
IP-Header der aggregierten Paket erstellt. Die TCP / IP-Header des ersten TCPFragment in der Kette behält seine wird die Kopfzeile der aggregierten Paket,
während die nachfolgenden TCP-Fragmente nur ihre Nutzlast behalten. Die
Verkettung wird in einer OS-spezifische Art und Weise. Unter Linux, zum Beispiel, ist
die Verkettung, indem Sie den Zeiger in der Fragment sk_buff Struktur auf die
Nutzlast des TCP-Fragmente Punkt gemacht. Somit gibt es keine Daten kopieren in
Packet Aggregation beteiligt.
Die TCP / IP-Header der aggregierten Paket umgeschrieben, um das Paket Koaleszenz
zu reflektieren. Die IP-Paketlänge Feld ist die Länge des gesamten TCP-Nutzlast
(einschließlich aller Fragmente) plus die Länge des Header gesetzt. Die TCP Sequence
Number Feld wird in den TCP-Sequenznummer des ersten TCP Fragment gesetzt, und
die TCP-Bestätigungsnummer Feld ist auf die Anerkennung Nummer des letzten TCP
Fragment gesetzt. Die TCP-Fenstergröße beworben wird die Größe des Fensters in
den letzten TCP Fragment beworben gesetzt. Eine neue IP-Prüfsumme für die
aggregierten Paket über seine IP-Header und dem neuen TCP Pseudo-Header
berechnet. Die TCP-Prüfsumme ist nicht neu (denn das würde teuer werden),
sondern wir zeigen, dass das Paket von der NIC-Prüfsumme verifiziert wurde.
Die TCP-Zeitstempel in der aggregierten Paket wird aus dem Zeitstempel in der
letzten TCP-Fragment des aggregierten Paket kopiert. Theoretisch kann diese
Ergebnisse mit dem Verlust von Zeitstempel-Informationen und Einfluss auf die
genaue Abschätzung der RTT-Werte. Doch in der Praxis, da nur Pakete, die sehr
rechtzeitig ankommen nahe beieinander aggregiert sind, sind die timestamp-Werte
auf alle TCP-Fragmente dürfte die gleiche sein, und es gibt keinen Verlust an
Präzision. Wir geben ein strengeres Argument für diese Behauptung in Abschnitt 3.6.
32
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
Schließlich ist die aggregierte TCP-Paket mit Informationen über ihre konstituierende
TCP-Fragmente ergänzt. Insbesondere wird der TCP-Bestätigungsnummer jedes TCPFragment in das Paket-Metadaten-Struktur (sk_buff, im Falle von Linux) gespeichert.
Diese Informationen werden später durch die TCP-Schicht für die korrekte
Verarbeitung Protokoll verwendet.
3. Wann stoppt die Netzwerkaggregieren
Netzwerkpakete werden zusammengerechnet, sofern sie von den NIC-Treibern
empfangen werden. Die maximale Anzahl der Netzwerk-TCP-Pakete, die in einem
aggregierten TCP-Paket verschmolzen erhalten, ist die Aggregation Limit genannt.
Sobald ein Paket das aggregierte Aggregation Limit erreicht, wird sie an das Netzwerk
weitergeleitet Stapel. [7]
Die tatsächliche Anzahl der Pakete, die in einer aggregierten Paket verschmolzen
bekommen kann kleiner sein als die Aggregation Limit, und hängt von der NetzwerkAuslastung und die Ankunftsrate der Pakete. Wenn eine aggregierte Paket enthält
weniger als die Aggregation Limit Anzahl der Pakete, und nicht mehr NetzwerkPakete werden zur Verarbeitung zur Verfügung, dann ist dieses semi-aggregierten
Paket wird an den Netzwerk-Stack ohne weitere Verzögerung weitergegeben. Somit
ist die Netzwerk-Stack nie erlaubt, untätig bleiben, während es Pakete im System zu
verarbeiten. Erhalte Aggregation ist somit Arbeits-Erhaltung und gilt nicht für die
Verzögerung der Paketverarbeitung hinzuzufügen.
Wir erwarten, dass die Leistungsvorteile von Erhalte Aggregation proportional zu der
Anzahl der Pakete in einer aggregierten Paket verschmolzen. Allerdings sind die
inkrementellen Leistungsvorteile der Aggregation zu erwarten, dass ab einer
gewissen Anzahl von Paketen marginal. Somit dient die Aggregation als obere Grenze
für die maximale Anzahl von Paketen zu aggregieren gebunden, und sollte auf einen
angemessenen Wert, bei dem die meisten Vorteile der Aggregation erreicht gesetzt
werden. Wir ermitteln einen guten Cut-off-Wert für die Aggregation Limit
experimentell.
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
33
4. Modifizierungen der TCP Stack
Das aggregierten TCP-Paket wird vom Netzwerk empfangen und Stapel wird durch
die MAC-und IP-Schichten in der gleichen Weise verarbeitet, wie ein regelmäßiges
TCP-Paket verarbeitet wird. Doch auf der TCP-Schicht, sind Änderungen erforderlich,
um aggregierte Pakete korrekt zu behandeln. Dies liegt daran, TCP-Protokoll
Verarbeitung in der TCP-Schicht ist abhängig von der tatsächlichen Anzahl der
"Netzwerk" TCP-Pakete, und auf die genaue Reihenfolge der TCP-Bestätigungen
erhalten. Seit Erhalte Aggregation modifiziert diese beiden Werte, werden
Änderungen an der TCP-Schicht erforderlich, um einwandfreies ProtokollVerarbeitung für aggregierte Pakete.
Es gibt zwei besondere Situationen, für die das TCP Verarbeitungen muss geändert
werden:


34
Erstens (1) Congestion Control: Die Staus Fenster eines TCP-Sender ist auf die
Anzahl der TCP Quittungspaketen aktualisiert Basis erhielt durch den Absender,
und nicht auf die Gesamtzahl der Bytes anerkannt durch den Empfänger. Seit
Erhalte Aggregation setzt die TCP-ACK-Feld in der aggregierten Paket an die ACKFeld der letzten TCP-Fragment, dem herkömmlichen TCP-Schicht Umsetzung
würde das Congestion-Fenster anders gesetzt, was in Ermangelung erhalten
Aggregation gerechnet.
Die modifizierte TCP-Schicht errechnet die Congestion-Fenster mit dem TCP
Acknowledgement Nummern aller TCP-Fragmente der aggregierten TCP-Paket,
anstatt nur mit der endgültigen Bestätigung an. Wie in Abschnitt 3.1 erwähnt,
sind die Anerkennung Nummern der einzelnen TCP-Fragmente in das PaketMetadaten-Struktur (sk_buff) beim Empfangen Aggregation durchgeführt wird
gespeichert.
Zweitens (2) TCP Danksagung: Das TCP-Protokoll legt fest, dass eine
Anerkennung Paket für jede alternative volle TCP-Segment vom Empfänger
empfangen muss erzeugt werden. Seit Erhalte Aggregation verschmilzt mehrere
Netzwerk-TCP-Pakete in einem einzigen Paket zusammengefasst, würde die
herkömmlichen TCP-Schicht concude, dass es nur einen einzigen TCP-Segment
erhalten hat, und erzeugen daher die falsche Anzahl von Quittungspaketen.
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
Die modifizierte TCP-Schicht errechnet die korrekte Anzahl der Bestätigungen
durch die Berücksichtigung der einzelnen TCP-Fragmente, sondern unter
Berücksichtigung des gesamten aggregierten Pakets als ein Segment. Diese
Information ist auch in der Struktur während sk_buff erhalten Aggregation
gespeichert.
5. Implementierung in Linux kernel 2.6.*
Erhalte Aggregation an der Eintrittsstelle des Netzwerks implementiert ist
Stapelverarbeitung Routine. Für die Linux-Netzwerk-Stack, das ist der Einstiegspunkt
des Softirq für Netzwerk erhalten Verarbeitung.
Treiber für die Netzwerkkarte, die Pakete von der Netzwerkkarte empfängt, wird
modifiziert, um die empfangenen Pakete in einem speziellen Erzeuger-Verbraucher
"Aggregation Warteschlange" Enqueue. Die Receive-Aggregation-Routine ausgeführt
in Softirq Zusammenhang "verbraucht" die Pakete verworfen in die Warteschlange
und verarbeitet sie zur Aggregation. Die `Aggregation Warteschlange" ist ein ProCPU-Warteschlange, und befindet sich in einer Lock-freie Weise umgesetzt. Somit
gibt es keine Sperren Overhead für den Zugriff auf diese Warteschlange gleichzeitig
zwischen verschiedenen CPUs oder zwischen den Interrupt-Kontext und die Softirq
Kontext entstanden sind.
Die Pakete verworfen in der Aggregation Warteschlange von der NIC-Treiber sind
`Roh"-Pakete, dh sie sind nicht in den Linux-Socket-Puffer Metadaten-Struktur,
sk_buff gekapselt. Der Grund für diese, wie in Abschnitt 2.2 diskutiert wird, dass
Speicher-Management von sk_buffs ist ein wichtiger Teil des Puffers ManagementOverhead von Netzwerk-Paketen. Wir vermeiden diesen Overhead durch die
Zuweisung der sk_buff nur für den Abschlussbericht zusammengefasst Paket, in dem
Empfang (receive) Aggregation Routine. Für Linux-Treiber, dieser erlaubt uns auch,
die MAC-Header-Verarbeitung von Netzwerk-Paketen in der Fahrer, die bewegt wird
das Erhalten Aggregation Routine zu vermeiden.
Pakete werden aus der Aggregation Warteschlange durch die Aggregation Routine
verbraucht sind und in eine kleine Lookup-Tabelle, die eine Reihe von teilweise
aggregiert TCP-Pakete unterhält Hash. Wenn das neue Netzwerk TCP-Paket
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
35
"Streichhölzer" eine zuvor Hash-Paket, das heißt, es mit diesem Paket (basierend auf
den Bedingungen in 3.1 beschrieben) können miteinander verschmolzen werden,
dann sind die beiden zusammengerechnet. Ansonsten ist die teilweise aggregiert
Paket an den Netzwerk-Stack ausgeliefert, und das neue Paket wird in der LookupTabelle gespeichert.
Pakete geliefert an die Netzwerk-Stack sind synchron, verarbeitet und damit die
Kontrolle wieder an die Aggregation Routine nur, wenn die Netzwerk-Stack im
Leerlauf ist. So, um zu bleiben Arbeits-Erhaltung, wenn die Aggregation Routine läuft
von Netzwerk-Pakete zu verarbeiten (dh, ist die Aggregation Warteschlange leer), sie
sofort löscht alle teilweise aggregiert Pakete in der Lookup-Tabelle, und liefert sie an
das Netzwerk Stapel. Dies gewährleistet, dass Pakete nicht bleiben abzuwarten
Aggregation, während der Netzwerk-Stack im Leerlauf ist.
6.
Korrektheit
Erhalte Aggregation ist nur für eine beschränkte Gruppe von In-Order-TCP-Pakete,
die die TCP-Schicht "erwartet", während es in fehlerfreie Funktionsweise ist getan.
Jede TCP-Paket erfordert besondere Behandlung durch den TCP-Schicht, aus dem
gemeinsamen Weg, auf dem Stack ohne Aggregation vergangen, und so richtig durch
die TCP-Schicht behandelt. So arbeitet alle Fehler-Handling und Sonderfall
Bearbeitung von Paketen in der TCP-Schicht richtig. Wir geben ein paar Beispiele:
a)
Duplizieren oder Out-of-Order-Pakete: Da diese Pakete nicht in der
richtigen Reihenfolge (von TCP Sequence Number), sie sind nicht aggregiert und
werden direkt von der TCP-Schicht behandelt.
b)
Selektive TCP ACKs: Da TCP andere Optionen als die Timestamp-Option
nicht durch Aggregation behandelt werden TCP-Pakete mit selektiven ACKs
bestanden unverändert.
36
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
c)
Duplikat ACKs: Ein doppelter ACK-Paket enthält keine Daten in seine
Nutzlast. Da reine ACKs nie aggregiert sind, werden diese korrekt durch die TCPSchicht behandelt.
Wir jetzt erklären, warum mit Zeitstempeln aus nur die letzten TCP-Fragment in
der aggregierten Paket nicht im Mangel an Genauigkeit führen. Bei Gigabit
Übertragungsrate kann eine einzelne TCP-Sender Maschine Pakete in Höhe von
rund 81.000 Pakete pro Sekunde zu übertragen. Die Genauigkeit der TimestampWert selbst, ist jedoch typischerweise 10 ms (wenn das System einen 100-Hz-Uhr
verwendet) oder 1 ms bestenfalls (mit einem 1000 HZ Uhr). So sind etwa alle 80
aufeinander folgenden Pakete von einem Absender übermittelt dürfte die gleiche
Zeitstempel zu beginnen haben. Seit Erhalte Aggregation verschmilzt zusammen
Pakete, die einander sehr nahe kommen in der Zeit, wir erwarten, dass diese
Pakete schon die gleiche Timestampwert.
D.
Acknowledgment Offload
Unsere zweite Optimierung zur Reduzierung der Overhead pro Paket von
empfangen Verarbeitung Anerkennung Offload. Anerkennung Offload reduziert
die Anzahl der TCP-ACK-Pakete, die auf dem Übertragungsweg von empfangen
Verarbeitung, verarbeitet werden müssen, und reduziert somit die insgesamt pro
Paket-Overhead. [7]
TCP Quittungspaketen machen einen erheblichen Teil des Aufwands von TCP
erhalten Verarbeitungen. Dies liegt daran, in das TCP-Protokoll, ein TCP-ACKPaket für jeweils zwei volle TCP-Pakete aus dem Netzwerk empfangen erzeugt
werden muss. Somit bilden TCP ACK-Pakete mindestens ein Drittel der
Gesamtzahl der Pakete durch das Netzwerk verarbeitet Stapel. Da der Aufwand
für die Netzwerk-Stack ist überwiegend pro Paket, die Verringerung der TCP-ACKÜbertragung Overhead ist essentiell für die Erreichung eines guten Leistung
erhalten.
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
37
1.
Grundlagen
Anerkennung Offload ermöglicht die TCP-Schicht miteinander zu kombinieren die
Übertragung von aufeinander folgenden TCP-ACK-Pakete von der gleichen TCPVerbindung zu einem einzigen "Template" ACK-Paket.
Zur Übertragung der aufeinanderfolgenden TCP ACK-Pakete, erstellt das TCPSchicht eine "Vorlage" TCP-ACK-Paket, die die einzelnen ACK-Pakete. Die Vorlage
ACK-Paket ist bis das Netzwerk gesendet Stack wie ein normales TCP-Paket. Bei
Erreichen der NIC-Treiber (oder einen Proxy für den Fahrer), sind die einzelnen
TCP-ACK-Pakete wieder aus der Vorlage ACK-Paket generiert, und werden auf das
Netzwerk gesendet.
2.
TCP Schablonenpacket
Die Vorlage ACK-Paket für eine Sequenz von aufeinander folgenden ACKs wird
durch das erste ACK-Paket in der Reihenfolge dargestellt, zusammen mit der ACKSequenz-Nummern für die anschließende ACK-Pakete, die in der Vorlage Pakets
Metadaten-Struktur (sk_buff in Linux) gespeichert ist.
Die TCP-und IP-Header der aufeinanderfolgenden ACK-Pakete einer TCPVerbindung teilen die meisten der Felder des Headers. Insbesondere
unterscheiden sich nur das ACK-Sequenz-Nummer und die IP-Prüfsumme Bereich
zwischen den aufeinanderfolgenden Paketen. (Dies ist vorausgesetzt, sie sind
hinreichend nahe in der Zeit, erzeugt, so dass der TCP-Zeitstempel identisch
sind). Somit wird die Information in der Vorlage ACK-Paket ausreichend, um die
einzelnen ACK-Pakete in der Reihenfolge zu erzeugen.
Der NIC-Treiber ist geändert, um die Vorlage ACK-Paket unterschiedlich zu
behandeln. Die Vorlage Paket ist nicht auf das Netzwerk übertragen direkt.
Stattdessen macht der Fahrer die erforderliche Anzahl von Kopien für den
Netzwerk-ACK-Pakete. Dann schreibt die ACK Sequenznummer für die NetzwerkPakete, Neuberechnung der TCP-Prüfsumme und überträgt die Folge von TCP
ACK-Pakete auf der Netzwerkkarte.
38
Theoretische Lösung | Stoyan Varlyakov
7 März 2011
3.
Anwendungsgriff
Anerkennung Offload wird vorzugsweise in Verbindung mit dem Erhalten
Aggregation Optimierung eingesetzt. Dies liegt daran, in einem herkömmlichen
TCP-Stack, TCP ACK-Pakete erzeugt und synchron in Reaktion auf empfangene
TCP-Pakete (außer für die verzögerte TCP ACKs) übertragen. Da die empfangene
TCP-Pakete werden auch von der TCP-Stack synchron verarbeitet, wird die TCPSchicht nicht erzeugen Chancen zu Charge zusammen die Erzeugung von
aufeinanderfolgenden ACK-Pakete.
Doch mit Erhalte Aggregation, eine aggregierte TCP-Paket wirksam liefert
mehrere Netzwerk-TCP-Pakete an den TCP-Schicht gleichzeitig. Dies bietet die
TCP-Schicht die Möglichkeit, eine Sequenz von aufeinander folgenden TCP-ACKPakete gleichzeitig zu erzeugen, und an diesem Punkt, es kann der Anerkennung
Offload machen die ACK-Pakete zu übertragen.
7 März 2011
Stoyan Varlyakov | Theoretische Lösung
39
IV.
Praktische Lösung (Beweis)
A.
-
-
Testverfahrenerklärung
Durch Optimierung an großes Netzwerkauslastung, werden wir „Real life“ Anwendungen
annehmen – SMB Protokoll bei Windows Systeme und NFS bei Linux. RamDrive (mount –
t tmpfs) to /dev/null copy in Linux, RAMDRIVE to RAMDRIVE in Windows [R2]
Synthetische Benchmarks:
Netperf bei Linux, PassMark Network bei Windows (2003)
B.
Teste
1.
Synthetisches Test
PassMark Benchmark, mit die Einstellungen von MTU 1500 Bytes, keine Optimisationen,
TCP Transfereinheit 16384 Bytes.
2.
Echtdateitransferanwendung:
File Copy über CIFS (oder SMB 1.0) einen 492 MB großes Datei, kopiert vom Server zu die drei
Clients, gleichzeitig. Dieses Filecopy wird 10 Mal wiederholt und dann die gesamten Zeiten in
Sekunden dargestellt. Alle Tests sind dreimal wiederhold und das Resultat approximiert für
maximale Genauigkeit. Es wird die CPU Auslastung notiert.
Als Basis unsere Testverfahren nehmen wir 4 virtuelle Maschinen insgesamt. Ich habe
mich für virtuelle Maschinen entschieden, da der Overhead beim
Netzwerkpacketenbearbeitung doppelt ist und jeder Verbesserung der
Netzwerkdurchsatz wird sich stärker äußern, so sollten die Resultaten deutlich klarer
werden.
Von den schon erwähnten Arten von Netzwerkteaming, werde ich der Lösung von
balance-alb (Modus 6) bekannt als „ALB+RLB“ in der Windows Lösung.
Hiermit will ich erwähnen, dass in keiner der Tests habe ich zulassen, dass die CPU
Auslastung insgesamt der Hostmaschine lauft am 100% pro jede Kern.
Eine Bildschirmaufnahme in die schwierigste Situation:
40
Praktische Lösung (Beweis) | Stoyan Varlyakov
7 März 2011
Anbei Information für die Hostmaschine:
Meminfo lautet (durch das Programm CPU-Z) [R1]:
7 März 2011
Stoyan Varlyakov | Praktische Lösung (Beweis)
41
3.
Server
FQDN Name: server1, IP Adresse 192.168.100.1/24
Windows Server 2003 R2 SP2, alle Hotfixes aus Windowsupdate Stand 20. Jan 2011,
mrxsmb.sys ist Version 5.2.3790.4671 von 24 Feb 2010. RAM ist 2048 Mb, wo die
DataRam Festplatte [R2] hat die Größe von 1024 Mb (wird als non-paged Speicher vom
Betriebssystem betrachtet), eine virtuelle CPU
Clients:
FQDN Name: client1 (192.168.100.10),
(192.168.100.12):
client2
(192.168.100.11) und
client3
Gecloned einer von den anderen. Mrxsbm.sys hat die Version 5.1.2600.5512 Datum 14
April 2008.
Jeder Client hat 1024 Mb RAM, wo der RAMDrive [R2] übernimmt 512 Mb RAM und ist
gemountet als Festplatte E:. Jede virtuelle Maschine hat eine physikalische CPU
zugewiesen.
Die Testdateien befinden sich auf eine Fileshare \\192.168.100.1\e und sind die
folgenden Dateien:
Alle diese sind binäre Dateien, damit keine Komprimierung beim Transferieren mit
einem verbesserten Datenaustauschrate helfen kann.
Auf die RAMDrive in jeder Klient wir die folgende Kommandozeile ausgeführt.
@echo off
@echo %time% >>1.txt
FOR /l %%G IN (1,1,10) DO (
copy y:\en_outlook_2010_x86_516729.exe
del *.exe /f
42
Praktische Lösung (Beweis) | Stoyan Varlyakov
7 März 2011
copy y:\R268878.exe
del *.exe /f
copy y:\3.rar
del *.rar /f
echo Run:%%G
set /a count+=1)
@echo %time% >>1.txt
Als Resultat werden die Anfangs- und Endzeiten notiert. Dieser Test wird Dreimal
wiederholt und das Resultat als durchschnittlicher Wert wird dargestellt.
Für den PassMark Test werden die folgenden Einstellungen implementiert:
Auf dem Server:
3 Paralelle Ausführungen der Test auf 3 verschiedenen TCP Ports 1040, 1041, 1042
Protokoll = TCP
Auf den Klienten:
Transfereinheit = 16384 Bytes
Zeit der Test = 60 s.
Protokoll = TCP
Erwartete Resultaten:
Transferwert im MBit/sek (Summe der 3 Daemons) und CPU Auslastung auf der Server
und durschnittlicher Wert {(Client 1+ Client 2 + client 3) / 3} für die Klienten.
V.
Resultaten in Ausgangssituation
MTU auf der beiden Klient und Server ist auf 1514 (Voreinstellung) konfiguriert und es
sind keine Anpassungen der TCP Stack implementiert.
Restulate Passmark Test
Transfereinheit ist beim 16384, aber MTU beim 1500, d.h. dass jede Transfereinheit wird
von der Netzwerkstack fragmentiert.
Alle Klienten sind bei 100% CPU Auslastung, der Server bei den 39 %.
Datenaustausch ist bei 145 Mbit/sek.
Traffikgraph aus einer der Klienten:
7 März 2011
Stoyan Varlyakov | Resultaten in Ausgangssituation
43
FileCopy: 4 Minuten 24 Sec (21.7 Mb/sec pro Klient), CPU Auslastung beim 82 Prozent
auf Client, 38% auf Server
Anmerkung: Der Passmark Test stresst der CPU wesentlich Mehr auf der Klientseite.
Deshalb ist der Wert für Filecopy wesentlich höher.
A.
Schritt1
Hier wurden die vorgeschlagene TOE and TSO Verbesserungen implementiert nur auf die
Klientseite, da man dort ein Flaschenhalsproblem beobachtet:
1.
PassMark
Transfereinheit ist beim 16384, aber MTU beim 1500, d.h. dass jede Transfereinheit wird von der
Netzwerkstack fragmentiert.
Alle Kliente sind bei 100% CPU Auslastung, der Server bei den 19 %.
Der Server macht insgesamt 185 Mbit/sek.
Traffikgraph aus einer der Klienten:
44
Resultaten in Ausgangssituation | Stoyan Varlyakov
7 März 2011
FileCopy: 2 Minuten 35 Sec (36,7 Mb/sec) pro Client, CPU Auslastung beim 82 Prozent
auf Client, 98% auf Server
Notiz: Wenn wir Teaminglösung in diese Situation konfigurieren, dann haben wir gar
keinen Gewinn bei der beiden Tests. Zwar aufgrund der doppeltes Overhead bei den
Treiberaktionen, wird mehreres CPU Zeit der Server VM gebraucht, deshalb kommt
keine Optimierung vor. Sogar bei dem Filecopy Test sieht die Situation ziemlich
schlechter aus.
WICHTIG: Wenn wir keinen Flaschenhalsproblem beim Netzwerkauslastung haben, die
Teaminglösung ist doch einen unnötigen Overheadquelle!
7 März 2011
Stoyan Varlyakov | Resultaten in Ausgangssituation
45
B.
Schritt 2
In Zusatz der schon vorgeschlagene TOE and TSO Optimisationen, werden wir auch die MTU
Einheit von 1512 auf 16384 Bytes vergrößern
1.
Passmark
Alle Kliente sind bei 100% CPU Auslastung, der Server beim 38%.
Der Server macht insgesamt 900 Mbps
FileCopy: 2 Minuten 15 Sec (42 Mb/sec) pro Client, CPU Auslastung beim 82 Prozent auf
Client, 38% auf Server.
CPU Auslastung auf alle Clients ist bei 87%. Auf der Server bei 29 % .
Insgesamt Auslastung auf der Server während der Filecopytest: 1020 Mbps .
46
Resultaten in Ausgangssituation | Stoyan Varlyakov
7 März 2011
CPU Auslastung auf der Server beim Dateikopieren Test mit TSO+TOE und MTU 16k
7 März 2011
Stoyan Varlyakov | Resultaten in Ausgangssituation
47
C.
Schritt 3
Da wir schon den Flaschenhalsproblem bei der reine Netzwerkkapazität beobachten, sollen wir
schon der Bonding-Lösung implementieren. Da ich in der Testumgebung keinen Switch zum
Switch Verbindung habe, werde ich den schon beschriebenen Adaptive Load Balancing (ALB)
Teaminglösung implementieren und zusätzlich Receive Load Balancing (RLB) aktivieren.
1.
Passmark
Der Server macht 930 Mbps. Die CPU Auslastung auf die Klienten ist beim 95% auf dem
Server beim 39%.
Echtes Dateitransfer:
CPU Auslastung auf alle Clients ist bei 87%. Auf der Server bei 40 % .
Insgesamt Auslastung auf der Server während der Filecopytest: 1580 Mbps (!).
Die Verbesserung sehen wir meistens auf die Serverseite mit einem niedrigeren CPU
Auslastung mit 6% Relative Verbesserung
48
Resultaten in Ausgangssituation | Stoyan Varlyakov
7 März 2011
D.
Validierung der Resultate in Linux
Ich habe dasselbe Verfahren in eine Linuxumgebung nachgestellt.
Die Server war einen OpenSuSE 11.3 32 bit mit 2 Netzwerkadaptern, geteamt mit
balance-alb Modus6. Die Klienten waren wieder OpenSUSE 11.3 32 Bit mit eine
Netzwerkkarte jeder. Ich habe mich nur in den „Real Life Tests“ fokussiert, da der größte
Auswirkung in der reellen Dateitransfer zu sehen war.
Als Netzwerkzugriffsprotokoll, habe ich NFS verwendet und auf dem Server habe ich das
Ziel der gemountete Share auf eine tmpfs gemacht (RAMDrive). Dann nur Lesezugriff in
der Form cat * > /Dev/null getestet. Die Resultate lauten.
Anfangssituation: Benchmark hat 295 Sekunden in Durchschnitt gedauert (154 Mbps pro
Klient
7 März 2011
Stoyan Varlyakov | Resultaten in Ausgangssituation
49
Schritt1 (Offloading): Die Filecopy hat 262 Sekunden gedauert (170,5 Mbps pro Klient
oder Verbesserung von 12,5% im Vergleich zum Ausgangssituation)
Schritt2 (Jumboframes) Filecopy hat 249 Sekunden gedauert (179,4 Mbps pro Klient
Verbesserung 18,4 % im Vergleich zum Ausgangssituation)
Schritt3 (Offloading + Jumboframes). Filecopy hat 46 Sekunden gedauert (992 Mbps pro
Klient, Verbesserung 552 % im Vergleich zum Ausgangssituation)
50
Resultaten in Ausgangssituation | Stoyan Varlyakov
7 März 2011
VI.
Analyse der Pakete per Wireshark
Hier werde ich auf sehr niedriges Niveau sehen, was die Auswirkung der vorgeschlagenen
Implementierungen ist. Ich werde mich in der „Real life“ Test fokussieren, da der Synthetisches
Test sehr leicht hervorzusagen ist.
A.
Ausgangssituation
MTU 1514, kein Offloading
Der SMB 1.0 Protokoll bei Windows 2003 aggregiert einige Lese- oder Schreibvorgägne
zusammen und transferiert nur in einer der beiden Richtungen. Aus der Netzwerktrace
kann ich eine Proportion von 1 Quittung zu 9 Pakete auslesen. Daher ist es sehr leicht zu
erklären die große Verbesserung bei der Optimierung.
Größe der Pakete:
7 März 2011
Stoyan Varlyakov | Analyse der Pakete per Wireshark
51
A.
Schritt1 – nur Offloading
Da der Offloadingtreiber macht TCPSegmentation Offload, zeigt das Betriebssystem alle
Pakete „aggregiert“.
Die Auswirkung der Offloading auf Treiberebene können wir durch die falsche Checksum
erkennen. Da die Checksum von der Netzwerktreiber berechnet wird und ans
Quellserver gesendet, verbleibt dieses Prozess für den Betriebssystem transparent. Auch
die Einheiten der Pakette werden als größer als der MTU angezeigt – 28672 Bytes bis
0xffff = 65536. Aber wenn wir die Situation auf einen Netzwerkbridge anschauen (der
keinen Teilnehmer ist in dieses Datenaustausch, dann beobachten wir alle Pakete (MTU
ist gleich 1514).
Bezüglich der Größe der Pakete – 26% alle Pakete sind größer als 2500 Bytes und 75%
alle Pakete sind von 150 bis 300 Bytes.
Wenn wir die Situation auf dem Netzwerkbridge anschauen, dann sehen wir, dass
eigentlich, dass fast 88% der Pakete eine Größe von 1514 Bytes haben und dann die
Restliche 12% eine Größe von 150 bis 300 Bytes hat.
B.
Schritt 2 und 3 – MTU = 16386 mit und ohne Offloading
Die Verteilung der Packeteinheiten sieht so aus:
52
Analyse der Pakete per Wireshark | Stoyan Varlyakov
7 März 2011
Interessant zu sehen ist, dass 60% der Pakete eine sehr hohe Große haben.
Die Pakete haben einen sequentiellen Reihenfolge und interessanterweise man
beobachtet keine Quittungen in der TCP Stack. Es folgen 2 Pakete mit maximale Große
und dann 1 mit einen Schreibresponce. Keine Quittungen in den beiden Richtungen. Der
SMB Protokoll ist einen bekannten Protokoll und die gesamte Berechnungen der
Quittungen werden von der Netzwerktreiber gemacht, deshalb ist dieses Prozess
transparent für die Betriebssystem.
C.
Sicherheit der implementierte Lösungen – Der UDP Test
Die bis jetzt vorgeschlagenen Optimierungen greifen immer in der Richtung Schnelligkeit,
da der TCP Protokoll sichere Transportierung garantiert.
Oftmals, aber wird auch einen nicht sicheren Dienst auf dieselbe Netzwerk transportiert,
wo es sehr starke Auslastung von TCP Pakete gibt. SO einen Protokoll ist UDP und ich
werde anhand der UDP Protokoll austesten, ob es sicher wäre, die vorgeschlagene
Optimierung direkt in alle Netzwerke zu implementieren.
UDP Test von verlorene Pakete bei Maximaler Auslastung auf einen virtuellen Switch –
keinen Physikalische Probleme, nur Stackbasiertes „Race Condition“ Probleme. Da UDP
kein Sicherer Transport garantiert, ist dieser Test sehr nah an der Cacheverwaltung und
CPU Auslastungseinfluss auf den Puffern orientiert.
7 März 2011
Stoyan Varlyakov | Analyse der Pakete per Wireshark
53
In der Anfangssituation, bei einer vollen Netzwerkauslastung von 200 Mbps mit TCP
Pakete und nur einen Stream mit 50 Mbps, haben wir einen Verlustrate von 90%. Dieser
Wert ist sehr sehr hoch und ist für keinen Dienst genügend (VoIP, Video Streaming
etc…). Wenn wir die TCP Auslastung auf 150 Mbps begrenzen, dann nimmt die
Verlustrate auf 0.2% zu, was für fast jeden UDP Dienst gut genug wäre.
Bei Implementierung von Schritt 1 (Offloading) können wir 2 TCP Streams haben mit
jeder Schreibrate von 100 Mbps und 2 UDP Streams mit Schreibrate von 50 Mbps. Dann
ist der Verlustrate beim 0.06%, was ein sehr gutes Resultat ist.
Wenn wir die Geschwindigkeit der TCP Streams verdoppeln (200 Mbps per Stream),
dann steigt der Verlustrate auf 0,47%, was immer noch akzeptabel ist.
Wenn wir aber der TCP Schreibrate auf 300 Mbps per Stream setzen, dann sehen wir
wieder einen Verlustrate von 90+%, was extremunakzeptabel ist.
Bei Implementierung alle vorgeschlagenen Optimierung, haben wir immer noch
dieselben Resultate bei der UDP Test, weil das Problem mit der CPU Auslastung ist. Jedes
Mal, wann auf der Client die CPU Auslastung einen Wert von 80% Prozent hat, dann gab
es riesige Verluste.
Deshalb ist es kritisch, dass man genug CPU Leistung für UDP Basierte Netzwerke
garantiert. Entweder mit eine QoS Lösung(Limitierung der Geschwindigkeit pro Dienst)
oder mit einen starkes Hardwareeinsatz berücksichtigen.
54
Analyse der Pakete per Wireshark | Stoyan Varlyakov
7 März 2011
VII. Zusammenfassung
In meiner Diplomarbeit habe ich der Antwort der Frage gesucht “Wie kann man der TCP
Protokoll richtig für sehr hohes Netzwerkauslastungsumgebung anpassen”.
Die Lösung in der Richtung CPU Auslastung ist TCP Offloading Engine (TOE) und TCP
Segmentation Offload (TSO) und eine Erhöhung der MTU Wert (bekannt als Jumboframes).
Zusammenimplementiert in einen Homogänennetzwerk, die Resultate sind überraschend – eine
Verbesserung im Faktor 5 kann man erwarten, wenn das Protokoll große Transfereinheiten
unterstützt.
A.
Windows Resultate der Verbesserung:
1600
1400
1200
Mbps
1000
Daten
800
Passmark
600
400
200
0
Start
7 März 2011
Schritt1
Schritt2
Schritt3
Stoyan Varlyakov | Zusammenfassung
55
B.
CPU Auslastung der Server in der gegebenen Tests:
100%
90%
80%
70%
60%
50%
CPU-P
40%
CPU-D
30%
20%
10%
0%
Start
C.
Schritt1
Schritt2
Schritt3
Leistung Bits pro Megahertz
1.4
1.2
Bits\Mhz
1
0.8
Data
0.6
Passmark
0.4
0.2
0
Start
56
Schritt1
Zusammenfassung | Stoyan Varlyakov
Schritt2
Schritt3
7 März 2011
D.
Resultate in der Linux Implementierung pro Client
1200
1000
Mbps
800
600
Datendurchsatz
400
200
0
Start
Schritt1
Schritt2
Schritt3
Eine andere Schlussfolgerung müssen wir aber allerdings ziehen – es gibt keinen QoS
Dienst für die TOE und TSO. Deshalb wird der bekannte FIFO Verfahren verwendet und
Protokolle, die kein sicherer Übertragung garantieren, können ein Problem haben mit
extreme Datenverluste. Daher kommt der sehr spezifischen Einsatz der vorgeschlagenen
Lösungen und zwar Umgebungen, wo iSCSI, Hypervisor, High Performance Computern,
High availability Cluster Hochauslastungsbackupnetzwerke usw.
Noch eine weitere Schlussfolgerung habe ich bewiesen:
Wenn wir keinen Flaschenhalsproblem bei der Netzwerkauslastung haben, die Teaminglösung
ist doch einen unnötigen Overheadquelle!
7 März 2011
Stoyan Varlyakov | Zusammenfassung
57
Referenzen:
[1] http://oprofile.sourceforge.net/news/
[2] http://download.intel.com/design/network/applnots/321211.pdf
[3] IEEE 802.1ad
[4] IEEE 802.3x
[5] Mogul, Jeffrey C. (2003) Proceedings of HotOS IX: The 9th Workshop on Hot Topics in
Operating Systems.
[6] TOE by Linux Foundation, online:
http://www.linuxfoundation.org/collaborate/workgroups/networking/toe
[7] Optimizing TCP Receive Performance Aravind Menon and Willy Zwaenepoel, online:
http://www.usenix.org/event/usenix08/tech/full_papers/menon/menon_html/paper.html
[8] TCP Offload engines finally arrive by: Alan Earls , Storage Magazine
[9] http://www.emulex.com/blogs/dell/2010/03/04/nashville-rocks-convergence-toe-iscsifcoe/
[10] The tolly group doc. no. 207171 Feb 2007 - Nortel Ethernet 5500, 1600, 8300 and 8600
switches, evaluation of resilient routing switches for real time multimedia traffic
[11] Link Aggregation Trunking – Sun Microsystems.
[12] How do I use Teaming with Advanced Networking Services (ANS)? (Intel Webseite)
online: http://www.intel.com/support/network/sb/cs-009747.htm
[13] Thomas Davis <tadavis at lbl.gov> Linux Ethernet Bonding Driver, online:
http://www.kernel.org/doc/Documentation/networking/bonding.txt
[14] An Introduction to SR-IOV Technology, Intel
LAN Access Division, online:
http://download.intel.com/design/network/applnots/321211.pdf
58
Zusammenfassung | Stoyan Varlyakov
7 März 2011
Resourcen
[R1] CPU-Z, Online: http://www.cpuid.com/softwares/cpu-z.html
[R2] DataRam RAMDRIVE, basiertauf ramdisk.sys von Microsoft. Online:
http://memory.dataram.com/products-and-services/software/ramdisk
7 März 2011
Stoyan Varlyakov | Zusammenfassung
59
Herunterladen