Zertifizierung von Multi-Core-Systemen Sicher auf mehreren Kernen

Mehrkernsystem oder Einkernsystem?
Mehrkernsystem oder Einkernsystem?

Kann ein Mehrkernsystem dasselbe Maß an Determinismus erreichen wie ein Einkernsystem? – Diese Frage ist für sicherheitsrelevante ¬Systeme essenziell, weil sie einen wichtigen Aspekt der Zertfizierung berührt. Eine Analyse der Hardware- und Software-Interferenzkanäle liefert Antworten.

Die Separation mittels eines Hypervisors ist eine effektive Methode, um ein zertifizierbares Sicherheitssystem zu erstellen. Die Luftfahrtelektronik hat diese Idee übernommen und setzt dieses Konzept mit der Richtlinie ARINC 653 für Software-basierte Sicherheitssysteme um. In der Automobilindustrie wird dasselbe Konzept angewandt, um die Sicherheit von Fahrerassistenzsystemen zu gewährleisten und mehrere Steuergeräte in einem mehrfach partitionierten System (ECU-Konsolidierung) zu kombinieren. In der Bahnindustrie verwenden Sicherheitssysteme wie Communication-Based Train Control (CBTC) und Software-gesteuerte Stellwerke eine Separation mittels Hypervisor, um SIL4-Sicherheit auf Software-Basis zu gewährleisten. Ein robuster Hypervisor garantiert eine rückwirkungsfreie Trennung, sodass Anwendungen mit mehreren Kritikalitätsstufen auf einer Hardware-Plattform konsolidiert werden können. Sicherheitsfunktionen, Informationsdienste und Komfortfunktionen können gleichzeitig mit einer Hardware bereitgestellt werden, wodurch Größe, Gewicht und Leistungsverbrauch (SWAP) optimiert werden. Parallel wächst die Anforderung an die Rechenleistung.

Der traditionelle Ansatz zur Erhöhung der Rechenleistung war, die Taktfrequenz des Prozessors zu erhöhen, durch Befehls-Pipelines und spekulative Programmausführungen die pseudo-parallele Verarbeitung auf Befehlsebene zu steigern sowie die Cache-Größe und Anzahl der Cache-Ebenen zu erhöhen. Mit der heutigen Technologie hat dieser Ansatz seine Grenzen erreicht. Die Erhöhung der Prozessorfrequenz führt zu einem unverhältnismäßig hohen Stromverbrauch und steigert damit entsprechend die Verlustleistung. Chip-interne und -externe Übersprecher, Signalverzögerungen und Reflexionen sind weitere Probleme der höheren Taktfrequenzen. Die bestehende Parallelität und Abhängigkeiten auf der Code-Ebene verhindern zudem eine weitere Leistungssteigerung durch Parallelausführung auf Befehlsebene. Um die Prozessorleistung weiter zu erhöhen, ist die Chip-Industrie bei Hochleistungsprozessoren auf das Mehrkernkonzept (Multi-Core) umgestiegen.

Für die Integration von Software-Diensten mit unterschiedlicher Funktionalität, Robustheit und Sicherheit sowie unterschiedlichen Sicherheitsanforderungen ist eine eingebettete Plattform erforderlich, die

  • ausreichend Prozessorleistung, Speicherressourcen und E/A-Bandbreite bereitstellt,
  • ausreichende Zuverlässigkeit bietet,
  • ein deterministisches und vorhersagbares Echtzeitverhalten besitzt,
  • eine sichere und stabile Partitionierung der Ressourcen und Prozessorzeit unterstützt und
  • nach den geltenden Sicherheitsstandards zertifizierbar ist.

Der Prozessor, das unbekannte Wesen

Historisch gesehen verwendeten hochkritische Sicherheitsplattformen typischerweise Einkernprozessoren, die meist eine RISC-Architektur mit einfacher Cache- und Pipeline-Architektur haben. Design-Unterlagen stehen in einem gewissen Ausmaß zur Verfügung, um den Zertifizierungsvorgang zu unterstützen. Aufgrund ihrer häufigen Verwendung gibt es zahlreiche Informationen über den bewährten Betrieb, was das Risiko unerkannter systematischer Fehler reduziert. Zertifizierungsstellen haben Sicherheitsplattformen auf Basis dieser Prozessoren für Anwendungen auf höchster Kritikalitätsstufe schon mehrfach zertifiziert (z.B. DO-178B DAL A oder EN 50128 SIL4). Mehrkernprozessoren als typische Nachfolger hochentwickelter Einkernprozessoren übernehmen die Prinzipien wie komplexe Befehls-Pipelines, Sprungvorhersagen und mehrstufige Caches. Zudem benötigen sie Cache-Kohärenz-Module und Cross-Connects, um die Kerne miteinander zu verbinden. Mehrkernprozessoren sind die modernsten Entwicklungen der Chip-Technologie. Chip-Hersteller tun sich deshalb schwer, detaillierte Informationen über das Design der Chips bereitzustellen, die zur Zertifizierung der Plattform erforderlich sind.

