28.04.2015 (eh)
4.6 von 5, (11 Bewertungen)

So eignet sich Flash über PCIe

  • Inhalt dieses Artikels
  • So eignet sich Flash über PCIe
  • Exkurs in die PCI- und PCIe-Geschichte
  • Das müssen Sie wissen: PCIe-Grundlagen
  • PCIe in Flash-Systemen
  • Anwendungen mit PCIe-Flash-Karten am Beispiel der Seagate-Nytro-Karte
  • Die wichtigsten Merkmale der Seagate-Nytro-Karte
  • Zusammenfassung: Klartext über PCIe und Flash

PCIe wurde ursprünglich nicht für Speicheranwendungen entwickelt. Es ist aber ein sehr schnelles Transportmedium für Daten mit einer niedrigen Latenz. Gruppierungen von Speicherzellen auf einer einzelnen PCIe-Karte können als virtuelle SSDs oder als Hauptspeicher genutzt werden. Dadurch wird der Speicher auf der PCIe-Karte in den virtuellen Speicher des Anwenders eingebunden. Ein Überblick über die Möglichkeiten von Flash über PCIe.

Von Hermann Strass

PCIe-Leitungen können durch Switches vervielfältigt werden (Bild: PCI-SIG)PCIe-Leitungen können durch Switches vervielfältigt werden (Bild: PCI-SIG)Flash und PCIe sind allgemeine Bezeichnungen. Damit werden keine speziellen Techniken, Produkte Protokolle oder Elemente bezeichnet. Wie in dem früheren Artikel »So lassen sich die Vorteile von Flash richtig nutzen« beschrieben gibt es deutliche Unterschiede sogar in der grundlegenden Flash-Chip-Technik. Diese Unterschiede, weitere Schaltkreise und unterschiedliche Algorithmen sind die Grundlage für sehr unterschiedliche Produkte und Systeme, die unter dem Begriff Flash zusammengefasst werden.

Die herkömmlichen Transport-Techniken, wie in dem Beitrag »SAS oder SATA: Schnittstellen-Wissen für den richtigen Einsatz« beschrieben, gibt es ebenfalls in unterschiedlichen Variationen. Die hier beschriebene PCIe-Technik gibt es in sehr vielen praktischen und technischen Variationen. Einige davon sind freilich derzeit noch Nischenprodukte.

Exkurs in die PCI- und PCIe-Geschichte

»Peripheral Component Interconnect« (PCI) ist als eine parallele Verbindungstechnik (Medium für den Datentransport) ab 1991 (PCI 1.0) eingeführt worden. Die Buslänge war auf 10 cm (4 Zoll) begrenzt. Es gab keine besonderen Verfahren für den Transport von Hauptspeicher- oder Massenspeicherdaten. PCI wurde auf später um Steckplätze für Grafik- (AGP), Netzwerk- und E/A-Karten erweitert. Die übliche Begrenzung lag bei fünf Steckplätzen, bei CompactPCI für industrielle Anwendungen waren es bis zu acht Steckplätze. Für parallele (Bus-)Transportmedien gibt es mehrere technische Begrenzungen und Probleme.

Die technischen Probleme bei parallelen Bussen waren die Gründe für den Umstieg in serielle Varianten wie PCIe, nachdem Chips für die benötigten höheren Übertragungsraten verfügbar wurden. Damit konnten die gleichen oder größere Datenmengen wie bei parallelen Varianten übertragen werden. In den meisten Fällen entwickelte sich die serielle Technik aus einer Busstruktur in der sich viele Teilnehmer die Datenleitungen und damit auch die Bandbreite teilen. Eine Anzahl von einzelnen seriellen Verbindungen, bei denen an den Enden nur jeweils ein Gerät angeschlossen ist (Punkt-zu-Punkt-Verbindung), wie bei PCIe (PCI Express), ersetzen einen Parallelbus.

