Speicherhierarchie - Memory hierarchy

Diagramm der Computerspeicherhierarchie

In Computer - Architektur , die Speicherhierarchie trennt Computerspeicher in eine Hierarchie auf Reaktionszeit basiert. Da Reaktionszeit, Komplexität und Kapazität zusammenhängen, können die Ebenen auch durch ihre Leistung und Steuerungstechnologien unterschieden werden. Die Speicherhierarchie beeinflusst die Leistung beim Entwurf von Computerarchitekturen, Algorithmusvorhersagen und Programmierkonstrukten auf niedrigerer Ebene , die die Referenzlokalität beinhalten .

Ein Design für hohe Leistung erfordert die Berücksichtigung der Einschränkungen der Speicherhierarchie, dh der Größe und Fähigkeiten jeder Komponente. Jede der verschiedenen Komponenten kann als Teil einer Hierarchie von Speichern (m 1 , m 2 , ..., m n ) betrachtet werden, in der jedes Mitglied m i typischerweise kleiner und schneller als das nächsthöhere Mitglied m i+1 von ist Die Hierarchie. Um das Warten durch höhere Niveaus zu begrenzen, reagiert ein niedrigeres Niveau, indem es einen Puffer füllt und dann signalisiert, dass die Übertragung aktiviert wird.

Es gibt vier Hauptspeicherebenen.

  • InternProzessorregister und Cache .
  • Main – der System- RAM und die Controller-Karten.
  • Online-Massenspeicher – Sekundärspeicher.
  • Offline-Massenspeicher – Tertiär- und Offline-Speicher.

Dies ist eine allgemeine Speicherhierarchie-Strukturierung. Viele andere Strukturen sind nützlich. Zum Beispiel kann ein Paging-Algorithmus beim Entwerfen einer Computerarchitektur als eine Ebene für virtuellen Speicher betrachtet werden , und man kann eine Ebene von Nearline-Speicher zwischen Online- und Offline-Speicher einschließen .

Eigenschaften der Technologien in der Speicherhierarchie

  • Das Hinzufügen von Komplexität verlangsamt die Speicherhierarchie .
  • Die CMOx-Speichertechnologie dehnt den Flash-Speicherplatz in der Speicherhierarchie aus
  • Eine der wichtigsten Möglichkeiten, die Systemleistung zu steigern, besteht darin, zu minimieren, wie weit man in der Speicherhierarchie nach unten gehen muss, um Daten zu manipulieren.
  • Latenz und Bandbreite sind zwei mit Caches verbundene Metriken. Keiner von ihnen ist einheitlich, sondern spezifisch für eine bestimmte Komponente der Speicherhierarchie.
  • Es ist schwierig, vorherzusagen, wo sich die Daten in der Speicherhierarchie befinden.
  • ...die Position in der Speicherhierarchie bestimmt die Zeit, die für das Vorabrufen erforderlich ist.

Beispiele

Speicherhierarchie eines AMD Bulldozer Servers.

Die Anzahl der Ebenen in der Speicherhierarchie und die Leistung auf jeder Ebene hat sich im Laufe der Zeit erhöht. Auch die Art des Speichers oder der Speicherkomponenten ändert sich historisch. Die Speicherhierarchie eines Intel Haswell Mobile Prozessors um das Jahr 2013 lautet beispielsweise:

  • Prozessorregister – schnellstmöglicher Zugriff (normalerweise 1 CPU-Zyklus). Ein paar tausend Byte groß
  • Zwischenspeicher
    • Level 0 (L0) Micro Operations Cache – 6.144 Byte (6 KiB) groß
    • Level 1 (L1) Instruction Cache – 128 KiB groß
    • Level 1 (L1) Datencache – 128 KiB groß. Die beste Zugriffsgeschwindigkeit beträgt etwa 700 GB /s
    • Level 2 (L2) Anweisung und Daten (gemeinsam) – 1 MiB groß. Die beste Zugriffsgeschwindigkeit liegt bei etwa 200 GB/s
    • Level 3 (L3) Gemeinsamer Cache – 6 MiB groß. Die beste Zugriffsgeschwindigkeit liegt bei etwa 100 GB/s
    • Level 4 (L4) Shared Cache – 128 MiB groß. Die beste Zugriffsgeschwindigkeit liegt bei etwa 40 GB/s
  • Hauptspeicher ( Primärspeicher ) – GiB Größe. Die beste Zugriffsgeschwindigkeit liegt bei etwa 10 GB/s. Bei einer NUMA- Maschine sind die Zugriffszeiten möglicherweise nicht einheitlich
  • Festplattenspeicher ( Sekundärspeicher ) – Terabyte groß. Ab 2017 beträgt die beste Zugriffsgeschwindigkeit von einem Consumer- Solid-State-Laufwerk etwa 2000 MB/s
  • Nearline-Speicher ( Tertiärspeicher ) – Bis zu Exabyte groß. Ab 2013 beträgt die beste Zugriffsgeschwindigkeit etwa 160 MB/s
  • Offline-Speicherung

