Was ist ein Cache?

click fraud protection

Beim Anfordern von Daten aus beliebigen Quellen kommt es immer zu Verzögerungen. Ping zu Webservern wird in Millisekunden gemessen, die Speicherzugriffszeit kann Latenzen im Mikrosekundenbereich aufweisen, während die RAM-Latenz in CPU-Taktzyklen gemessen wird. Natürlich wären solche Geschwindigkeiten vor ein paar Jahrzehnten noch undenkbar gewesen, aber in der Gegenwart sind sie nie schnell genug. Die Zugriffsgeschwindigkeit ist regelmäßig ein Leistungsengpass. Eine Möglichkeit, dies zu beheben, ist das Caching.

Caching ist ein Prozess, bei dem eine temporäre Kopie einer Ressource so gespeichert wird, dass schneller als normal darauf zugegriffen werden kann. Es gibt eine große Auswahl an Implementierungen sowohl in Software als auch in Hardware. Caches können als Lese-Caches, Schreib-Caches oder beides fungieren.

Cache lesen

In einem Lesecache werden zuvor angeforderte Daten für einen schnelleren Zugriff in einem Cache gespeichert. In einigen Szenarios kann der Cache sogar präventiv mit Daten geladen werden, was es ermöglicht, dass die erste Anfrage aus dem Cache bedient wird und nicht nur nachfolgende Anfragen.

Der Lese-Cache, mit dem Sie wahrscheinlich am ehesten vertraut sind, ist der Browser-Cache. Hier speichert der Browser eine lokale Kopie der angeforderten Ressourcen. Dies bedeutet, dass, wenn die Webseite neu geladen wird oder eine ähnliche Seite geladen wird, die einen Großteil des gleichen Inhalts verwendet, dieser Inhalt aus dem Cache und nicht vom Webserver bereitgestellt werden kann. Dies bedeutet nicht nur, dass die Webseite schneller geladen werden kann, sondern reduziert auch die Belastung des Webs Server und reduziert die Datenmenge, die der Benutzer herunterladen muss, was bei Zählern wichtig sein kann Verbindungen.

RAM selbst fungiert auch als Lese-Cache für Daten auf der Festplatte. In diesem Fall werden Daten für ein laufendes Programm präventiv in den Arbeitsspeicher geladen, damit die CPU schneller darauf zugreifen kann. Daten aus dem RAM werden dann weiter im CPU-Cache zwischengespeichert, obwohl der Prozess dafür viel komplexer ist, da der CPU-Cache in Megabyte und nicht in Gigabyte gemessen wird.

Caches schreiben

Ein Schreib-Cache ist ein Cache, der Daten absorbieren kann, die auf ein langsameres Gerät geschrieben werden. Ein gängiges Beispiel hierfür wäre der SLC-Cache in modernen SSDs. Dieser Cache erlaubt kein schnelleres Lesen von Daten, Es ist jedoch viel schneller zu schreiben als auf den TLC- oder QLC-Flash, der den Rest der SSD ausmacht. Der SLC-Cache kann Hochgeschwindigkeits-Schreibvorgänge absorbieren und diese Daten dann so schnell wie möglich auf den TLC-Flash auslagern, der eine viel bessere Speicherdichte bietet, aber auch viel langsamer zu schreiben ist. Die Verwendung des Flash-Speichers auf diese Weise optimiert ihn sowohl für schnelle Schreibgeschwindigkeiten als auch für eine hohe Speicherdichte.

Hybrid-Caches

Es gibt viele Möglichkeiten, Caches zu handhaben, die es ihnen ermöglichen, sowohl als Lese- als auch als Schreib-Cache zu fungieren. Jede dieser Methoden handhabt Schreiboperationen unterschiedlich und hat Vor- und Nachteile. Die drei Optionen sind Umschreiben, Durchschreiben und Zurückschreiben. Ein Write-Around-Cache überspringt den Cache beim Schreiben vollständig, der Write-Through-Cache schreibt in den Cache, betrachtet den Vorgang jedoch erst als abgeschlossen, wenn er in den Speicher geschrieben wurde. Der Write-Back-Cache schreibt in den Cache und betrachtet den Vorgang dann als abgeschlossen, wobei er sich auf den Cache verlässt, um ihn bei Bedarf in den Speicher zu übertragen.

Write-Around kann nützlich sein, wenn Sie eine große Menge an Schreibvorgängen erwarten, da es Cache-Churn minimiert. Es bedeutet jedoch, dass eine Operation, die dann irgendwelche dieser geschriebenen Daten liest, beim ersten Mal mit mindestens einem Cache-Fehltreffer konfrontiert wird. Write-Through-Caches speichern Schreibvorgänge sofort im Cache, was bedeutet, dass das Ergebnis aus dem Cache bereitgestellt werden kann, wenn es zum ersten Mal angefordert wird. Um jedoch als abgeschlossen zu gelten, muss ein Schreibvorgang die Daten auch auf die Festplatte schreiben, was die Latenz erhöht. Ein Write-Back-Cache hat den gleichen Vorteil wie ein Write-Through, da geschriebene Daten sofort aus dem Cache bereitgestellt werden können. Es sind jedoch keine Schreibvorgänge erforderlich, um auf die Festplatte zu schreiben, um als abgeschlossen zu gelten. Dies reduziert die Schreiblatenz, birgt jedoch das Risiko eines Datenverlusts, wenn der Cache flüchtig ist und das Zurückschreiben der Daten in den Speicher nicht beendet, bevor die Stromversorgung unterbrochen wird.

