Können wir Linux in etwas schnellerem als RAM laufen lassen?

4536
Ziggy

Dies ist vielleicht eine dumme Frage und kann das Ergebnis eines Missverständnisses sein. Ich studiere gerade CPU's und insbesondere das Gedächtnis. Ich habe gerade gelesen, wie viel schneller SRAM ist als DRAM, aber teurer ist. SRAM ist sehr teuer: Ich kaufte etwas und fand eine batteriebetriebene SRAM-Karte mit 16 MB für rund 400 Dollar.

Kürzlich hat ein Freund erwähnt, dass er Welpen-Linux im RAM betrieben hat, und dass es schnell geht. Mir ist jedoch aufgefallen, dass winziger Core-Linux noch kleiner sein kann ... so klein wie 8 MB! Das brachte mich zum Nachdenken: Können wir Linux in SRAM betreiben? Ist diese Frage sogar wohlgeformt?

Das Googeln dieser Frage erwies sich als unwirksam, stellte aber noch weitere Fragen. Könnte man Linux in L3 Cache laufen lassen? Intel Core i7 kann einen L3-Cache aufweisen, der groß genug ist, um die 8 MB zu verwenden ... aber mache ich einen kategorialen Fehler? Was ist der Unterschied zwischen diesem und eingebetteten Linux?

Das ist die Frage: Können wir Linux in SRAM oder L3 Cache betreiben? Gibt es etwas schnelleres? Wie schnell können wir Linux haben?

z.

20
Eingebettete Linux werden häufig auf RAM oder nichtflüchtigem Speicher ausgeführt. Eingebettete Linux-Versionen werden häufig nur für bestimmte Hardware verwendet oder verwenden weniger verbreitete Kernel-Optionen wie niedrige Latenzzeiten Journeyman Geek vor 11 Jahren 3
Ich frage mich, ob es eine praktische Verwendung für diese Frage gibt. Robert Niestroj vor 11 Jahren 2
+1 für die Verwendung von "linux" als Verb (im letzten Satz)! Vorac vor 11 Jahren 4

6 Antworten auf die Frage

20
Hennes

Linux oder andere Betriebssysteme wissen nicht, wie der Arbeitsspeicher arbeitet. Solange der Speichercontroller ordnungsgemäß konfiguriert ist (z. B. für Nicht-SRAM eingestellte Aktualisierungsraten), ist es dem Betriebssystem egal, ob es auf einem dynamischen dynamischen Speicher (einfacher RAM), einem schnellen Seitenmodus-RAM (FP-RAM, vom C64-ish) läuft times), Erweiterter Datenausgangsmodus-RAM (EDO), synchroner RAM (SDRAM), beliebige SDRAMS mit doppelter Datenrate (DDR 1/2/3).

Alle unterstützen das Lesen und Schreiben an beliebigen Orten. Alles wird funktionieren.

Jetzt ist der Cache etwas anders. Sie müssen nicht darauf schreiben, damit sich der Inhalt ändert. Das wird im Weg stehen. Trotzdem ist es etwas brauchbar. Ich weiß, dass Coreboot den Cache während des Startvorgangs als eine Art Speicher verwendet, bevor der Speichercontroller ordnungsgemäß konfiguriert ist. (Einzelheiten finden Sie in den Videos zu den Coreboot-Gesprächen während der FOSDEM 2011).

Theoretisch könnte man es ja verwenden.

ABER : Für praktische Aufgaben wird ein System mit 1 GB „normalem“ „Medium Speed“ -Speicher eine viel bessere Leistung erbringen als mit nur wenigen MB superschnellen Speicher. Was bedeutet, Sie haben drei Möglichkeiten:

  1. Baue Dinge auf die normale "billige" Art und Weise. Wenn Sie mehr Geschwindigkeit benötigen, fügen Sie ein paar Dutzend zusätzliche Computer hinzu (alle mit "langsamem" Speicher).
  2. Oder bauen Sie einen einzelnen Computer mit einem Dutzendfachen Preis und deutlich weniger als einem Dutzendfachen der Leistung.

Außer in sehr seltenen Fällen ist der letzte nicht sinnvoll.