Die unteren Hierarchieebenen – von den Datenträgern abwärts – werden auch als Tiered Storage bezeichnet . Die formale Unterscheidung zwischen Online-, Nearline- und Offline-Speicher ist:

  • Für I/O steht ab sofort Online-Speicher zur Verfügung.
  • Nearline-Speicher ist nicht sofort verfügbar, kann aber ohne menschliches Zutun schnell online gestellt werden.
  • Offline-Speicher ist nicht sofort verfügbar und erfordert einige menschliche Eingriffe, um online zu gehen.

Beispielsweise sind immer eingeschaltete rotierende Festplatten online, während rotierende Festplatten, die heruntergefahren werden, wie etwa MAID (Massive Array of Idle Disk ) Nearline sind. Wechselmedien wie Bandkassetten, die wie in einer Bandbibliothek automatisch geladen werden können , sind Nearline, während Kassetten, die manuell geladen werden müssen, offline sind.

Die meisten modernen CPUs sind so schnell, dass bei den meisten Programm-Workloads der Flaschenhals die Referenzlokalität von Speicherzugriffen und die Effizienz des Cachings und der Speicherübertragung zwischen verschiedenen Hierarchieebenen ist. Infolgedessen verbringt die CPU einen Großteil ihrer Zeit im Leerlauf und wartet darauf, dass die Speicher-E/A abgeschlossen ist. Dies wird manchmal als Platzkosten bezeichnet , da ein größeres Speicherobjekt wahrscheinlich eine kleine/schnelle Ebene überläuft und die Verwendung einer größeren/langsameren Ebene erfordert. Die daraus resultierende Belastung des Speicherverbrauchs wird als Druck bezeichnet (bzw. Registerdruck , Cache-Druck und (Haupt-) Speicherdruck ). Begriffe für Daten, die auf einer höheren Ebene fehlen und von einer niedrigeren Ebene geholt werden müssen, sind jeweils: Registerüberlauf (aufgrund von Registerdruck : Register zum Cache), Cache-Miss (Cache zum Hauptspeicher) und (harter) Seitenfehler (Hauptspeicher auf Platte).

Moderne Programmiersprachen gehen hauptsächlich von zwei Speicherebenen aus, Hauptspeicher und Plattenspeicher, obwohl in Assemblersprache und Inline-Assembler in Sprachen wie C direkt auf Register zugegriffen werden kann. Die optimale Nutzung der Speicherhierarchie erfordert die Zusammenarbeit von Programmierern, Hardware und Compilern (sowie die zugrunde liegende Unterstützung durch das Betriebssystem):

  • Programmierer sind für das Verschieben von Daten zwischen Festplatte und Speicher durch Datei-I/O verantwortlich.
  • Die Hardware ist für das Verschieben von Daten zwischen Speicher und Caches verantwortlich.
  • Optimierende Compiler sind dafür verantwortlich, Code zu generieren, der, wenn er ausgeführt wird, die Hardware veranlasst, Caches und Register effizient zu verwenden.

Viele Programmierer gehen von einer Speicherebene aus. Dies funktioniert einwandfrei, bis die Anwendung auf eine Leistungsgrenze stößt. Anschließend wird die Speicherhierarchie beim Code-Refactoring bewertet .

Siehe auch

Verweise