Das serielle PCIe-Protokoll wurde aus Kompatibilitätsgründen praktisch unverändert vom parallelen Protokoll übernommen. PCIe ging aus 3GIO und anderen Vorläufern hervor. PCIe 1.0 wurde 2002 freigegeben. Es gibt auch eine kleine Steckvariante, »ExpressCard« (früher »Newcard«) genannt, ähnlich wie PCMCIA-Karten. Eine weitere kleine Variante, Mini-PCI-Express genannt, ist eine internationale Variante für mobile Computer zur Nutzung als WLAN oder für andere Zwecke. Weitere Varianten sind beispielsweise SATAe, mSATA, XQD card, PCI ExpressModule, XMC, ATCA, AMC, FeaturePac, Thunderbolt, m.2 (früher NGFF), SCSI-over-PCIe (SOP), PCIe/104 und NVDIMM.

Die Unterschiede betreffen die physikalische Größe, die Anzahl der Leitungen (lanes). In einigen Fällen ist auch noch ein begleitendes serielles Medium, wie USB, als Teil der Transportmechanismen integriert. Thunderbolt ist eine serielle Kabelversion von PCIe zusammen mit DisplayPort. Industrielle Versionen von PCI, CompactPCI genannt, haben eine serielle Variante, »CompactPCI Serial« genannt, bei der es eine Anzahl von seriellen Übertragungswegen gibt, wie PCIe, SATA/SAS, USB und Ethernet.

PCIe ist sehr weit verbreitet, weil das Protokoll praktisch unverändert von PCI übernommen wurde. PCI ist weit verbreitet, um Chips über sehr kurze Distanzen auf einer Basisplatine zu verbinden. Diese frühe Version von PCI wurde zu einer (immer noch parallelen) Version mit Steckplätzen weiterentwickelt. So ist es verständlich, dass PCIe das bevorzugte Medium für PC-Anwendungen wurde, weil die Entwicklungsumgebung aus Software-Routinen, Protokollen und weitverbreitetem Expertenwissen über lange Zeit weitgehend unverändert oder kompatibel blieb.

Aus der Sicht von Anwendungen ist PCIe näher an der CPU (root complex) als SAS oder SATA. Das eliminiert Latenzzeiten und Protokollumwandlungsprobleme in der Hardware und Software des Zwischenelements: Steckkarte, Host-Bus-Adapter (HBA), Steuerelement oder ähnlich genannt. Wie noch erklärt wird, gibt es aber physikalische Grenzen bei der Anzahl der Elemente (Speicherkapazität), die an einen einzelnen »Root Complex« (Host, CPU) anschließbar sind.

Das müssen Sie wissen: PCIe-Grundlagen

Technischen Fakten und Funktionen der PCIe-Versionen (Quelle: Seagate/Hermann Strass)Technischen Fakten und Funktionen der PCIe-Versionen (Quelle: Seagate/Hermann Strass)PCIe wurde von Version 1.0 bis 3.0 weiterentwickelt (4.0 ist für 2015 geplant). Die Versionen erhielten jeweils höhere Transferraten (siehe Tabelle) und andere Verbesserungen. Die PCIe-3.0-Version mit 8 GT/s (giga transfers per second) ist doppelt so schnell wie Version 2.0, wozu die Anzahl der Redundanzbits von 8b/10b-Codierung auf 128b/130b-Codierung verringert wurde (siehe Tabelle). So wurde die Transferrate verdoppelt ohne die Anzahl der Transfers ganz zu verdoppeln. Bei seriellen Transfers werden die 8 Bit eines Byte in 10-Bit-Einheiten codiert.

Mit dieser 20-prozentigen Erhöhung der elektrischen Bandbreite werden längere Folgen von NULL-Bits vermieden zur Aufrechterhaltung der Taktung, und die Anzahl der NULL- und EINS-Bits auf der Übertragungsleitung ausgeglichen. Zur Verbesserung der verfügbaren Bandbreite wird in der PCIe-Version 3.0 (und zukünftig 4.0) stattdessen die 128b/130b-Codierung (nur 1,5 Prozent Aufschlag) eingesetzt. Die in obiger Tabelle angegebenen Werte zeigen die Anzahl der Datentransfers je Leitung (lane). Dieser werden mit der Anzahl der Leitungen (bis zu x32) multipliziert, wenn mehrere Leitungen (lanes) je Verbindung (link) genutzt werden.

