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

21

Dies ist vielleicht eine dumme Frage und kann das Ergebnis eines Missverständnisses sein. Ich lerne gerade die CPU's und insbesondere das Gedächtnis. Ich habe gerade gelesen, wie viel schneller SRAM ist als DRAM, aber teurer. SRAM ist sehr teuer: Ich habe ein bisschen eingekauft und eine batteriebetriebene SRAM-Karte mit 16 MB für etwa 400 US-Dollar gefunden.

Kürzlich erwähnte ein Freund, dass er Welpen-Linux im RAM laufen ließ und dass es schnell ist. Mir ist jedoch aufgefallen, dass winzige Core-Linux-Dateien sogar noch kleiner sein können ... bis zu 8 MB! Das brachte mich zum Nachdenken: Können wir Linux in SRAM ausführen? Ist diese Frage überhaupt wohlgeformt?

Diese Frage zu googeln erwies sich als unwirksam, warf jedoch noch weitere Fragen auf. Könnte man Linux im L3 Cache laufen lassen? Intel Core i7 kann einen L3-Cache haben, der groß genug für die 8 MB ist ... aber mache ich einen kategorischen Fehler? Was ist der Unterschied zwischen diesem und "eingebettetem" Linux?

Das ist die Frage: Können wir Linux in SRAM oder L3 Cache ausführen? Gibt es etwas schnelleres? Wie schnell können wir Linux!?

z.

Ziggy
quelle
3
Eingebettete Linuxe werden oft auf RAM oder nichtflüchtigem Speicher ausgeführt. Eingebettete Linux-Systeme werden oftmals nur für die Ausführung auf einer bestimmten Hardware reduziert oder verwenden einige weniger gebräuchliche Kernel-Optionen wie eine geringe Latenz
Journeyman Geek
2
Ich frage mich, ob es irgendeinen praktischen Nutzen für diese Frage gibt.
Robert Niestroj
4
+1 für die Verwendung von "Linux" als Verb (im letzten Satz)!
Vorac

Antworten:

20

Linux oder ein anderes Betriebssystem weiß nicht, wie der Arbeitsspeicher funktioniert. Solange der Speichercontroller ordnungsgemäß konfiguriert ist (z. B. für Nicht-SRAM eingestellte Bildwiederholraten), ist es dem Betriebssystem egal, ob er auf normalem dynamischen Speicher (normalem RAM), schnellem Seitenmodus-RAM (FP-RAM) vom C64-ish ausgeführt wird mal), Extended Data Out Mode RAM (EDO), Synchronous RAM (SDRAM), beliebige der doppelten Datenrate SDRAMS (DDR 1/2/3), was auch immer.

Alle diese unterstützen das Lesen und Schreiben von zufälligen Stellen. Alles wird funktionieren.

Jetzt ist der Cache etwas anders. Sie müssen nicht darauf schreiben, damit sich der Inhalt ändert. Das wird in die Quere kommen. 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. (Weitere Informationen finden Sie in den Videos zu den Coreboot-Gesprächen während der FOSDEM 2011).

Theoretisch könnte man es also verwenden.

ABER : Für praktische Aufgaben ist ein System mit 1 GB "normalem" "mittlerer Geschwindigkeit" wesentlich leistungsfähiger als mit nur wenigen MB superschnellem Speicher. Das heißt, Sie haben drei Möglichkeiten:

  1. Baue die Dinge auf die normale "billige" 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 dem Dutzendfachen des Preises und mit dem Dutzendfachen der Leistung.

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

Hennes
quelle
6
Viele CPUs unterstützen einen "Cache-as-RAM" -Modus über die modellspezifischen Register (MSRs) der CPU. Beachten Sie auch, dass der SRAM mehr Strom verbraucht als der DRAM, und dies ist auch ein Konstruktionsfaktor. Wenn der Cache der CPU groß genug oder der Kernel klein genug ist, können Sie diesen Cache-as-RAM-Modus aktivieren und ihn vollständig im SRAM auf der CPU ausführen lassen. Sie hätten jedoch eine begrenzte Menge an RAM, um Programme usw. auszuführen. weil der AFAIK-Cache als RAM und der normale Modus nicht gleichzeitig funktionieren. Darin könnte ich mich jedoch irren. Selbst wenn dies der Fall ist, wird der Großteil der CPU-Geschwindigkeit heutzutage vom L2-, L3-Cache beansprucht.
LawrenceC
@Hennes kümmert sich Linux nur um (zugeordnete) Speicheradressen?
Alvin Wong
SDRAM ist ein synchroner D (dynamischer) RAM, wohingegen SRAM ein statischer RAM ist. Ich weiß nicht, auf welchen Sie sich im ersten Absatz beziehen wollten, und ich habe nicht den Repräsentanten, der "triviale" Änderungen vornimmt, aber vielleicht können Sie das beheben? Ansonsten gute Antwort.
ein Lebenslauf vom
Ich habe nichts dagegen zu klären, aber ich bin mir nicht sicher, was Sie geklärt haben wollen. Kannst du das in einem Kommentar hinzufügen und ich werde es bearbeiten.
Hennes
Als ich diesen Kommentar zum ersten Mal las, sah ich: "Linux oder ein anderes Betriebssystem stirbt, ohne zu wissen, wie der RAM funktioniert." Ihre Aufteilung ist gut: Ich glaube, ich hatte keine Illusionen, dass dies "besser" wäre. Ich habe mich nur gefragt, ob das möglich ist.
Ziggy
8