Wie entferne ich Daten aus dem Cache?

Einer der limitierenden Faktoren eines Caches ist die Kapazität. Das Durchsuchen eines großen Caches dauert lange, was einen guten Teil des Vorteils der Verwendung eines Caches von vornherein zunichte macht. Speichertechnologien, die für das Caching verwendet werden, sind tendenziell auch teurer als der Speicher, aus dem sie gecached werden. Wenn dies nicht der Fall wäre, hätte diese Speicherebene wahrscheinlich die Speichertechnologien gewechselt, um die Leistung zu verbessern. Beide Faktoren führen dazu, dass Caches in der Regel relativ klein sind, insbesondere im Vergleich zu dem Speichermedium, von dem sie zwischengespeichert werden. RAM hat weniger Kapazität als Speicher und CPU-Cache hat weniger Kapazität als RAM. Der SLC-Cache hat weniger Kapazität als der TLC-Speicher.

All dies bedeutet, dass es oft notwendig ist, Daten aus dem Cache zu entfernen, um Speicherplatz für neue Daten freizugeben, die zwischengespeichert werden müssen. Dazu gibt es verschiedene Ansätze. „Am wenigsten verwendet“ bevorzugt es, Cache-Einträge zu entfernen, die die niedrigste Zugriffszahl haben. Dies kann nützlich sein, um vorherzusagen, welche Einträge die geringste Auswirkung auf zukünftige Cache-Fehlschläge haben werden würde auch sehr kürzlich hinzugefügte Einträge als Einträge mit einer geringen Anzahl von Zugriffen zählen, was zu Cache führen kann Abwanderung.

„Zuletzt verwendet“ zieht es vor, Cache-Einträge zu entfernen, die seit einiger Zeit nicht mehr verwendet wurden. Dies setzt voraus, dass sie derzeit nicht verwendet werden, berücksichtigt jedoch nicht, ob sie vor einiger Zeit stark verwendet wurden. „Zuletzt verwendet“ zieht es vor, die zuletzt verwendeten Cache-Einträge zu entfernen, vorausgesetzt, dass sie verwendet wurden und nicht erneut verwendet werden müssen. Der beste Ansatz ist im Allgemeinen eine Kombination aus allen dreien, basierend auf Nutzungsstatistiken.

Veraltete Informationen und Sicherheitsrisiken

Das Hauptrisiko von Caches besteht darin, dass die darin enthaltenen Informationen veraltet sein können. Ein Cache-Eintrag wird als veraltet angesehen, wenn die ursprünglichen Daten aktualisiert wurden, wobei der Cache-Eintrag veraltet ist. Es ist wichtig, regelmäßig zu überprüfen, ob die bereitgestellte Live-Kopie immer noch mit der zwischengespeicherten Kopie übereinstimmt.

Insbesondere bei Websites ist es auch äußerst wichtig zu identifizieren, welche Daten zwischengespeichert werden können und welche nicht. Beispielsweise ist es völlig in Ordnung, wenn eine große, unveränderliche JavaScript-Datei zwischengespeichert wird. Dies erspart dem Benutzer, es jedes Mal herunterzuladen, und kann sogar anderen Benutzern zugute kommen, die von demselben Cache bedient werden. Sie können jedoch keine sitzungsspezifischen Daten zwischenspeichern. Stellen Sie sich vor, was passieren würde, wenn Sie zu einer Messaging-App navigieren würden, während Sie als Sie selbst angemeldet sind, nur um festzustellen, dass Sie mit einer zwischengespeicherten Version der Nachrichten eines anderen Benutzers versorgt werden. Glücklicherweise können Webserver angeben, welche Ressourcen zwischengespeichert werden können und welche nicht, und diese Probleme sind allgemein bekannt, sodass es nur wenige Probleme wie diese gibt.

Fazit

Ein Cache ist ein Teil des Speichers, der einige kürzlich verwendete Daten in einer Speichermethode speichern kann, auf die schneller zugegriffen werden kann, als es der Fall wäre, den normalen Datenzugriffsprozess erneut abzuschließen. Ein Cache ist in der Regel in seiner Kapazität begrenzt, was bedeutet, dass Einträge entfernt werden müssen, sobald er voll ist. Caches sind für den Benutzer im Allgemeinen transparent, was bedeutet, dass die Latenz der einzige Hinweis darauf ist, dass das Ergebnis über einen Cache bereitgestellt wurde.