Das Basiselement für die Datenübertragung ist die Leitung (lane), die aus zwei Paaren verdrillter Drähte besteht. Ein Drahtpaar dient zur Sendung von Daten, das andere zum Empfang von Daten, aus der Sicht des »Root Complex« (CPU). PCIe-Steckkarten gibt es in den für PCs (Stand- oder Tischgerät) üblichen Größen.

Leitungen (lanes) können gemäß den PCI-SIG-Standards zu Verbindungen (links) gebündelt werden. Definiert sind Leitungsbündel zu 1, 2, 4, 8, 12, 16 und 32 Leitungen, die entsprechend als x1 bis x32 gekennzeichnet werden. Am beliebtesten sind x1, x2, x4, x8 und x16 (für Grafikkarten). Derzeit gibt es im Handel keine x32-Varianten. Typischerweise verwalten sogenannte »Port Controller« 40 Leitungen, die zu zehn Verbindungen (links) zu je vier Leitungen (lanes) gebündelt werden. Kleinere Bündelungen werden direkt aus dem Root-Complex angeboten. Üblich sind 12-Port-Controller mit je einer Leitung (lane). Jeder Port (lane) kann individuell als PCIe x1, SATA oder USB konfiguriert werden. Doppelchips sind für zweimal 40 (80) Leitungen ausgelegt. Quadchips stellen dementsprechend bis zu 160 Leitungen zur Verfügung. Es gibt aber praktische Grenzen für die Leitungslängen auf der Basisplatine.

PCIe-Leitungen können durch Switches vervielfältigt werden (Bild: PCI-SIG)PCIe-Leitungen können durch Switches vervielfältigt werden (Bild: PCI-SIG)Auf PC-Basisplatinen (Motherboards) oder in Servern gibt es typischerweise einen (ersten) PCIe-Switch (Multiplexer), der direkt am Root-Complex angeschlossen ist. Diese Leitungen oder Verbindungen verbinden den Root-Complex mit PCIe-Endpunkten (Geräten) oder weiteren Switches im System, wodurch die Anzahl der Zugriffspunkte für PCIe-Datentransfers vervielfältigt wird. Endpunkte können auch als Brücken zu anderen Geräten oder Übertragungswegen eingesetzt werden.

Leitungen, die von einem Root-Complex ausgehen, können mit unterschiedlichen Geräten verbunden werden oder Daten mit unterschiedlichen Geschwindigkeiten übertragen. Leitungen als Teil von Verbindungen oder Ports arbeiten mit gleicher Geschwindigkeit und sind mit dem gleichen Gerät (endpoint) verbunden, weil die Datenbytes logisch über alle Leitungen verteilt übertragen werden, wodurch die Übertragungsrate vervielfältigt wird. Ein Root-Complex kann bis zu 256 Geräte (Endpoints) adressieren. Die Länge der Datenleitungen kann durch die Zwischenschaltung von Multiplexern (Switches) oder Takt-Regenerierung vergrößert werden.

Gruppierungen von Speicherzellen auf einer einzelnen PCIe-Karte können als virtuelle SSDs oder als Hauptspeicher genutzt werden. Dadurch wird der Speicher auf der PCIe-Karte in den virtuellen Speicher des Anwenders eingebunden. Diese Nutzung ist nicht mehr herstellerspezifisch, weil Intel dieses Verfahren unterstützt. Dabei gibt es aber starke Einschränkungen, weil dies nicht über einen Pufferspeicher (Cache) möglich ist, und die die Datenmenge auf den halben Pufferbereich begrenzt ist.

