PC-Bussysteme Die PCI-Express-Erweiterung »Multicast«

Die neue Multicast-Erweiterung der PCI-Express-Spezifikation sorgt für eine effektivere Verteilung derselben Daten an mehrere Empfänger und verringert Probleme mit der Datenkonsistenz. PCI-Express-Roots und -Endpunkte müssen dazu nicht einmal geändert werden – es sind zwischengeschaltete Switches, die die Multicast-Fähigkeit in jedes System bringen können.

PCI Express ist eine Weiterentwicklung der busgestützten Normen PCI und PCI-X mit serieller Datenübertragung. Treiber für die Entwicklung von PCI Express waren die Hersteller und Betreiber leistungsfähiger Rechner im Büro- und Firmenumfeld. Deshalb wurde die Spezifikation von PCI Express vorwiegend auf die Bedürfnisse dieser Zielgruppen abgestimmt. Entsprechend schnell setzte sich PCI Express in diesen Systemen durch. In Embedded- und Kommunikationstechnik- Anwendungen kam die PCI-Express-Technik nur in sehr begrenztem Umfang zum Einsatz. Das liegt einmal an den langen Entwicklungsund Produktlebenszyklen dieser Industrie, aber auch an der einseitigen Orientierung des PCI-Express-Standards an der Server- und Office-Welt. Die PCI-Express-Spezifikation beschreibt die PCI-Express-Topologie als eine Baumstruktur mit einem einzigen Ausgangspunkt („Root“) und mehreren Verzweigungen. Diese Struktur eignet sich gut für effiziente Verbindungen zwischen einer einzigen Recheneinheit und ihren zugehörigen, lokalen I/O-Kanälen. Hoch entwickelte Kommunikations- und Embedded- Systeme sind oft eine Ansammlung dezentraler Recheneinheiten und Peripheriegeräte. Um auch eine optimierte dezentrale Datenübertragung sowie eine System-Kohärenz zwischen Teilnehmern in Multi-Root-Systemen zu ermöglichen, ist eine Erweiterung der PCI-Express-Spezifikation nötig.

Im Mai 2008 erweiterte die PCI SIG (PCI Special Interest Group) die PCI-Express-Basisspezifikation 2.0 um Multicast-Funktionen. PCI Express Multicast optimiert Systemressourcen und führt zu einer effizienten Datenübertragung an mehrere Systemelemente mit geringerer Latenz und höherer Kohärenz. Vor allem die Implementierung von PCI Express Multicast als Erweiterung der bestehenden Spezifikation bietet wichtige Vorteile im Hinblick auf die Kompatibilität zu bestehenden Einheiten.

Multicast: schneller und effektiver

Multicasting bedeutet die gleichzeitige Bereitstellung quantifizierter Datenpakete an eine Gruppe von Zielen ohne unnötige Datenduplikation. In einem System mit dezentraler oder redundanter Intelligenz, wie sie in Embeddedund Kommunikationstechnik- Anwendungen üblich ist, bietet die Multicast-Funktion z.B. für das Aussenden gleichzeitiger Boot- oder Reset-Befehle einen effizienten Daten-Verteilungsmechanismus von einem Sender an viele Empfänger. Das gleiche gilt auch beim Versenden von Daten-Images, mit denen sich die Dauer einer Reset- Sequenz, die Systemausfallzeit oder eine simultane Aktualisierung kritischer Routing-Informationen verringern und die Kohärenz der Systemdaten gewährleisten lässt.

Bild 1 zeigt, wie sich bei einer Multicast-Übertragung der Overhead verringern lässt. Eine Umstellung der wiederholten Unicast-Transaktionen auf eine einzige Multicast-Transaktion optimiert nicht nur die Nutzung der Systemressourcen, sondern senkt auch die Bereitstellungs-Latenz und verbessert damit die Datenkohärenz zwischen den Systemteilnehmern. Wenn man annimmt, dass eine sequenzielle Datenübertragung in indexierten Zyklen erfolgt, dann ergibt ein erneuter Blick auf das einfache Modell oben in Bild 1, dass der vierte Endpunkt erst dann auf dem gleichen, aktuellen Datenstand wie der erste Endpunkt ist, wenn alle dazwischenliegenden Iterationen abgeschlossen sind. In einem Single-Root- System ist eine solche Lücke relativ harmlos, weil die meisten Daten von dem einzigen Host ausgesendet werden und die vier dargestellten Transaktionen abgeschlossen wären, bevor weitere Aktionen stattfänden. Bei Systemen mit dezentraler Intelligenz und nennenswertem Peer-to-Peer-Datenverkehr führen diese Verzögerungen aber potentiell zu Problemen mit der Datenkonsistenz, weil die Datenpakete zu unterschiedlichen Zeiten bei jedem der Endpunkte ankommen. Wenn es sich bei den Daten, die per Schleife an die Endpunkte gesendet werden, um ein Update für eine Routing-Tabelle für jede der vier Network Processing Units (NPUs) handelt, dann haben die Tabellen-Updates an jedem Endpunkt eine andere, zunehmende Latenz. Dies würde zu Fehlern im Routing führen. Daten-Multicasting führt zu einer besseren Auslastung der Verbindungen im gesamten System. Es kann Flaschenhälse eliminieren und die Übertragungsleistung erhöhen. Das PCI-Express- Multicast-Protokoll erzeugt Datenkopien nur bei „Verzweigungen“. Bild 2 zeigt eine aus zwei PCIExpress- Switches bestehende, zweistufige Verbindungsstruktur. Schickt man Unicast-Daten an die Endpunkte 1 bis 4, so durchqueren die gleichen Daten mehrmals die Verbindungen 1 und 3 (linke Abbildung). Das rechts abgebildete System nutzt die Multicast-Funktion und überträgt die Daten auf jeder Verbindung nur einmal, wobei die Datenverteilung überall dort von der Multicast- Funktion gesteuert wird, wo die Daten logisch kopiert werden müssen.