Ja, das können Sie, und das ist in der Tat so, wie es bereits automatisch gemacht wird. Die am häufigsten verwendeten Teile des Arbeitsspeichers werden in den Cache kopiert. Wenn Ihre gesamte RAM-Auslastung geringer ist als Ihre Cache-Größe (wie Sie annehmen), hat der vorhandene Caching-Mechanismus alles im RAM kopiert.

Der Cache wird dann nur dann wieder in den normalen Arbeitsspeicher kopiert, wenn der PC in den S3-Ruhemodus wechselt. Dies ist erforderlich, da die Caches im S3-Modus heruntergefahren werden.

MSalters
quelle
1
Nicht alle können / werden kopiert. Für Intel / x86-Cache-Struktur: Wenn ich 256 KB Cache und 1024 KB Cache habe, kann ich die Adresse 0 lesen. Sie wird im Cache an Position 0 gespeichert. Dann kann ich die Adresse 1 lesen und sie wird im Cache an Position 1 gespeichert Wenn ich jedoch die Adresse von (256Kib + 1) lese, 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 Cachegröße nicht gut funktioniert. (Beachten Sie, dass dies selten vorkommt und normalerweise ignoriert werden kann.)
Hennes
Das ist aufschlussreich! Warum sollte ich ungeschickt das, was ich für wichtig halte, in den L3-Cache packen, wenn ich einer Armee von Genies überlassen könnte, das Optimale zu bestimmen und eine CPU zu programmieren, die das Optimale macht? Recht?
Ziggy
3

Bei vielen CPUs kann der Cache als RAM verwendet werden. Zum Beispiel können die meisten neueren x86-CPUs bestimmte Regionen als Rückschreibe mit No-Fill-On-Reads über MTRRs konfigurieren. Dies kann verwendet werden, um einen Bereich des Adressraums als Cache-as-RAM zu kennzeichnen.

Ob dies von Vorteil wäre, ist eine andere Frage - es würde den Kernel im RAM sperren, gleichzeitig aber die effektive Größe des Caches verringern. Es kann auch Nebenwirkungen geben (z. B. das Deaktivieren des Cachings für den Rest des Systems), die dies erheblich verlangsamen.

Marc Lehmann
quelle
2

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

Nein , dies ist nicht möglich, da der Cache-Speicher nicht direkt / linear adressiert wird.
Aufgrund der Art und Weise, wie der Cache-Speicher ausgelegt ist, kann die IP-Registrierung (CPU Program Counter) nicht auf einen Speicherort im Cache-Speicher verweisen.

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

Max
quelle
1

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

Nein, Cache ist für eine bestimmte Aufgabe vorgesehen, um Programmdaten und -anweisungen bereit zu halten, wenn der Prozessor sie benötigt. Sie finden das Betriebssystem ohnehin im Cache, da es ständig verwendet wird. Das Laden des gesamten Betriebssystems in den Cache ist nicht effizient, da nicht alle Codepfade im Kernel gleichzeitig verwendet werden.

"Können wir Linux in SRAM ausführen?"

Natürlich könnten Sie batteriegepuffertes SRAM als Boot-Partition verwenden und dann das eingebettete Flag "Ausführen an Ort und Stelle" 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 (einem Boot-Laufwerk oder RAM).

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

Im Allgemeinen arbeiten Hardware-Hersteller und Betriebssystementwickler daran, die Verarbeitung so schnell wie möglich zu gestalten. Ihre Frage ist jedoch sehr allgemein: Möchten Sie die Startzeiten beschleunigen, den Dateisystemzugriff optimieren, Berechnungen beschleunigen oder etwas anderes? Sobald Sie eine spezifischere Frage haben, können Sie mit Sicherheit den Engpass finden und beseitigen. Ihr SRAM-Laufwerk würde den Startvorgang sicherlich beschleunigen. In 3 Sekunden zu einer GUI zu gelangen, wäre sehr cool zu sehen.

Phil Hannent
quelle
1

Früher gab es Maschinen, auf denen der gesamte Arbeitsspeicher aus SRAM bestand. Dies ist zurück, als 8 MB viel waren, scheint aber Ihren Einschränkungen zu entsprechen. Ich bin sicher, 8 MB SRAM sind jetzt viel billiger als damals.

Sie könnten also Linux in SRAM ausführen, wenn der Computer auf diese Weise hergestellt würde. Es ist keine Theorie; Es wurde getan.

Aber nicht im Cache. Der Cache ist anders verkabelt und wird, was noch wichtiger ist, anders angesprochen. Sie können es nicht gleich ansprechen. Chunks werden anders abgebildet, nicht als fortlaufender Chunk. Und der Inhalt ist nicht unbedingt das, was Sie auf der Festplatte sehen - neuere Intel-Chips führen eine Art Just-in-Time-Compilierung (eher eine CISC => RISC-Micro-Op-Neucodierung) durch, bei der die Micro-Ops die Dinge sind das landet im Cache. Kurz gesagt, was sich im Cache befindet, ist nicht Ihr Programm, sondern eine geänderte Ansicht, sodass Sie es nicht mehr als Speicherdarstellung Ihres Programms verwenden können.

Die Frage ist warum. Abgesehen von "weil ich kann" gibt es nicht viele Gründe dafür. Das Cache-System bringt Ihnen den größten Geschwindigkeitsvorteil bei deutlich geringeren Kosten. Und denken Sie daran, dass Kosten nicht nur Dollars sind ... SRAM benötigt mehr Transistoren, was mehr Strom bedeutet.

Reiche Homolka
quelle