Ein- und Mehrkernprozessoren verwenden dieselben Verfahren für den Ressourcenschutz. Beide wenden das Konzept der Privilege Levels (Supervisor and User) an und verfügen über eine Memory Management Unit (MMU), um den Zugriff auf privilegierte Befehls- und Prozessorregister, physischen Speicher und im Speicher abgebildete E/A-Geräte zu kontrollieren. Im Hinblick auf die Zertifizierung der Ressourcen-Partitionierung besteht kein wesentlicher Unterschied zwischen Ein- und Mehrkernplattformen.

Die Zeitpartitionierung ist bei einem System auf Mehrkernbasis komplizierter. Bei einem Einkernprozessor gibt es immer nur einen einzelnen Thread. Dieser Thread kann durch ein asynchrones Ereignis unterbrochen werden. In diesem Fall wird die Kontrolle an den Handler übergeben. Dabei gibt es keine konkurrierende Ausführung. Eine Ausnahme kann ein E/A-Gerät sein, das Direct Memory Access (DMA) nutzt. Auf einem Mehrkernprozessor stellt die parallele Ausführung den Normalfall dar, was zu Interferenzen zwischen den Anwendungen führen kann, die auf den verschiedenen Kernen ausgeführt werden.

Interferenzen trotz getrennter Prozessorkerne

Die Ausführung von Anwendungen, die auf den verschiedenen Kernen eines Mehrkernprozessors ausgeführt werden, erfolgt nicht unabhängig voneinander. Auch wenn es zwischen diesen Anwendungen keinen expliziten Datenfluss oder Steuerungen gibt, besteht eine Kopplung auf Plattformebene, da Plattformressourcen implizit geteilt werden. Eine Plattformeigenschaft, die zu Interferenzen zwischen unabhängigen Anwendungen führen kann, nennt sich Hardware-Interferenzkanäle. Die Analyse von Hardware-Interferenzkanälen erfordert eine tiefgreifende Kenntnis der Plattform-Architektur einschließlich der Prozessor-Strukturen.

Die in dieser Abhandlung analysierten Mehrkernprozessoren verwenden ein Unified Memory Model, was bedeutet, dass sich alle Kerne denselben physischen Adressraum teilen. Dadurch wird die Plattform vereinfacht, da nur ein externer Prozessorbus erforderlich ist und die Kommunikation zwischen den Kernen über den gemeinsamen physischen Speicher erfolgt. Bild 1 zeigt die typische Architektur einer solchen Plattform. Einige der Hardware-Komponenten, wie der Speichercontroller, der PCI-Controller oder andere E/A-Geräte, können mit dem Prozessor integriert sein, um ein Multiprozessor-Ein-Chip-System (MPSoC) zu bilden.
Es wird angenommen, dass Prozessorkerne unabhängig voneinander arbeiten, solange sie nicht auf gemeinsame Ressourcen zugreifen oder Inter-Processor Interrupts (IPIs) verwenden. IPIs werden zusammen mit den Software-Interferenzkanälen angegangen, da sie aktiv durch die Software ausgelöst werden müssen.

Zwei verschiedene Aspekte der Cache-Architektur können Interferenzkanäle zwischen Prozessoren darstellen: die Cache-Kohärenz und der gemeinsame Cache. Das Speichersystem kann als hierarchisches System angesehen werden: Auf der untersten Stufe befindet sich der Prozessorkern, über dem sich eine oder mehrere Cache-Ebenen befinden und an der Spitze steht der Speicher. Der Cache, der direkt mit dem Prozessor verbunden ist, ist der L1-Cache, auf welchen der L2-Cache folgt usw. Die höchste Cache-Ebene ist mit dem externen Bus und somit mit dem Hauptspeicher verbunden. Eine Datenabfrage, die auf einer bestimmten Ebene nicht erfüllt werden kann, wird auf die nächsthöhere Ebene übertragen. Mit zunehmender Cache-Ebene nimmt auch die Cache-Größe zu. Es erhöht sich jedoch auch die Latenzzeit für jeden Speicherzugriff.