Implementierung von PCI Express Multicast

Die schnelle und breite Marktdurchdringung von PCI Express führte zu einem breiten Angebot an Bausteinen und Komponenten. Die Spezifikation von PCI Express Multicast wurde so gestaltet, dass sie auf diese installierte Basis aufbaut. Insbesondere wurde bei der Definition darauf geachtet, dass bestehende Root-Komplexe, Endpunkte oder neue „Transaction Layer Packet“- Formate (TLP) keinerlei Hardware- Modifikation erfordern. Unter diesen Randbedingungen wurde PCI Express Multicast als adressgestützte Multicast-Funktion definiert. Dabei werden ein Segment des gemeinsamen PCI-Express-Speicherbereichs und ein einfaches Programmiermodell genutzt, um normale, über PCI Express abgesetzte Datenpakete an mehrere Empfänger zu verteilen.

Diese Pakete sind Transaktionen, die auf Speicher-Schreibzugriffen beruhen. Sie können an mehrere Empfänger in bis zu 64 Multicast-Gruppen (MCGs) versendet werden. Der bisherige Unicast-Verkehr wird realisiert, indem eine MCG nur ein Mitglied enthält. Sobald eine MCG jedoch aus zwei oder mehr Mitgliedern besteht, hat das neue System nur Vorteile. Weil an den „Roots“ aus ompatibilitätsgründen keine Veränderung erfolgen darf, muss man für die Herstellung einer Verbindung zwischen dem Initiator und den MCG-Mitgliedern einen PCI-Express- Switch (oder eine Serie von Switches) verwenden. Jeder beliebige Baustein in der PCI-Express- Hierarchie kann Multicast- Traffic anstoßen, und der Traffic lässt sich an beliebig viele Teilnehmer übertragen, die mit einem multicast-fähigen Switch verbunden sind. Ein multicast- fähiger Switch für jeden Port kann Datenpakete von jedem seiner Ports an alle restlichen übertragen. Root-Strukturen und Endpunkte können die Vorteile aus der Einbindung multicast-fähiger Strukturen nutzen. Dies ist aber ein optionales Merkmal für diese Bausteine. Entsprechend der nicht von der Einbindung der Multicast-Fähigkeit betroffenen System-Enumeration konfiguriert die System-Software den Multicast- Adressraum. Dazu erstellt sie ein „Multicast-Fenster“ im PCI-Express- Speicherbereich, das an einer Basisadresse beginnt (Bild 3).

Ausgehend von der Basisadresse wird das Multicast- Fenster als zusammenhängender Adressbereich angelegt, der sich für jede der bis zu 64 unterstützten MCGs in jeweils gleich große Unterbereiche aufteilen lässt. Es gibt keine technischen Begrenzungen für die Größe des Multicast-Fensters (das heißt, das MulMulticast- Fenster kann bis zu 263 Bytes umfassen). Die Anzahl der Gruppen im Multicast-Fenster lässt sich zwischen 1 und 64 konfigurieren. Bei multicast-fähigen PCI-Express- Switches muss jeder Switch-Port, der Multicast-Daten überträgt oder empfängt, eine multicast-fähige Schaltung in seiner zugeordneten, virtuellen PCIto- PCI-Bridge haben. Im Inneren jeder multicast-fähigen Schaltung sichern identisch konfigurierte Steuerregister die folgenden Informationen: _ die Multicast-Fenster-Basisadresse, _ die Anzahl der MCGs und die MCGFenstergröße.

Zusätzlich enthält jede dieser Multicast- Strukturen einen unabhängig konfigurierten und gesicherten Vektor aus 64 Steuerbits, die den Empfang von TLPs von den MCGs 0 bis 63 einoder ausschalten und damit die Mitgliedschaft jeder PCI-Express-Funktion in jeder der MCGs bestimmen. Ein Lese- und Schreibzugriff auf die Register und Steuerbits ist während des Betriebs jederzeit möglich.

Multicast-Pakete werden an alle Ports verteilt