Many CPU's support a "cache-as-RAM" mode through the CPU's model specific registers (MSRs). Also note that SRAM consumes more power than DRAM and that is also a design factor. If the CPU's cache was big enough or the kernel small enough you could enable this cache-as-RAM mode and keep it executing entirely in SRAM on the CPU. You would have a limited amount of RAM to run programs, etc. though. because AFAIK cache-as-RAM and normal mode will not work simultaneously. I could be wrong about that though. Even if it did, most of a CPU's speed these days is due to use the L2, L3 cache. LawrenceC vor 11 Jahren 5
@Hennes, kümmert sich Linux nur um (zugeordnete) Speicheradressen? Alvin Wong vor 11 Jahren 0
SDRAM ist synchroner D- (Named) RAM, während SRAM statischer RAM ist. Ich weiß nicht, auf welche Sie sich im ersten Absatz beziehen wollten, und ich habe keine Vertretung für "triviale" Bearbeitungen, aber vielleicht könnten Sie das korrigieren? Ansonsten gute Antwort. a CVn vor 11 Jahren 0
Ich habe nichts dagegen zu klären, aber ich bin mir nicht sicher, was Sie klarstellen wollen. Können Sie das in einem Kommentar hinzufügen und ich werde es bearbeiten. Hennes vor 11 Jahren 0
Als ich diesen Kommentar zum ersten Mal las, sah ich: "Linux oder andere Betriebssysteme wissen nicht, wie der Arbeitsspeicher funktioniert." Ihr Zusammenbruch ist gut: Ich glaube, ich hatte keine Illusionen, dass dies "besser" wäre. Ich habe mich nur gefragt, ob es möglich ist. Ziggy vor 11 Jahren 0
8
MSalters

Ja, das kannst du, und so wird es schon automatisch gemacht. Die am häufigsten verwendeten Teile des RAM werden in den Cache kopiert. Wenn Ihre gesamte RAM-Nutzung (wie Sie annehmen) kleiner als Ihre Cache-Größe ist, hat der vorhandene Caching-Mechanismus alles in den RAM kopiert.

Der einzige Zeitpunkt, zu dem der Cache in den normalen Arbeitsspeicher zurückkopiert würde, ist, wenn der PC in den S3-Schlafmodus wechselt. Dies ist notwendig, da die Caches im S3-Modus heruntergefahren werden.

Nicht alle können / werden kopiert. Für Intel / x86-Cache-Struktur: Wenn ich einen 256-KB-Cache und einen 1024-KB-Cache habe, kann ich die Adresse 0 lesen. Sie wird im Cache an Position 0 gespeichert. Ich kann dann die Adresse 1 lesen, und sie wird im Cache an Position 1 gespeichert Wenn ich jedoch die Adresse von (256Kib + 1) auslese, wird diese auch an Adresse 1 im Cache gespeichert. Der Cache verwendet einen zusätzlichen (Tag-) SRAM, um anzuzeigen, welcher der beiden gespeichert ist. Dies bedeutet, dass das Lesen von Vielfachen der Cache-Größe nicht gut funktioniert. (Beachten Sie, dass dies selten vorkommt und normalerweise ignoriert werden kann). Hennes vor 11 Jahren 1
Das ist aufschlussreich! Warum sollte ich das, was ich für wichtig halte, ungeschickt in den L3-Cache stopfen, wenn ich könnte, dass eine Armee von Genies das Optimum bestimmt und eine CPU für das Optimalprogramm programmiert. Recht? Ziggy vor 11 Jahren 0
3
Marc Lehmann

Bei vielen CPUs kann der Cache als RAM verwendet werden. Zum Beispiel können die meisten neueren x86-CPUs bestimmte Regionen als Rückschreiben ohne Ausfüllen von Lesevorgängen über MTRRs konfigurieren. Dies kann verwendet werden, um einen Bereich des Adressraums als effektiv als Cache-as-RAM zu bezeichnen.