Die Verarbeitung im Prozessor muss für die Dauer eines solchen Vorgangs pausieren, bis dieser abgeschlossen ist. Im Falle von Flash wird dadurch eine massive Verlängerung der Latenzzeit ausgelöst. DRAM und andere neuere Techniken haben deutlich niedrigere Latenzzeiten, weil diese in DIMM-Steckplätzen deutlich näher am Prozessor arbeiten als Speicher in PCIe-Steckplätzen.

Neuere Speicherarchitekturen werden den Vorteil von DIMM-Steckplätzen nutzen, weil dieser interne Speicherbus deutlich schneller arbeitet als ein E/A-Bus, wie PCIe oder SAS/SATA. Ein E/A-Bus ist sehr ineffizient, wenn es um Latenz, Geschwindigkeit und Komplexität gehr. Im PCIe-Protokoll sind keine Nutzungsklassen definiert, allerdings kann im Konfigurationsbereich der zugehörige Treiber definiert werden, den der Root-Complex laden soll.

Standards für PCIe-Karten bezüglich Steckverbindern und Kartengrößen (Quelle: Seagate/Hermann Strass)Standards für PCIe-Karten bezüglich Steckverbindern und Kartengrößen (Quelle: Seagate/Hermann Strass)Für PCIe-Karten sind im Standard verschiedene Steckverbinder und Kartengrößen definiert, wie in der nebenstehenden Tabelle angegeben. Am wichtigsten ist die Länge des Steckbereichs. Auf den Karten werden beidseitig Kontakte an der Kartenkante als Steckverbinder genutzt. Karten mit 32 Leitungen (x32) sind derzeit nicht gebräuchlich. Externe Verkabelung ist nur für niedrige Geschwindigkeiten definiert. Das betrifft die Anbindung von externen Gehäusen, typischerweise mit SFF-8639-Steckverbindern für den Einsatz von Speicher im Format von Laufwerken.

Eine PCIe-Karte passt in einen Steckplatz mit gleicher Größe oder größer. Steckplätze mit großer Länge können mit weniger logischen Leitungen verdrahtet werden, vorausgesetzt die nötigen Masseverbindungen für die insgesamt möglichen Leitungen sind verdrahtet. Das PCIe-Protokoll ermittelt die höchstmögliche Anzahl von gemeinsamen Verbindungen selbstständig.

PCIe in Flash-Systemen

Große Systeme werden mit Steckkarten in Rückwänden aufgebaut (Bild: STA)Große Systeme werden mit Steckkarten in Rückwänden aufgebaut (Bild: STA)Speichersysteme in großen Rechenzentren benötigen sehr große Speichermengen. Dazu werden PCIe-Karten mit den passenden Steckverbindern in Gehäusen in eine passende Rückwand gesteckt. Die Endpunkte (PCIe-Geräte, Brückenschaltungen, Root-Complex) kommunizieren über Software-Modul-Stufen. Die Daten fließen durch die Sendeseite (TX) nach unten, über die Leitung und auf der Empfangsseite (RX) wieder nach oben. Jede Modulstufe ist für einen bestimmten Teil des PCIe-Protokolls zuständig.

Übersicht PCIe-Protokollebenen (Bild: PCI-SIG)Übersicht PCIe-Protokollebenen (Bild: PCI-SIG)Für den Kartentausch bei laufendem Betrieb muss zuerst ein definierter Programmhalt (orderly shutdown) durchgeführt werden. Bevor eine Steckkarte gezogen wird, muss dem System protokollgerecht mitgeteilt werden, dass eine Karte gezogen wird. Das kann vermieden werden, wenn ein Multiplexer (Switch) zwischen dem Root-Complex und dem Gerät eingebaut ist. Das ist die übliche Vorgehensweise. Möglicherweise kann zukünftig der Switch wegfallen, allerdings wird sicher noch Takt-Regenerierung benötigt. Dieses Problem wird zukünftig noch deutlich größer werden, weil die Leitungslänge für die vierte PCIe-Generation halbiert werden muss. Mit der Takt-Regenerierung wird die nominelle Latenzzeit verlängert, weil die Daten zwischengespeichert und weitergeleitet werden müssen.