Die Verbindung und Weiterleitung von Multicast-Paketen unterscheidet sich geringfügig von Unicast-Paketen. Die Funktions-Blockschaltung eines PCISwitches illustriert diese Unterschiede (Bild 4). Nach Empfang eines TLP (Transaction Layer Packet) von der Root-Einheit erkennt die Adress-Decodierung am Eingangsport, dass es sich um ein Multicast-TLP handelt. Genaugenommen wird aus der anfänglichen Transaktion erst hier eine Mehrfachtransaktion. Decodierte, fehlerfreie Multicast-TLPs gelangen dann weiter zum virtuellen PCI-Bus des Switches. Anders als beim Unicast- Traffic (der abhängig davon, ob das TLP auf der Primär- oder auf der Sekundärseite der Bridge empfangen wurde, mit unterschiedlichen Routing- Regeln arbeitet), werden Multicast- TLPs unabhängig davon, ob die Bridge mit einem Upstream- oder Downstream-Port assoziiert ist, symmetrisch weitergeleitet.

Alle mit dem virtuellen PCI-Bus verbundenen Switch-Ports erhalten das Multicast-Paket. Sie überprüfen anschließend die MCG-ID in der Adresse und vergleichen sie mit dem Bit im Multicast-Receive-Enable-Vektor. In diesem Empfangsvektor ist einzeln für jede MCG definiert, ob eine PCIBridge- Funktion das TLP in Richtung auf sein Ziel weiterleiten darf. Damit kann sich jede Bridge-Funktion im Switch gruppenbezogen als Empfänger von Multicast-TLPs anmelden. Sobald eine PCI-to-PCI-Bridge- Funktion innerhalb eines Switches ein Multicast-Datenpaket annimmt, führt sie am Paket eine Ausgangs-Verarbeitungsroutine aus. Die Art der Routine ist abhängig von den Fähigkeiten des mit der Bridge assoziierten Link-Partners im Switch-Port.

Falls der Link- Partner über eine Multicast-Struktur verfügt (wie etwa bei der Übertragung zwischen zwei PCI-Express-Switches), läuft das TLP unverändert zum weiteren Routing weiter. Wie oben bereits erklärt, müssen die PCI-Express- Endpunkte für den Empfang von Multicast- TLPs aber keine Multicast- Strukturen enthalten. Die System-Software muss zur Unterstützung von Endpunkten ohne Multicast-Fähigkeiten sicherstellen, dass sich die Basis- Adressregister des Endpunkts mit einem gewissen Teil des Multicast- Adressbereichs überschneiden, oder der PCI-Express-Switch muss den optional spezifizierten Multicast-Overlay- Mechanismus verwenden. Die Sicherstellung einer Überschneidung zwischen dem Funktions- Adressbereich des Endpunkts und dem Multicast-Adressbereich bedeutet zusätzliche Arbeit für den Systementwickler und erfordert womöglich eine spezielle Code-Basis für jedes Produkt. Um höchste Flexibilität zu erreichen und bereits vorhandene Endpunkte nutzen zu können, muss die Multicast-Overlay-Funktion an jedem Switch-Port implementiert werden. Der Mechanismus der Adress-Overlay- Funktion (Bild 5) lässt sich für ein Remapping der Adresse eines empfangenen Multicast-TLP aus dem Multicast- Fenster zum Basis-Adressregister (BAR) nutzen. Das Adressen- Overlay wird von den Switch-Ports ausgeführt. Man kann an jedem Switch-Port einen anderen Adress- Overlay-Wert konfigurieren und damit ein unabhängiges Mapping zu jedem BAR-Fenster ermöglichen, das mit einem Endpunkt assoziiert ist.

Eine Umwandlung zwischen 32-bitund 64-bit-Adressen wird unterstützt (z.B. kann die Multicast-Region oberhalb der 4-Gbyte-Schwelle und das Basis-Adressregister des Endpunkts unterhalb der 4-Gbyte-Schwelle liegen, oder umgekehrt). Die neueste PCI-Express-Erweiterung um Multicast-Funktionen bietet die nötigen Fähigkeiten für eine optimierte Nutzung von System-Ressourcen, eine verbesserte Leistung durch verkürzte System-Latenzen sowie eine effiziente und kohärente Datenübertragung zwischen Peers in Embeddedund Kommunikationssystemen mit Multi-Root-Architektur. Dabei achtete man sorgfältig darauf, keine Probleme für existierende PCI-Express-Umgebungen oder Benutzergruppen zu erzeugen. Die erweiterten Funktionen erfordern keine Veränderungen an Root- oder Endpunkt-Hardware und auch keine neuen TLP-Formate. Die adressgestützte PCI-Express-Multicast- Implementierung mit ihrem vereinfachten Programmierungmodell wird innerhalb eines PCI-Switches aktiviert und bietet weit mehr Funktionen und Flexibilität als bei früheren, proprietären Implementierungen wie zum Beispiel Dualcasting.