Ob dies von Vorteil ist, ist eine andere Frage - es würde den Kernel im RAM sperren, gleichzeitig aber die effektive Größe des Caches reduzieren. Es kann auch Nebenwirkungen geben (z. B. das Zwischenspeichern für den Rest des Systems deaktivieren), die dies viel langsamer machen.

1
Phil Hannent

"Können wir Linux in L3 Cache ausführen?"

Nein, Cache dient dazu, Programmdaten und Anweisungen bereit zu halten, wenn der Prozessor sie benötigt. Sie finden das Betriebssystem trotzdem im Cache, da es ständig verwendet wird. Das Laden des gesamten Betriebssystems in den Cache ist nicht effizient, da Sie nicht jeden Codepfad im Kernel gleichzeitig verwenden.

"Können wir Linux in SRAM betreiben?"

Sicherlich können Sie batteriegepuffertes SRAM als Bootpartition verwenden. Anschließend können Sie das eingebettete Flag für die Ausführung verwenden. Dies kann zu schnelleren Startzeiten und etwas schnelleren Vorgängen führen. Ein Hauptfaktor ist jedoch die Bandbreite zwischen dem L3-Cache und dem Kernel (Boot-Laufwerk oder RAM).

"Gibt es etwas schnelleres? Wie schnell können wir Linux !?"

Im Allgemeinen arbeiten Hardwarehersteller und Betriebssystementwickler daran, die Verarbeitung so schnell wie möglich zu gestalten. Ihre Frage ist jedoch sehr allgemein: Möchten Sie die Bootzeiten beschleunigen, den Dateisystemzugriff optimieren, Berechnungen beschleunigen oder etwas anderes? Wenn Sie eine spezifischere Frage haben, können Sie den Engpass auf jeden Fall finden und entfernen. Ihr SRAM-Laufwerk würde Ihren Startvorgang sicherlich beschleunigen. Eine GUI in 3 Sekunden zu erreichen, wäre sehr cool zu sehen.

1
Rich Homolka

In den 486er Jahren gab es Maschinen, auf denen der gesamte Arbeitsspeicher aus SRAM bestand. Dies ist zurück, als 8 MB eine Menge waren, aber Ihren Einschränkungen zu entsprechen scheint. Ich bin sicher, dass 8 MB SRAM jetzt viel billiger sind als damals.

Sie könnten Linux also in SRAM ausführen, wenn die Maschine auf diese Weise erstellt wurde. Es ist kein theoretisches. Es wurde getan.

Aber nicht im Cache. Cache ist anders verdrahtet und vor allem anders adressiert. Sie können es nicht gleich ansprechen. Chunks werden unterschiedlich abgebildet, nicht als fortlaufender Block. Und der Inhalt ist nicht unbedingt das, was Sie auf der Festplatte sehen - neuere Intel-Chips machen eine Art Just-in-Time-Kompilierung (eher eine CISC => RISC-Mikro-Op-Umcodierung), bei der Mikro-Ops die Dinge sind das im Cache landen. Kurz gesagt, was sich im Cache befindet, ist nicht Ihr Programm, sondern eine veränderte Ansicht, sodass Sie es nicht mehr als Speicherdarstellung Ihres Programms verwenden können.

Die Frage ist warum. Anders als "weil ich kann" gibt es dafür keinen Grund. Das Cache-System bietet Ihnen den größten Geschwindigkeitsvorteil bei deutlich geringeren Kosten. Und denken Sie daran, dass die Kosten nicht nur Dollar sind ... SRAM benötigt mehr Transistoren, was mehr Strom bedeutet.

1
Max

"Können wir Linux in L3 Cache ausführen?"

Nein, dies ist nicht möglich, da der Cache-Speicher nicht direkt / linear adressiert ist.
Aufgrund der Art und Weise, wie der Cache-Speicher entworfen wird, kann die Registrierung des CPU-Programmzählers (IP) nicht auf einen Ort im Cache-Speicher zeigen.

Ein CPU-Cache hat seine eigene "Assoziativität", und diese Assoziativität definiert, wie der "normale" Speicher dem Cache-Speicher "zugeordnet" wird. Dieses Merkmal des Cache-Speichers ist einer der Gründe, warum die Cache-Speicher so schnell sind.