Viele Speicheranwendungen auf der Basis von PCIe-Steckkarten nutzen das AHCI-Protokoll, das ursprünglich für SATA entwickelt wurde. AHCI ist sehr gut bekannt, wodurch das Entwicklungsrisiko bei der Anwendung mit PCIe vermindert wird. Es gibt dazu eine Anzahl von Vorschlägen oder Prototypen zur Verbesserung bei der Anwendung mit dem PCIe-Protokoll.

Bis zu vier Leitungen je Rückwand-Steckplatz (Bild: SFF committee)Bis zu vier Leitungen je Rückwand-Steckplatz (Bild: SFF committee)Wie schon früher beschrieben reagiert Flash empfindlich auf Stromausfall. Datenverlust oder -verfälschung gibt es, wenn bei einem plötzlichen Stromausfall nicht genügend Energiereserve verfügbar ist, um den Inhalt von Zwischenspeichern (DRAM oder SRAM) rechtzeitig und vollständig in die Flash-Speicherzellen zu schreiben. Die geringe dafür benötigte Energie wird üblicherweise in einem entsprechend bemessenen »SuperCap« vorgehalten.

Große Speichersysteme sind mit einer unterbrechungsfreien Stromversorgung (USV, UPS) ausgestattet. Die darin gespeicherte Energie reicht auch für die schnelle Speicherung der temporären Daten im Flash. Aus Kostengründen gibt es weder SuperCaps noch USVs in kleinen Systemen in Heim oder Büro. Es gibt Notebook-Computer mit sehr großen Akkus, die diese Extraenergie liefern könnten, wenn die dafür benötigte Elektronik eingebaut wird. Die Qualität und Leistungsfähigkeit eines Flash-Speichersystems wird vorwiegend durch die Qualität der Speichersteuerung (Controller) im Flash-Gerät bestimmt.

Anwendungen mit PCIe-Flash-Karten am Beispiel der Seagate-Nytro-Karte

Beschleunigung eines Microsoft-SQL-Servers mit einer Seagate-Nytro-Karte: Der Microsoft-SQL-Server unterstützt unternehmenskritische Anwendungen mit besonders guter Leistung, Verfügbarkeit und mit wichtigen Funktionen für kritische Anwendungen. Die Funktion Pufferspeichererweiterung (»Buffer Pool Extension« = BPE) bietet dem Datenbank-Administrator die passende Funktion zur Erhöhung der Transaktionsleistung. Dazu wird nichtflüchtiger NAND-Flash-Speicher zur Vergrößerung des Pufferspeichers bereitgestellt.

BPE vergrößert sofort die Menge von direkt lesbaren Speicherseiten und vergrößert dabei die Datenintegrität bei Anwendungen mit einer großen Anzahl Leseanfragen. Speicherabhängige Anwendungen und/oder solche, die keinen zusätzlichen RAM-Hauptspeicher zur Verfügung haben, können davon profitieren. Der Nytro-Flash-Beschleuniger bietet kurze Latenzzeit und die Zuverlässigkeitsfunktionen für die optimale Nutzung von BPE.

PCIe-x8-Nytro-Speichermodul mit hoher Kapazität von Seagate (Bild: Seagate)PCIe-x8-Nytro-Speichermodul mit hoher Kapazität von Seagate (Bild: Seagate)Das BPE-Merkmal wird als Pufferspeicher auf Ebene 2 (level 2 cache = L2) eingesetzt, wobei der Pufferspeicher hauptsächlich auf Ebene 1 (L1) eingesetzt wird. Bei Anwendungen mit häufig vorkommenden Leseanfragen verlagert der SQL-Server diese Datenseiten automatisch in den L2-Pufferspeicher. Nur nicht mehr benötigte Seiten aus dem L1-Pufferspeicher werden aus Gründen der Datensicherheit übertragen. Mit einem einfachen »Ändere Server-Konfiguration«-Befehl werden der Ort und die Größe des BPE-Speicherbereichs festgelegt. Wird dieser Bereich auf die Nytro-Beschleunigerkarte gelegt, dann wird die Transaktionsleistung bei leselastiger Verarbeitung deutlich verbessert, wenn die Arbeitsbereiche nicht mehr in den L1-Pufferspeicher aus DRAM passen.

Die Nytro-Flash-Beschleunigerkarte ist ein primärer Halbleiterspeicher zur Beschleunigung von SQL-Server-Arbeitsabläufen. Wegen dem geringen Platzbedarf können Datenbank-Administratoren sehr leicht ihre vorhandenen Speichersubsysteme auf ein Halbleiterspeichersystem migrieren. Herkömmliche Festplatten beanspruchen die Ressourcen mit mehr Energie, Kühlung und Platz im Vergleich zu nur einem Steckplatz für Anwendungen, die in den verfügbaren Speicherplatz passen.

Die wichtigsten Merkmale der Seagate-Nytro-Karte

Die Nytro-Karte ist ausgerüstet mit den Funktionen moderner Halbleiterspeicher und einer Technik, die für lange Nutzungsdauer und für hohe Zuverlässigkeit in Anwendungen bei großen Unternehmen ausgerüstet ist. Die »host offload«-Technik (Auslagerung) verringert die Abhängigkeit von der CPU und vom DRAM, wodurch die Ressourcen für den Rechner und SQL-Sever verbleiben. Weitere Merkmale sind:

► In-box-Treiber für Windows Server 2012 R2
► Alle Microsoft-Treiber sind WHQL-qualifiziert
► Wird als Einzellaufwerk ohne Konfiguration durch den Anwender installiert
► DuraClass-Technik von SandForce für verbesserte Flash-Zuverlässigkeit, Nutzungsdauer und Energieeffizienz
► Datensicherheit gegen NAND-Flash-Fehler durch das RAID-ähnliche RAISE
► Dynamische Extraspeicherbereiche (overprovisioning)
► Weniger als fünf Sekunden Wiederanlaufzeit nach Stromausfall
► PCIe-2.0- und PCIe-3.0-Unterstützung
► schnelle Reaktionszeiten bis zu 50 Mikrosekunden
► Hoher Datendurchsatz (bis zu 4 GByte/s mit PCIe-3.0-Produkten)
► professionelle Qualität und Zuverlässigkeit.

Die Datenbank-Administratoren mit SQL Server 2014 können jetzt die Verarbeitungsleistung erhöhen durch Nutzung der Leistungsverbesserungen und Zuverlässigkeit von nicht-flüchtigem Flash-Speicher. Die niedrige Latenz, hohe Leistung und Energieeffizienz von PCIe-Flash bringt eine sehr hohe Datenbank-Geschwindigkeit.

Zusammenfassung: Klartext über PCIe und Flash

PCIe wurde ursprünglich nicht für Speicheranwendungen entwickelt. Es ist aber ein sehr schnelles Transportmedium für Daten mit einer niedrigen Latenz. Es gibt eine große Vielfalt an Produkten, Software und Expertenwissen, das ständig, soweit technisch möglich, zur Anwendung in Flash-Speichersystemen verfeinert wird. Aus technischen Gründen ist PCIe bei der Nutzung in großen Systemen auf eine kleine Anzahl von Geräten (Steckkarten, Laufwerke) begrenzt. PCIe eignet sich auch gut als Ersatz für SATA, wenn ein Gerät an einem einzelnen Rechner beim Endanwender angeschlossen ist. Die Anzahl der PCIe-Leitungen an einem Root-Complex oder Rechner ist ebenfalls begrenzt.

Müssen viele Geräte zu großen Speichersystemen gebündelt werden, dann ist SAS die günstigere Architektur und das günstigere Transportmedium. Es hat zwar etwas mehr Latenz, eignet sich aber sehr gut zur Skalierung von Anwendungen in großen Anlagen oder Rechenzentren.

.