Wat is een lokale cache? Wat is cachegeheugen? Video: cache leegmaken

Cachegeheugen(KP), of cache, is een snel buffergeheugen met beperkte capaciteit, georganiseerd in de vorm van een associatief opslagapparaat (AMD), dat zich tussen de processorregisters en het relatief trage hoofdgeheugen bevindt en de meest gebruikte informatie samen met de kenmerken ervan opslaat ( tags), die deel uitmaken van de adrescode.

Tijdens de werking worden individuele informatieblokken gekopieerd van het hoofdgeheugen naar het cachegeheugen. Wanneer de processor een commando of gegevens opvraagt, wordt eerst de aanwezigheid ervan in de CP gecontroleerd. Als de benodigde informatie zich in de cache bevindt, wordt deze snel opgehaald. Dit cache-hit. Als de benodigde informatie ontbreekt in de CP ( cache gemist), vervolgens wordt het uit het hoofdgeheugen geselecteerd, naar de microprocessor verzonden en tegelijkertijd in het cachegeheugen ingevoerd. Een verhoging van de snelheid van een computersysteem wordt bereikt wanneer cachehits worden veel vaker gerealiseerd dan cachemissers.

Laten we ons de vraag stellen: “Hoe kunnen we de meest gebruikte informatie bepalen? Is het echt mogelijk dat iemand eerst de uitvoering van het programma analyseert, bepaalt welke commando's en gegevens het vaakst worden gebruikt, en dat deze gegevens vervolgens, de volgende keer dat het programma wordt gestart, in het cachegeheugen worden herschreven, zodat het programma pas efficiënt draait? Natuurlijk niet. Hoewel moderne microprocessors een bepaald mechanisme hebben waarmee dit principe tot op zekere hoogte kan worden geïmplementeerd. Maar in principe selecteert het cachegeheugen zelf natuurlijk de informatie die het meest wordt gebruikt. Laten we eens kijken hoe dit gebeurt.

Mechanisme voor het opslaan van informatie in het cachegeheugen

Wanneer de microprocessor is ingeschakeld, is alle informatie in het cachegeheugen onbetrouwbaar.

Bij toegang tot het geheugen controleert de microprocessor, zoals reeds opgemerkt, eerst of de vereiste informatie in het cachegeheugen aanwezig is.

Om dit te doen, wordt het daardoor gegenereerde fysieke adres vergeleken met de adressen van geheugencellen die eerder uit het RAM in de CP in de cache waren opgeslagen.

Wanneer u voor de eerste keer toegang krijgt tot dergelijke informatie, bevindt dergelijke informatie zich uiteraard niet in het cachegeheugen, en dit komt overeen met cache gemist. Vervolgens krijgt de microprocessor toegang tot het RAM-geheugen, haalt de benodigde informatie eruit, gebruikt deze in zijn werk, maar schrijft deze informatie tegelijkertijd naar de cache.

Als alleen de informatie die momenteel door de microprocessor nodig is, in het cachegeheugen zou worden ingevoerd, zou het probleem zich hoogstwaarschijnlijk de volgende keer dat het werd geopend, opnieuw voordoen. cache-misser: het is onwaarschijnlijk dat de volgende toegang tot dezelfde instructie of tot dezelfde operand zal plaatsvinden. Cachehits zou pas plaatsvinden nadat een voldoende groot fragment van het programma zich in de CP heeft verzameld, dat enkele cyclische codesecties bevat, of een gegevensfragment dat opnieuw moet worden verwerkt. Om het volgende telefoontje naar de CP zo vaak mogelijk naar toe te leiden cachehits, overdracht van RAM naar cachegeheugen vindt niet plaats in die delen (bytes of woorden) die de microprocessor nodig heeft bij een bepaalde toegang, maar in de zogenaamde lijnen. Dat wil zeggen dat cachegeheugen en RAM vanuit caching-oogpunt als rijen zijn georganiseerd. De lengte van de string overschrijdt de maximaal mogelijke lengte van de gegevens die door de microprocessor worden vereist. Meestal varieert het van 16 tot 64 bytes en wordt het in het geheugen uitgelijnd langs de grens van de overeenkomstige sectie (Fig. 4.1).

Rijst. 4.1. Organisatie van uitwisseling tussen RAM en cachegeheugen

Hoog percentage cachehits in dit geval wordt dit verzekerd doordat programma's in de meeste gevallen toegang krijgen tot geheugencellen die zich dichtbij eerder gebruikte cellen bevinden. Deze eigenschap heet het principe van de lokaliteit van verbindingen, zorgt voor een effectief gebruik van CP. Het houdt in dat wanneer een programma gedurende een relatief korte tijdsperiode wordt uitgevoerd, er toegang wordt verkregen tot het geheugen binnen een beperkt bereik aan adressen (zowel programmacode als gegevens).

Een microprocessor had bijvoorbeeld 2 bytes aan informatie nodig om te kunnen werken. Als de string 16 bytes lang is, worden niet alleen de vereiste 2 bytes in de cache herschreven, maar ook een deel van hun omgeving. Wanneer de microprocessor toegang krijgt tot nieuwe informatie, vanwege de locatie van de links, zal de toegang hoogstwaarschijnlijk plaatsvinden op een naburig adres. Dan weer naar de naburige, opnieuw naar de naburige, enz. Er zullen dus een aantal opeenvolgende toegangen rechtstreeks tot het cachegeheugen plaatsvinden, waarbij het RAM-geheugen wordt omzeild (cachehits). Wanneer het volgende fysieke adres dat door de microprocessor wordt gegenereerd, voorbij de cacheregel gaat (de cache gemist), zal de newline-cache worden verwisseld, en opnieuw zal een reeks opeenvolgende toegangen veroorzaken cachehits.

Hoe langer de lijn die wordt gebruikt bij de uitwisseling tussen RAM en cachegeheugen, hoe groter de kans dat de volgende toegang binnen deze lijn zal plaatsvinden. Maar tegelijkertijd geldt: hoe langer de regel, hoe langer het duurt om van RAM naar de cache te pompen. En als het volgende commando een sprongcommando blijkt te zijn of als de databemonstering begint vanuit een nieuwe array, dat wil zeggen dat de volgende toegang niet plaatsvindt op een naburig adres, dan zal de tijd die wordt besteed aan het verzenden van een lange reeks worden verspild. Daarom moet er bij het kiezen van de lengte van een regel een redelijk compromis zijn tussen de verhouding van de toegangstijd tot RAM en cachegeheugen en de waarschijnlijkheid van een voldoende verre overgang van het huidige adres tijdens de uitvoering van het programma. Meestal wordt de lengte van de string bepaald door de hardware- en softwarestructuur van het systeem te modelleren.

Zodra er zich een voldoende grote hoeveelheid informatie in de CP heeft verzameld, neemt de waarschijnlijkheid toe dat de vorming van het volgende adres zal leiden cache-hit. Dit is vooral waarschijnlijk bij het uitvoeren van cyclische delen van het programma.

Oude informatie wordt waar mogelijk in het cachegeheugen opgeslagen. De vervanging ervan door een nieuwe wordt bepaald door de capaciteit, organisatie en strategie van het bijwerken van de cache.

Cachetypen

Als elke RAM-regel slechts één vaste locatie heeft waar deze zich in de cache kan bevinden, wordt de cache een geheugen genoemd met directe weergave.

Laten we aannemen dat het RAM-geheugen uit 1000 regels bestaat, genummerd van 0 tot 999, maar dat de cache een capaciteit heeft van slechts 100 regels. In direct toegewezen cachegeheugen kunnen RAM-regels met de nummers 0, 100, 200, ..., 900 alleen worden opgeslagen in regel 0 van de CP en nergens anders, regels 1, 101, 201, ..., 901

RAM - in regel 1 van de CP worden RAM-lijnen met de nummers 99, 199, ..., 999 opgeslagen in regel 99 van het cachegeheugen (Fig. 4.2). Deze organisatie van het cachegeheugen zorgt voor een snelle zoektocht naar de nodige informatie daarin: u hoeft de aanwezigheid ervan op slechts één plaats te controleren. De capaciteit van de CP wordt echter niet volledig benut: ondanks het feit dat een deel van het cachegeheugen mogelijk niet vol is, zal nuttige informatie daaruit worden verplaatst tijdens opeenvolgende toegangen, bijvoorbeeld tot de lijnen 101, 301, 101 van RAM.

Rijst. 4.2. Direct Mapped Cache-ontwerpprincipe

Het cachegeheugen wordt aangeroepen volledig associatief, als elke RAM-regel zich ergens in de cache kan bevinden.

In een volledig associatief cachegeheugen wordt het volledige volume ervan maximaal benut: de informatie die in de CP is opgeslagen, wordt pas verwijderd nadat deze volledig is gevuld. Het doorzoeken van een op deze manier georganiseerd cachegeheugen is echter een moeilijke taak.

Het compromis tussen deze twee methoden voor het organiseren van cachegeheugen is meervoudig associatief CP, waarbij elke RAM-regel zich op een beperkt aantal plaatsen in het cachegeheugen kan bevinden.

Als het nodig is om informatie in het cachegeheugen te vervangen door een nieuwe, meerdere vervangingsstrategieën. De bekendste onder hen zijn:

  • LRU - de rij die het langst niet is geopend, wordt vervangen;
  • FIFO - de oudste regel in het cachegeheugen wordt vervangen;
  • Willekeurig - vervanging wordt willekeurig uitgevoerd.

Deze laatste optie bespaart weliswaar aanzienlijk hardware in vergelijking met andere benaderingen, maar zorgt in sommige gevallen ook voor een efficiënter gebruik van cachegeheugen. Stel bijvoorbeeld dat de CP een lengte heeft van 4 regels, en dat een cyclisch gedeelte van het programma een lengte heeft van 5 regels. In dit geval zal het cachegeheugen bij LRU- en FIFO-strategieën vrijwel nutteloos zijn vanwege het gebrek aan cachetreffers. Tegelijkertijd zullen sommige oproepen naar de CP bij het gebruik van een strategie voor willekeurige informatievervanging resulteren in cachetreffers.

Enkele heuristische schattingen van de kans op cache-missers voor verschillende vervangingsstrategieën (in percentages) worden in de tabel weergegeven. 4.1.

Tabel 4.1. Kans op cachemissen voor verschillende caches
Cachegrootte, KB Cache-organisatie
2-kanaals associatief 4-kanaals associatief 8-kanaals associatief
LRU Willekeurig LRU Willekeurig LRU Willekeurig
16 5.2 5.7 4.7 5.3 4.4 5.0
64 1.9 2.0 1.5 1.7 1.4 1.5
256 1.15 1.17 1.13 1.13 1.12 1.12

Uit analyse van de tabel blijkt dat:

  • Het vergroten van de cachecapaciteit verkleint uiteraard de waarschijnlijkheid cache gemist, maar zelfs met de momenteel onbeduidende cachegeheugencapaciteit van 16 KB, komt ongeveer 95% van de oproepen naar de CP, waarbij het RAM wordt omzeild;
  • Hoe hoger de mate van associativiteit van het cachegeheugen, hoe groter de waarschijnlijkheid cachehits vanwege een vollediger vulling van de CP (de tijd van het zoeken naar informatie in de CP wordt in deze analyse niet in aanmerking genomen);
  • LRU-mechanisme biedt een hogere waarschijnlijkheid cachehits vergeleken met het Random Random Substitutiemechanisme is deze winst echter niet erg significant.

De consistentie tussen de gegevens in het RAM-geheugen en het cachegeheugen wordt verzekerd door wijzigingen aan te brengen in die RAM-gebieden waarvoor de gegevens in het cachegeheugen wijzigingen hebben ondergaan. Er zijn twee manieren om deze acties te implementeren: writethrough en write-back.

Bij het lezen werken beide methoden identiek. Bij het opnemen doorschrijfcache werkt het hoofdgeheugen bij parallel met het bijwerken van de informatie in het alarmsysteem. Dit vermindert de prestaties van het systeem enigszins, omdat de microprocessor vervolgens weer toegang kan krijgen tot hetzelfde adres om informatie te schrijven, en de eerdere overdracht van de cachelijn naar RAM nutteloos zal zijn. Bij deze benadering is de inhoud van de corresponderende RAM- en CP-lijnen echter altijd identiek. Dit speelt een grote rol bij multiprocessorsystemen met gedeeld RAM.

Caching voor terugschrijven wijzigt een RAM-regel alleen wanneer een cacheregel wordt verwijderd, bijvoorbeeld als het nodig is om ruimte vrij te maken om een ​​nieuwe regel van RAM naar een reeds gevulde CP te schrijven. Terugschrijfbewerkingen worden ook geïnitieerd door het cachecoherentiemechanisme bij het uitvoeren van een systeem met meerdere processors en gedeeld RAM.

Een tussenpositie tussen deze benaderingen wordt ingenomen door een werkwijze waarbij alle lijnen die bedoeld zijn voor verzending van de CP naar RAM voorlopig worden geaccumuleerd in een buffer. De overdracht wordt uitgevoerd wanneer de lijn wordt verdreven, zoals in het geval terugschrijfcache, hetzij wanneer het nodig is om het cachegeheugen van meerdere microprocessors in een multiprocessorsysteem te coördineren, hetzij wanneer de buffer vol is. Deze overdracht wordt in batchmodus uitgevoerd, wat efficiënter is dan het overbrengen van een enkele lijn.

Organisatie van het interne cachegeheugen van de microprocessor

De interne cache van een 32-bits microprocessor voor algemeen gebruik wordt gedeeld tussen zowel instructie- als gegevenstoegang. Er wordt een beroep gedaan op fysieke adressen.

Cachegeheugen wordt meestal geïmplementeerd in de vorm van een associatief geheugen, waarin voor elke regel aanvullende informatie wordt opgeslagen, een zogenaamde tag of attribuut, dat de adrescode of een deel ervan is. Wanneer een adres bij de AMS wordt ingediend, worden alle tags er tegelijkertijd mee vergeleken.

Het interne cachegeheugen in de i486-microprocessor implementeert schrijven door middel van. Vanaf Pentium MP wordt het gebruikt eind tot eind of terugschrijven.

Bij een externe CP wordt elke opnamemethode of een combinatie daarvan gebruikt.

Het interne cachegeheugen van de MP i486 heeft een capaciteit van 8 KB en is georganiseerd in de vorm van 4-kanaals associatief geheugen. Dit betekent dat gegevens van elke RAM-lijn kunnen worden opgeslagen in een van de 4 cachelijnen.

Het bedieningspaneel bestaat uit de volgende blokken (Fig. 4.3):

  • gegevensblok
  • tagblok,
  • geldigheidsblok en LRU.

Rijst. 4.3. Structuur van het interne cachegeheugen van MP i486

Het datablok bevat 8 KB aan gegevens en instructies. Het is verdeeld in 4 arrays (richtingen), die elk uit 128 lijnen bestaan. De regel bevat gegevens van 16 opeenvolgende geheugenadressen, beginnend bij een adres dat een veelvoud is van 16. De array-index van het datablok, bestaande uit 7 bits, komt overeen met 4 regels van de CP, één uit elke array. Vier CP-rijen met dezelfde index worden een set genoemd.

IN tag blok Er is één 21-bits tag voor elke datalijn in de CP. Het tagblok is ook verdeeld in 4 arrays van 128 tags. De tag bevat de bovenste 21 bits van het fysieke adres van de gegevens die zich in de overeenkomstige lijn van de CP bevinden.

IN betrouwbaarheid blok en LRU bevat één 7-bits waarde voor elk van de 128 sets CP-lijnen: 4 geldigheidsbits (V), één voor elke lijn van de set en 3 bits (BO ... B2) die het LRU-mechanisme besturen. Geldigheidsbits geven aan of de string geldige (V = 1) of ongeldige (V = 0) gegevens bevat. Bij het softwarematig wissen van de CP en het resetten van de hardware van de processor worden alle betrouwbaarheidsbits teruggezet op 0.

Cache-adressering wordt bereikt door de hogere 28 bits van het fysieke adres in twee delen te verdelen. De onderste 7 bits van deze bits (bits 10...4 van het fysieke adres) vormen het indexveld en definiëren de set waarin gegevens kunnen worden opgeslagen. De meest significante 21 bits (bits 31...11 van het fysieke adres) dienen als tagveld en worden gebruikt om te bepalen of informatie met een bepaald fysiek adres zich in een rij van de geselecteerde set bevindt.

Het zoeken in de cache naar informatie met een bepaald fysiek adres gaat als volgt:

Het fysieke adres waarop de oproep plaatsvindt, is verdeeld in 3 velden: Tag, Index, bytenummer. 7 cijfers A10...A4 van het indexveld definiëren een van de 128 sets.

De geselecteerde set bevat 4 rijen met informatie.

Om te bepalen of de benodigde informatie in één van de rijen van deze set aanwezig is, wordt een vergelijking gemaakt van de hogere 21 bits van het fysieke adres (Tag field) met de tags van de rijen van de geselecteerde set. De vergelijking wordt alleen uitgevoerd voor betrouwbare lijnen, dat wil zeggen lijnen waarvoor de betrouwbaarheidsbit V = 1 is ingesteld in het betrouwbaarheidsblok.

Als voor een van de regels de tag en bits A31...A11 van het fysieke adres samenvallen, betekent dit dat er iets is gebeurd cache-hit en de benodigde informatie bevindt zich in het cachegeheugen.

De gevonden string van 16 bytes wordt gelezen. De benodigde byte daarin wordt bepaald door de 4 bits van lage orde van het fysieke adres (A3...A0).

Als er geen match is in fase 3 of als alle rijen van de set ongeldig zijn, wordt deze situatie gedefinieerd als cache gemist. In dit geval wordt het door de microprocessor gegenereerde fysieke adres gebruikt om toegang te krijgen tot het RAM-geheugen. De benodigde informatie wordt uit het RAM gehaald en de regel die deze informatie bevat, wordt naar een vrije regel van de geselecteerde set geschreven. De bovenste 21 bits van het fysieke adres worden in het tagveld van deze regel geschreven. Als alle rijen in de geselecteerde set geldig zijn, wordt de rij die het langst niet is geopend, vervangen volgens het LRU-mechanisme. Dit mechanisme werkt op precies dezelfde manier als bij het uitzetten van rijen associatieve vertaalbuffer TLB.

De bedrijfsmodus van het cachegeheugen wordt programmatisch bepaald door de bits CD (caching uitgeschakeld) en NW (doorschrijven uitgeschakeld) in het CRO-besturingsregister in te stellen. Caching kan worden ingeschakeld (dit is de status na initialisatie bij reset), kan worden uitgeschakeld als er geldige rijen zijn (in deze modus fungeert de CP als snel intern RAM), of ten slotte kan caching volledig worden uitgeschakeld.

Cachebeheer op paginaniveau

IN elementen van de paginacatalogus en paginatabellen Er zijn twee bits die worden gebruikt om de uitgangssignalen van de processor te besturen en die betrokken zijn bij het cachen van pagina's.

De PCD-bit schakelt paginacaching uit (PCD = 1) of activeert (PCD = 0). Het uitschakelen van caching is noodzakelijk voor pagina's die geheugentoegewezen I/O-poorten bevatten. Het is ook handig voor pagina's die geen baat hebben bij caching, zoals pagina's die een initialisatiefunctie bevatten.

De PWT-bit bepaalt de methode voor het bijwerken van het RAM-geheugen en de externe cache (niveau 2-cache). Als PWT = 1, wordt de doorschrijfcache bepaald voor de gegevens op de overeenkomstige pagina; als PWT = 0, wordt de terugschrijfmethode gebruikt. Gebruikt in microprocessors vanaf Pentium. Omdat het interne cachegeheugen in de i486 MP doorschrijfbewerkingen uitvoert, heeft de status van de PWT-bit hier geen invloed op. De PWT-bit heeft in dit geval alleen invloed op de externe CP.

Zorgen voor cache-coherentie van microprocessors in systemen met meerdere processors

Laten we eens kijken naar de kenmerken van cachegeheugen in het geval dat meerdere microprocessors tegelijkertijd gemeenschappelijk RAM gebruiken (Fig. 4.4). In dit geval kunnen er problemen optreden met betrekking tot het cachen van informatie van RAM naar het cachegeheugen van microprocessors.

Rijst. 4.4. Structuur van een multimicroprocessorsysteem met gedeeld RAM

Laten we aannemen dat MP A een bepaalde gegevensregel van RAM naar zijn interne CP heeft gelezen en de gegevens op deze regel tijdens bedrijf heeft gewijzigd.

We hebben opgemerkt dat er twee hoofdmechanismen zijn voor het updaten van RAM:

schrijven door middel van, wat inhoudt dat zodra informatie in het interne cachegeheugen is gewijzigd, dezelfde informatie naar dezelfde locatie in RAM wordt gekopieerd, en

terugschrijven, waarin de microprocessor, na het wijzigen van informatie in de interne cache, deze verandering niet onmiddellijk in RAM weerspiegelt, maar alleen op het moment dat de gegeven regel uit het cachegeheugen naar RAM wordt verwijderd. Dat wil zeggen, er zijn bepaalde momenten in de tijd waarop informatie, bijvoorbeeld op adres 2000, verschillende waarden heeft: de microprocessor heeft deze bijgewerkt, maar de oude waarde bleef in het RAM. Als op dit moment een andere microprocessor (MP B), die hetzelfde RAM gebruikt, toegang krijgt tot adres 2000 in RAM, dan zal hij daar oude informatie lezen, die tegen die tijd niet langer relevant is.

Om de geheugenconsistentie (coherentie) te garanderen, gebruiken multiprocessorsystemen hardwaremechanismen om dit probleem op te lossen. Dergelijke mechanismen worden genoemd cache-coherentieprotocollen. Deze protocollen zijn ontworpen om ervoor te zorgen dat elke lezing van een gegevensitem de meest recent geschreven waarde retourneert.

Er zijn twee klassen coherentieprotocollen:

  • directory-gebaseerde protocollen(directory-gebaseerd): informatie over de status van het fysieke geheugenblok bevindt zich op slechts één plaats, de directory genaamd (fysiek kan de directory worden gedistribueerd over systeemknooppunten);
  • surveillance protocollen(snooping): elke cache die een kopie van de gegevens van een bepaald blok fysiek geheugen bevat, heeft ook een overeenkomstige kopie van service-informatie over zijn status; er is geen gecentraliseerd opnamesysteem; Normaal gesproken bevinden de caches zich op een gemeenschappelijke bus, en controleren de controllers van alle caches de bus om te bepalen welke adressen binnen dat blok toegankelijk zijn voor andere microprocessors.

In multiprocessorsystemen met gedeeld geheugen is dit het populairst surveillance protocollen, omdat ze een reeds bestaande fysieke verbinding – de geheugenbus – kunnen gebruiken om de status van de caches op te vragen.

Er zijn twee belangrijke methoden die worden gebruikt om de samenhang te behouden.

Eén techniek is ervoor te zorgen dat de processor exclusieve toegang tot een data-element moet verkrijgen voordat hij naar dat data-element schrijft. Dit type protocol wordt protocol genoemd aanmeldingen met annulering(write invalidate protocol) omdat wanneer er wordt geschreven, andere kopieën ongeldig worden gemaakt. Dit is het meest gebruikte protocol zoals in diagrammen gebaseerd op naslagwerken, en in bewakingsschema's. Exclusieve toegang zorgt ervoor dat terwijl er wordt geschreven, er geen andere kopieën van het data-item zijn waarnaar kan worden geschreven of waaruit kan worden gelezen: alle andere in de cache opgeslagen kopieën van het data-item worden ongeldig gemaakt.

Een alternatief voor het schrijfinvalidatieprotocol is het bijwerken van alle kopieën van een data-element wanneer er naar dat data-element wordt geschreven.

Dit type protocol wordt een schrijfupdateprotocol of een schrijfbroadcastprotocol genoemd.

Deze twee ontwerpen lijken sterk op doorschrijf- en terugschrijfcache-ontwerpen. De sleutel tot het implementeren van zowel schrijfinvalidatie- als schrijfupdateschema's op multiprocessorsystemen met een klein aantal processors is het gebruik van een busmechanisme om deze bewerkingen uit te voeren. Om een ​​update- of ongeldigverklaringsoperatie uit te voeren, neemt de processor eenvoudigweg de bus in beslag en zendt het adres uit waarop de update of ongeldigverklaring zou moeten plaatsvinden. Alle processors houden de bus voortdurend in de gaten en controleren de adressen die erop verschijnen.

Processoren controleren of het adres dat op de bus verschijnt in hun cache staat. Als dit het geval is, worden de overeenkomstige gegevens in de cache ongeldig gemaakt of bijgewerkt, afhankelijk van het gebruikte protocol.

Laten we eens kijken naar een van de meest voorkomende protocollen die zorgen voor een gecoördineerde werking van het cachegeheugen van verschillende microprocessors en het hoofdgeheugen in systemen met meerdere microprocessors: MESI-protocol, die tot de groep behoort observatieprotocollen met annulering. We zullen er kennis mee maken aan de hand van het voorbeeld van een systeem met twee processors, bestaande uit microprocessors A en B.

Dit protocol gebruikt 4 tekens van de status van de cachelijn van de microprocessor, waarvan de eerste letters het protocol zijn naam geven:

  • gewijzigde status (Gewijzigd): de informatie die is opgeslagen in het cachegeheugen van microprocessor A is alleen betrouwbaar in deze cache; het is afwezig in het RAM- en cachegeheugen van andere microprocessors;
  • exclusieve kopie (Exclusief): de informatie in cache A bevindt zich nog steeds alleen in RAM;
  • gedeelde informatie (gedeeld): de informatie in cache A bevindt zich in het cachegeheugen van ten minste één extra MP, evenals in RAM;
  • Ongeldige informatie: er staat ongeldige informatie in de cacheregel.

De status van de MESI-stroomkenmerken weerspiegelt dus de volgende statussen (in relatie tot de MPA) van de cacheregel (Tabel 4.2):

Tabel 4.2. Vorming van statusborden van het MESI-protocol
Protocolkenmerkstatus Geheugenlijnstatus
Contant A Cache B RAM
Gewijzigd D ND ND
Gedeeld D D D
Exclusief D ND D
Ongeldig ND X X

Bij het bedienen van microprocessor A zijn, vanuit het oogpunt van het waarborgen van geheugencoherentie, de volgende situaties mogelijk:

  • RH (lees hit) cache-hit bij het lezen;
  • WH (schrijfhit) cache-hit bij het opnemen;
  • RME (Lees Miss Exclusive) - cache gemist bij het lezen;
  • RMS (Lees Miss Gedeeld) - cache gemist bij het lezen, maar het corresponderende blok bevindt zich in het cachegeheugen van een andere microprocessor;
  • WM (Schrijf mevrouw) cache gemist bij het opnemen;
  • SHR (Snoop Hit Read) - detecteren van een kopie van een blok tijdens het luisteren naar een leesbewerking vanuit een andere cache;
  • SHW (Snoop Hit Write) - detecteert een kopie van een blok tijdens het luisteren naar de schrijfbewerking van een andere cache.

De laatste twee posities zijn hier van het grootste belang.

Moderne microprocessors hebben een bidirectionele adresbus.

Door informatie naar deze bus te sturen, adresseert de microprocessor RAM-cellen of I/O-apparaten. Vanwege het feit dat in het beschouwde multiprocessorsysteem de microprocessors zijn verbonden via een gemeenschappelijke bus, inclusief de adresbus, die informatie langs de adreslijnen ontvangt, bepaalt de microprocessor of de adressen in zijn cachegeheugen zijn benaderd door andere microprocessors. . Wanneer een dergelijke toegang wordt gedetecteerd, verandert de status van de cachelijn van de microprocessor.

Veranderingen in de status van het MP-cachegeheugenblok, afhankelijk van verschillende situaties in de werking ervan en de werking van het multimicroprocessorsysteem als geheel, worden gepresenteerd in Fig. 4.5.

Rijst. 4.5. MESI-diagram van cache-coherentie

Laten we enkele van de gepresenteerde overgangen illustreren.

Laat het cachegeheugenblok de status Gewijzigd hebben, dat wil zeggen dat betrouwbare informatie zich alleen in het cachegeheugen van deze MP bevindt. Als hij vervolgens, terwijl hij naar de adresbus luistert, een toegang detecteert van een andere microprocessor om informatie te lezen op de adressen die in deze regel zijn opgenomen, moet de microprocessor deze cachegeheugenlijn overbrengen naar RAM, vanwaar deze door een andere microprocessor zal worden gelezen.

In dit geval verandert de status van de lijn in het cachegeheugen van de betreffende microprocessor van aangepast naar gedeeld (gedeeld).

Als de cacheregel de status Ongeldig had, dat wil zeggen dat de informatie daarin onbetrouwbaar was, dan waren alleen situaties gerelateerd aan cache-missers. Dus als het zou gebeuren cache gemist Bij het uitvoeren van een schrijfbewerking wordt de vereiste regel in het cachegeheugen van deze MP ingevoerd, worden de gewijzigde gegevens naar deze regel geschreven en krijgt deze de status van de exclusieve eigenaar van de nieuwe informatie (gewijzigd).

Korte samenvatting. De lezing bespreekt de algemene principes van de werking van microprocessor-cachegeheugen, de organisatie van cachegeheugen met directe mapping, volledig associatieve en multi-associatieve CP. De belangrijkste mechanismen voor het updaten van RAM worden overwogen: write-through en write-back caching. De organisatie van het interne cachegeheugen van de microprocessor wordt gepresenteerd. Methoden voor het waarborgen van de cachegeheugencoherentie van microprocessors in multiprocessorsystemen worden besproken.

Cache [of cache (Engelse cache, uit het Frans.
Geplaatst op ref.rf
cacher - verbergen; uitgesproken - cache) is een tussenliggende buffer met snelle toegang, die informatie bevat die hoogstwaarschijnlijk wordt opgevraagd door snel geheugen, bijvoorbeeld RAM. Het verkrijgen van toegang tot gegevens in de cache gaat sneller dan het ophalen van brongegevens uit het trage geheugen (extern) of het herberekenen ervan, waardoor de gemiddelde toegangstijd wordt verkort.

Het woord ‘cache’ werd voor het eerst gebruikt in een computercontext in 1967 tijdens het voorbereiden van een artikel voor publicatie in de IBM Systems Journal. Het artikel ging over geheugenverbeteringen in het ontwikkelde model 85 van de IBM System/360-serie. De redacteur van het tijdschrift, Lyle Johnson, vroeg om een ​​meer beschrijvende term dan "hogesnelheidsbuffer", maar vanwege een gebrek aan ideeën stelde hij zelf het woord "cache" voor. Het artikel werd begin 1968 gepubliceerd, de auteurs kregen een IBM-onderscheiding, hun werk werd op grote schaal verspreid en vervolgens verbeterd, en het woord 'cache' werd al snel in de computerliteratuur gebruikt als een algemeen aanvaarde term.

Operatie

CPU-geheugencachediagram

Een cache is geheugen met een hogere toegangssnelheid, ontworpen om de toegang te versnellen tot gegevens die permanent in het geheugen zijn opgeslagen met een lagere toegangssnelheid (hierna “hoofdgeheugen” genoemd). Caching wordt gebruikt door CPU's, harde schijven, browsers en webservers.

Een cache bestaat uit een reeks vermeldingen. Elke record is gekoppeld aan een data-element of datablok (een klein stukje data), dat een kopie is van het data-element in het hoofdgeheugen. Elke invoer heeft een identificatie die de correspondentie identificeert tussen gegevensitems in de cache en hun kopieën in het hoofdgeheugen.

Wanneer een cacheclient (CPU, webbrowser, besturingssysteem) toegang krijgt tot gegevens, wordt eerst de cache onderzocht. Als er in de cache een invoer wordt gevonden met een identificatie die overeenkomt met de identificatie van het opgevraagde data-element, worden de data-elementen in de cache gebruikt. Dit geval wordt een cachetreffer genoemd. Als er geen vermeldingen worden gevonden in de cache die het gevraagde gegevenselement bevat, wordt het vanuit het hoofdgeheugen in de cache gelezen en komt het beschikbaar voor latere toegang. Dit geval wordt een cachemisser genoemd. Het percentage cachehits wanneer er een resultaat in wordt gevonden, wordt gewoonlijk de hitrate of cachehitratio genoemd.

De webbrowser controleert bijvoorbeeld de lokale schijfcache om te zien of er een lokale kopie van de webpagina is die overeenkomt met de gevraagde URL. In dit voorbeeld is de URL de identificatie en de inhoud van de webpagina de gegevenselementen.

Als de cache een beperkte omvang heeft, moet er bij een misser een beslissing worden genomen om een ​​item weg te gooien om ruimte vrij te maken. Er worden verschillende uitzettingsalgoritmen gebruikt om te selecteren welk record moet worden verwijderd.

Wanneer gegevensitems in de cache worden gewijzigd, worden ze bijgewerkt in het hoofdgeheugen. De tijdsvertraging tussen het wijzigen van gegevens in de cache en het bijwerken van het hoofdgeheugen wordt geregeld door het zogenaamde schrijfbeleid.

In een write-immediate cache veroorzaakt elke wijziging een synchrone update van de gegevens in het hoofdgeheugen.

In een terugschrijfcache (of terugschrijfcache) vinden updates plaats wanneer een gegevensitem periodiek wordt verwijderd of op verzoek van de klant. Om gewijzigde gegevensitems bij te houden, slaan cache-items een wijzigingsindicator op (gewijzigd of vuil). Een misser van de terugschrijfcache kan twee toegangen tot het hoofdgeheugen vereisen: de eerste om vervangende gegevens uit de cache te schrijven, en de tweede om een ​​cruciaal gegevensitem te lezen.

Als gegevens in het hoofdgeheugen onafhankelijk van de cache worden gewijzigd, kan de cache-invoer irrelevant worden. Inter-cache-protocollen die de gegevensconsistentie behouden, worden cache-coherentieprotocollen genoemd.

[bewerking]

CPU-cache

Een aantal CPU-modellen (Central Processing Unit) hebben hun eigen cache om de toegang tot het Random Access Memory (RAM), dat langzamer is dan registers, tot een minimum te beperken. Cachegeheugen kan aanzienlijke prestatievoordelen opleveren wanneer de RAM-kloksnelheid aanzienlijk lager is dan de CPU-kloksnelheid. De kloksnelheid voor cachegeheugen is meestal niet veel minder dan de CPU-snelheid.

Zie ook: Vertaal-lookaside-buffer.

Cacheniveaus

De CPU-cache is verdeeld in verschillende niveaus. Voor processors voor algemene doeleinden - maximaal 3. Niveau N+1-cache is doorgaans groter van formaat en langzamer wat betreft toegangssnelheid en gegevensoverdracht dan niveau N-cache.

Het snelste geheugen is de cache van het eerste niveau: L1-cache. In feite is het een integraal onderdeel van de processor, omdat het zich op dezelfde chip bevindt en deel uitmaakt van de functionele blokken. Bestaat uit een instructiecache en een datacache. Sommige processors zonder L1-cache kunnen niet functioneren. Op andere kan het worden uitgeschakeld, maar dan nemen de processorprestaties aanzienlijk af. De L1-cache werkt op de processorfrequentie en is over het algemeen elke klokcyclus toegankelijk (het is vaak mogelijk om zelfs meerdere lees-/schrijfbewerkingen tegelijkertijd uit te voeren). De toegangslatentie bedraagt ​​gewoonlijk 2-4 kernklokcycli. Het volume is meestal klein: niet meer dan 128 KB.

De op één na snelste is L2-cache - cache op het tweede niveau. Meestal bevindt het zich op de chip, zoals L1, of in de buurt van de kern, bijvoorbeeld in een processorcartridge (alleen in slotprocessors). Bij oudere processors een set chips op het moederbord. L2-cachevolume van 128 KB tot 1-12 MB. In moderne multi-coreprocessors is de cache op het tweede niveau, die zich op dezelfde chip bevindt, een afzonderlijk geheugen - met een totale cachegrootte van 8 MB is elke kern verantwoordelijk voor 2 MB. Normaal gesproken bedraagt ​​de latentie van de L2-cache op de kernchip 8 tot 20 kernklokcycli. In tegenstelling tot de L1-cache heeft het uitschakelen hiervan mogelijk geen invloed op de systeemprestaties. Tegelijkertijd kunnen de prestaties bij taken waarbij meerdere toegangen tot een beperkt geheugengebied nodig zijn, bijvoorbeeld een DBMS, vertienvoudigen.

De L3-cache is het minst snel en bevindt zich meestal apart van de CPU-kern, maar moet een zeer indrukwekkende grootte hebben: meer dan 32 MB. L3-cache is langzamer dan eerdere caches, maar nog steeds aanzienlijk sneller dan RAM. In multiprocessorsystemen wordt het algemeen gebruikt.

De caches op het tweede en derde niveau zijn het nuttigst bij wiskundige taken, bijvoorbeeld bij het berekenen van polygonen, wanneer de hoeveelheid gegevens kleiner is dan de cachegrootte. In dit geval kunt u alle gegevens onmiddellijk naar de cache schrijven en vervolgens verwerken.

Associativiteit cachen

Een van de fundamentele kenmerken van cachegeheugen – het niveau van associativiteit – weerspiegelt de logische segmentatie ervan. Feit is dat het opeenvolgend doorzoeken van alle cachelijnen op zoek naar de benodigde gegevens tientallen klokcycli zou vergen en alle voordelen van het gebruik van het in de CPU ingebouwde geheugen teniet zou doen. Om deze reden zijn RAM-cellen nauw verbonden met cacheregels (elke regel bevat gegevens van een vaste reeks adressen), wat de zoektijd aanzienlijk verkort. Aan elke RAM-cel moet meer dan één cachelijn zijn gekoppeld: n-way set associatief betekent bijvoorbeeld dat informatie op een bepaald RAM-adres kan worden opgeslagen in n cachelocaties.

Gegeven dezelfde cachegrootte zal het schema met grotere associativiteit het minst snel zijn, maar het meest efficiënt.

Externe schijven in cache opslaan

Veel randapparatuur maakt gebruik van cache om de werking te versnellen, met name harde schijven gebruiken cachegeheugen van 1 tot 64 MB (modellen met NCQ/TCQ-ondersteuning gebruiken het voor het opslaan en verwerken van verzoeken), cd-/dvd-/BD-schijflezers. cache leesinformatie om hertoegang te versnellen. Het besturingssysteem gebruikt ook een deel van het RAM-geheugen als cache voor schijfbewerkingen (ook voor externe apparaten die geen eigen cachegeheugen hebben, inclusief harde schijven, flashgeheugen en diskettes).

Het gebruik van caching op externe schijven is te wijten aan de volgende factoren:

De processortoegangssnelheid tot RAM is vele malen sneller dan tot het geheugen van externe opslagapparaten;

sommige geheugenblokken van externe schijven worden door meerdere processen tegelijkertijd gebruikt en het is zinvol om het blok één keer te lezen en vervolgens één kopie van het blok in het RAM op te slaan voor alle processen;

Sommige RAM-blokken worden veel vaker gebruikt dan andere, dus het gebruik van caching voor dergelijke blokken verhoogt over het algemeen de systeemprestaties;

Sommige externe opslagblokken vereisen geen onmiddellijke schrijfbewerkingen na wijziging, en het gebruik van een cache voor dergelijke blokken optimaliseert het I/O-gebruik.

Caching van het besturingssysteem

De RAM-cache bestaat uit de volgende elementen:

een set RAM-pagina's verdeeld in buffers die qua lengte gelijk zijn aan het datablok van het overeenkomstige externe geheugenapparaat;

een set bufferheaders die de toestand van de corresponderende buffer beschrijven;

een hashtabel die de correspondentie bevat tussen het bloknummer en de header;

lijsten met vrije buffers.

Algoritme voor terugschrijfcache

In eerste instantie worden alle bufferheaders in de vrije bufferlijst geplaatst. Als een proces een blok wil lezen of wijzigen, voert het het volgende algoritme uit:

probeert de bufferheader met het opgegeven nummer in de hashtabel te vinden;

als de ontvangen buffer bezet is, wacht hij tot deze wordt vrijgegeven;

als de buffer niet in de hashtabel wordt gevonden, wordt de eerste buffer uit de staart van de vrije lijst genomen;

als de lijst met vrije buffers leeg is, wordt het uitzettingsalgoritme uitgevoerd (zie hieronder);

in het geval dat de ontvangen buffer als “vuil” is gemarkeerd, wordt de inhoud van de buffer asynchroon naar het externe geheugen geschreven.

verwijdert een buffer uit de hashtabel als deze daarin is geplaatst;

plaatst de buffer in de hashtabel met een nieuw nummer.

Het proces leest gegevens in de ontvangen buffer en maakt deze vrij. Bij wijziging markeert het proces de buffer als vuil voordat deze wordt vrijgegeven. Wanneer deze is vrijgegeven, wordt de buffer bovenaan de lijst met vrije buffers geplaatst.

Dus:

als een proces een bepaald blok in een buffer heeft gelezen, dan is de kans groot dat een ander proces bij het lezen van dit blok de buffer in RAM zal vinden;

Gegevens worden alleen naar het externe geheugen geschreven als er niet voldoende “schone” buffers zijn, of op verzoek.

Preemption-algoritme

Als de lijst met vrije buffers leeg is, wordt het bufferverwijderingsalgoritme uitgevoerd. Het uitzettingsalgoritme heeft een aanzienlijke invloed op de cacheprestaties. De volgende algoritmen bestaan:

LRU (Least Recent Used) - de buffer die het langst ongebruikt is geweest, wordt verwijderd;

MRU (Most Recent Used) - de laatst gebruikte buffer is verplaatst;

LFU (Least Frequently Used) - de buffer die het minst vaak wordt gebruikt, wordt vervangen;

ARC (Engels) (Adaptive Replacement Cache) is een uitzettingsalgoritme dat LRU en LFU combineert, gepatenteerd door IBM.

Het gebruik van een bepaald algoritme hangt af van de datacachingstrategie. LRU is het meest effectief als de data gegarandeerd in de nabije toekomst hergebruikt kunnen worden. MRU is het meest effectief als gegarandeerd wordt dat de gegevens in de nabije toekomst niet opnieuw worden gebruikt. Als de applicatie expliciet een cachingstrategie specificeert voor een bepaalde set gegevens, zal de cache het meest efficiënt functioneren.

Softwarecaching

Cachingbeleid schrijven

Bij het lezen van gegevens zorgt het cachegeheugen voor een duidelijke prestatiewinst. Bij het vastleggen van gegevens kan alleen winst worden behaald ten koste van een verminderde betrouwbaarheid. Om deze reden moeten verschillende toepassingen een of ander cacheschrijfbeleid selecteren.

Er zijn twee hoofdbeleidsregels voor het schrijven van caches: doorschrijven en terugschrijven.

doorschrijven betekent dat wanneer de inhoud van een geheugencel verandert, het schrijven synchroon plaatsvindt in zowel de cache als het hoofdgeheugen.

Lui schrijven betekent dat u het moment waarop gegevens naar het hoofdgeheugen worden geschreven, kunt uitstellen en deze alleen naar de cache kunt schrijven. In dit geval worden de gegevens alleen in het RAM-geheugen geladen als er toegang toe wordt verkregen door een ander apparaat (een andere CPU, DMA-controller) of als er niet voldoende ruimte in de cache is om andere gegevens op te slaan. De prestaties zijn beter dan doorschrijven, maar dit kan de integriteit van de gegevens in het hoofdgeheugen in gevaar brengen, omdat een software- of hardwarefout ertoe kan leiden dat de gegevens nooit van de cache naar het hoofdgeheugen worden geschreven. In het geval van RAM-caching, wanneer twee of meer processors worden gebruikt, is het echter noodzakelijk om de consistentie van gegevens in verschillende caches te garanderen.

Internetpagina's cachen

Bij het verzenden van informatie via het netwerk kan gebruik worden gemaakt van caching van internetpagina's - het proces waarbij vaak opgevraagde documenten worden opgeslagen op (tussenliggende) proxyservers of op de machine van de gebruiker, om te voorkomen dat ze voortdurend worden gedownload van de bronserver en om het verkeer te verminderen. . Informatie komt echter dichter bij de gebruiker. Caching wordt beheerd met behulp van HTTP-headers.

Als alternatief kan het cachen van webpagina's worden uitgevoerd met behulp van het CMS van een specifieke site om de belasting van de server tijdens veel verkeer te verminderen. Caching kan zowel in het geheugen als in de bestandscache (cache op bestanden) plaatsvinden.

Werkresultaten in cache opslaan

Veel programma's schrijven ergens tussen- of hulpresultaten van het werk om ze niet elke keer te berekenen als ze nodig zijn. Dit versnelt het werk, maar vereist extra geheugen (RAM of schijf). Een voorbeeld van dergelijke caching is database-indexering.

Als het om informatietechnologie gaat, hoor je vaak het woord ‘cache’. Niet alle mensen weten echter waarom het nodig is, voor welke doeleinden het wordt gebruikt, enz. Daarom zal ik in dit artikel de vraag bespreken wat is cache, en ik zal je ook vertellen over enkele nuances en problemen die gepaard gaan met het gebruik van de cache.

Maar voordat we verder gaan, een paar woorden. Er zijn veel verschillende technologieën en praktische implementaties van cache, dus in dit artikel zal ik me er niet op concentreren of in detail treden, omdat het heel gemakkelijk is om volledige informatie over elk type caching te vinden. Met andere woorden, het artikel is bedoeld voor mensen die gewoon geïnteresseerd zijn in wat dit ding is, hoe het werkt, welke problemen er mee gepaard gaan, enzovoort.

Dus. Laten we beginnen.

Laten we eens kijken wat cache is

Cache is een tijdelijke opslag van gegevens (bestanden, informatie, enz.), waarmee u aanzienlijk tijd en middelen kunt besparen. Het is meteen vermeldenswaard dat ik bewust niet heb aangegeven hoe de besparingen tot stand komen, aangezien dit afhankelijk van de technologie door verschillende factoren kan gebeuren.

De eenvoudigste manier om te begrijpen wat een cache is. Dit is om je twee opties voor te stellen voor het bekijken van een video. In het eerste geval heb je de film lang geleden gedownload en bekijk je hem vanaf je harde schijf. Bekijk in het tweede geval de video via een browser op internet. De film is in beide gevallen hetzelfde. Met de eerste methode kunt u echter meteen beginnen met kijken. Bij de tweede benadering moet je wachten totdat ten minste een deel van de video is geladen. Zoals je kunt zien, kun je met de eerste methode veel sneller van kunst genieten. Als we het over de cache hebben, is dit in dit geval de map waarin uw films zijn opgeslagen, en de besparingen worden bereikt doordat u het bestand met de film al heeft en de leessnelheid vanaf de harde schijf veel hoger is dan de snelheid waarmee bestanden van internet worden gedownload.

Laat mij u nog een voorbeeld geven. Bijna dagelijks open je websites in je browser en het is je vast wel eens opgevallen dat het lang duurt als een website voor de eerste keer wordt geopend. Alle volgende pagina-openingen vinden veel sneller plaats. Waarom gebeurt dit? Om een ​​website mooi in een browser weer te geven, moet deze tegenwoordig een aantal bestanden downloaden, die in totaal gemakkelijk meer dan 1-5 MB in beslag kunnen nemen. Als u deze bestanden telkens opnieuw moet downloaden elke keer dat u een pagina bezoekt, zal de site zeer langzaam openen. Om te voorkomen dat dit gebeurt en dat pagina's snel worden geopend wanneer u ze opnieuw bezoekt, slaat de browser deze bestanden op in een tijdelijke map en markeert ze met tags over de sites waarvan ze zijn gedownload. Deze map is de cache. Het verschil in snelheid is te wijten aan hetzelfde als in het geval van het filmvoorbeeld.

Als we het hebben over computerhardware en apparaten, zoals een processor en harde schijf, dan is de situatie met de cache een beetje anders. Laten we een processor als voorbeeld nemen. De cache is eenvoudigweg zeer snel geheugen (ongeveer 10 keer sneller dan RAM) dat moeilijk groot te maken is in termen van de gegevens die het kan bevatten. Processoren met een cache van 1 GB zul je bijvoorbeeld nooit tegenkomen. Deze cache slaat zelf machinecodes op die de processor nodig heeft om vaak gebruikte gegevens uit te voeren. Er worden besparingen gerealiseerd doordat terwijl de processor opdrachten uitvoert, de volgende machinecodes parallel vanuit RAM naar de cache worden geschreven. Om het iets eenvoudiger te zeggen: het gaat erom tegelijkertijd de cache te vullen met de volgende codes en de reeds geladen codes door de processor uit te voeren. Bovendien slaat de cache, zoals ik al zei, ook gegevens op waartoe de processor regelmatig toegang moet hebben.

Opmerking: Over het algemeen is processorcaching ingewikkelder dan ik heb beschreven, maar over het algemeen is dit precies hoe het werkt.

Zoals u kunt zien, kan de cache op verschillende manieren worden geïmplementeerd en kunnen prestatieverbeteringen en besparingen worden bereikt als gevolg van verschillende factoren.

Wat zijn cacheproblemen?

Cacheproblemen zijn voornamelijk gebaseerd op het feit dat bij hergebruik van eerder opgeslagen gegevens deze informatie mogelijk niet langer relevant is. Dit kan gebeuren als gevolg van fouten in het cachingsysteem of als gevolg van gegevensbeschadiging door andere systemen (programma's).

Opmerking: Natuurlijk zijn er gevallen met problemen als gevolg van storingen in de apparaten zelf, maar dit zijn zeer zeldzame gevallen.

Laten we eens kijken naar enkele veelvoorkomende cacheproblemen waarmee bijna iedereen te maken krijgt:

1. In het internettijdperk is het moeilijk om problemen met de browsercache niet op te merken. Het punt in dit geval is eenvoudig. Zoals ik al zei, slaat de browser de bestanden op die nodig zijn voor een mooie en correcte weergave van sites. Als deze bestanden op de site zijn bewerkt en de browser de bewerkte versie niet heeft gedownload, zullen er hoogstwaarschijnlijk fouten optreden: knoppen worden niet gestart, stijlen worden verplaatst, er verschijnen "gekke bugs", enz. Daarom hoor je vaak advies als je problemen hebt met websites: maak je browsercache leeg. Als je eerder dacht dat dit een grap was en iemand je voor de gek hield, dan is dit niet zo.

2. Programma's hebben cacheproblemen. Zoals reeds vermeld kan tijdelijke opslag op verschillende manieren georganiseerd worden en voor verschillende doeleinden bestemd zijn. Zo kan een bepaald programma bijvoorbeeld tussenresultaten in de cache opslaan, wat veel tijd kost om te berekenen. Als deze berekeningen ergens van afhankelijk zijn, kunnen er periodiek problemen optreden vanwege het feit dat de gegevens in de cache niet opnieuw zijn berekend. En hier adviseren ze ook vaak om de cache-opruimfunctie uit te voeren of bepaalde bestanden te verwijderen.

3. Cacheproblemen als gevolg van Windows-crashes. Het Windows-besturingssysteem bevat fouten. En dit feit op zichzelf is niet verrassend. Bijna elk gewoon programma bevat fouten. Maar Windows is een veel complexer systeem. Laten we bijvoorbeeld dezelfde browser nemen. Zoals eerder vermeld maakt de browser aantekeningen bij bestanden in de cache, zodat je altijd kunt volgen hoe actueel de bestandsversies zijn. Stel je nu voor dat de bestanden op de site niet zijn gewijzigd, maar dat door een Windows-fout de bestanden in de cache beschadigd zijn geraakt. Zoals je waarschijnlijk al geraden had, zullen de sites in dit geval met fouten worden geopend, omdat de bestanden volgens de browser up-to-date zijn en niet hoeven te worden gedownload, maar in feite is het tegendeel waar.

Een van de belangrijke factoren die de processorprestaties verbeteren, is de aanwezigheid van cachegeheugen, of beter gezegd het volume, de toegangssnelheid en de verdeling over niveaus.

Bijna alle processors zijn al geruime tijd uitgerust met dit type geheugen, wat eens te meer het nut van de aanwezigheid ervan bewijst. In dit artikel zullen we het hebben over de structuur, niveaus en het praktische doel van cachegeheugen, wat erg belangrijk is. processorkarakteristieken.

Wat is cachegeheugen en de structuur ervan

Cachegeheugen is ultrasnel geheugen dat door de processor wordt gebruikt om tijdelijk gegevens op te slaan die het meest worden gebruikt. Dit is hoe we dit type geheugen kort kunnen beschrijven.

Cachegeheugen is gebouwd op flip-flops, die op hun beurt uit transistors bestaan. Een groep transistors neemt veel meer ruimte in beslag dan dezelfde condensatoren waaruit ze bestaan RAM. Dit brengt veel productieproblemen met zich mee, evenals beperkingen in volume. Dat is de reden waarom cachegeheugen een erg duur geheugen is, terwijl het verwaarloosbare volumes heeft. Maar uit deze structuur komt het belangrijkste voordeel van een dergelijk geheugen voort: snelheid. Omdat flip-flops geen regeneratie nodig hebben en de vertragingstijd van de poort waarop ze zijn gemonteerd klein is, vindt de tijd voor het schakelen van de flip-flop van de ene toestand naar de andere zeer snel plaats. Hierdoor kan het cachegeheugen op dezelfde frequenties werken als moderne processors.

Een belangrijke factor is ook de plaatsing van het cachegeheugen. Het bevindt zich op de processorchip zelf, wat de toegangstijd aanzienlijk verkort. Voorheen bevond het cachegeheugen van sommige niveaus zich buiten de processorchip, op een speciale SRAM-chip ergens op het moederbord. Nu hebben bijna alle processors cachegeheugen op de processorchip.


Waar wordt de processorcache voor gebruikt?

Zoals hierboven vermeld, is het belangrijkste doel van cachegeheugen het opslaan van gegevens die vaak door de processor worden gebruikt. De cache is een buffer waarin gegevens worden geladen en ondanks zijn kleine formaat (ongeveer 4-16 MB) moderne verwerkers, het geeft een aanzienlijke prestatieverbetering in elke toepassing.

Om de behoefte aan cachegeheugen beter te begrijpen, kunnen we ons voorstellen dat het geheugen van een computer als een kantoor wordt georganiseerd. Het RAM-geheugen zal een kast zijn met mappen waartoe de accountant periodiek toegang heeft om grote blokken gegevens (dat wil zeggen mappen) op te halen. En de tabel zal een cachegeheugen zijn.

Er zijn elementen die op het bureau van de accountant worden geplaatst, waar hij in de loop van een uur meerdere keren naar verwijst. Dit kunnen bijvoorbeeld telefoonnummers zijn, enkele voorbeelden van documenten. Dit soort informatie bevindt zich direct op tafel, wat op zijn beurt de snelheid van toegang daartoe verhoogt.

Op dezelfde manier kunnen gegevens uit die grote datablokken (mappen) aan de tabel worden toegevoegd voor snel gebruik in bijvoorbeeld een document. Wanneer dit document niet langer nodig is, wordt het terug in de kast geplaatst (in RAM), waardoor de tabel wordt leeggemaakt (cachegeheugen) en deze tabel vrijkomt voor nieuwe documenten die in de volgende periode zullen worden gebruikt.

Ook met cachegeheugen: als er gegevens zijn waarvan de kans het grootst is dat ze opnieuw worden benaderd, worden deze gegevens uit het RAM in het cachegeheugen geladen. Heel vaak gebeurt dit door de gegevens die het meest waarschijnlijk zullen worden gebruikt, na de huidige gegevens te laden. Dat wil zeggen, er zijn aannames over wat er “na” zal worden gebruikt. Dit zijn de complexe werkingsprincipes.

Cacheniveaus van processor

Moderne processors zijn uitgerust met een cache, die vaak uit 2 of 3 niveaus bestaat. Natuurlijk zijn er uitzonderingen, maar dit is vaak het geval.

Over het algemeen kunnen er de volgende niveaus zijn: L1 (eerste niveau), L2 (tweede niveau), L3 (derde niveau). Nu wat meer details over elk van hen:

Cache op het eerste niveau (L1)– het snelste cachegeheugenniveau dat rechtstreeks met de processorkern werkt. Dankzij deze nauwe interactie heeft dit niveau de kortste toegangstijd en werkt het op frequenties dicht bij de processor. Het is een buffer tussen de processor en de cache op het tweede niveau.

We zullen volumes overwegen op een krachtige processor Intel Core i7-3770K. Deze processor is voorzien van 4x32 KB L1 cache 4 x 32 KB = 128 KB. (32 KB per kern)

Cache op het tweede niveau (L2)– het tweede niveau is grootschaliger dan het eerste, maar kent daardoor lagere “snelheidskenmerken”. Dienovereenkomstig dient het als buffer tussen de L1- en L3-niveaus. Als we opnieuw naar ons voorbeeld Core i7-3770 K kijken, dan is de L2-cachegeheugengrootte 4x256 KB = 1 MB.

Niveau 3-cache (L3)– het derde niveau is wederom langzamer dan de vorige twee. Maar het is nog steeds veel sneller dan RAM. De L3-cachegrootte in de i7-3770K is 8 MB. Als de vorige twee niveaus door elke kern worden gedeeld, is dit niveau gemeenschappelijk voor de hele processor. De indicator is behoorlijk solide, maar niet exorbitant. Omdat dit bijvoorbeeld voor processors uit de Extreme-serie, zoals de i7-3960X, 15 MB is, en voor sommige nieuwe Xeon-processors meer dan 20.

Ik ben er zeker van dat zelfs als je geen computer gebruikt, hoewel het moeilijk is om zo iemand in onze wereld te vinden, je het woord “CACHE” hebt gehoord. Het kan gerust de smerigste plek op een computer worden genoemd. Ja , niet de prullenbak, niet de gebruikersmappen, niet het koelsysteem , namelijk de cache. Deze moet regelmatig en efficiënt worden schoongemaakt.

Het meest interessante is dat er een groot aantal caches op de computer staan. Velen denken misschien dat de cache een soort afvalstortplaats voor de pc is. Maar eigenlijk is dat niet zo. Caches dienen als hardware- en applicatieversnellers. Maar hoe kwamen ze dan aan het label "systeemvuilnischute?!" Vandaag zullen we ontdekken wat precies een cache wordt genoemd, wat het is, hoe het werkt en waarom het periodiek moet worden schoongemaakt.

Cachegeheugen - concept en typen.

Een cache of cachegeheugen is een speciale opslag van veelgebruikte gegevens, die tientallen, honderden en duizenden keren sneller toegankelijk is dan RAM of andere opslagmedia.

Alle applicaties, webbrowsers, audio- en videospelers, database-editors, besturingssysteem- en hardwarecomponenten, namelijk de L1-L3-cache van de centrale processor, de framebuffer van de grafische chip, opslagbuffers en andere, hebben hun eigen cachegeheugen. Maar de implementatie ervan zal verschillend zijn voor alle bovengenoemde “elementen”: hardware of software.

Een programmacache is eenvoudigweg een afzonderlijke map of bestand waarin bijvoorbeeld afbeeldingen, menu's, scripts, multimedia-inhoud en andere inhoud van bezochte sites worden geladen. Het is deze map waar de browser voor het eerst in duikt wanneer u een webpagina opnieuw opent. Door bepaalde inhoud uit de lokale opslag op te roepen, wordt het laden ervan versneld en wordt het netwerkverkeer verminderd.



In schijven, inclusief harde schijven, is de cache een afzonderlijke RAM-chip met een capaciteit van 1-256 Mb, die zich op de elektronicakaart bevindt. Het ontvangt informatie die uit de magnetische laag is gelezen en nog niet in het RAM is geladen, evenals gegevens die het vaakst door het besturingssysteem worden opgevraagd.



Wat de moderne centrale processor betreft, deze bevat 2-3 hoofdniveaus cachegeheugen, ook wel ultra-random access memory genoemd. Ze worden in de vorm van hardwaremodules op dezelfde chip geplaatst. De snelste en kleinste in omvang (32-64Kb) is cacheniveau 1 (L1) - deze werkt op dezelfde frequentie als de processor. L2 neemt een gemiddelde positie in qua snelheid en capaciteit (van 128 Kb tot 12 Mb). En L3 is de langzaamste en meest omvangrijke (tot 40 Mb) en ontbreekt op sommige modellen. De snelheid van L3 is alleen laag in vergelijking met die van zijn snellere broers, maar hij is ook honderden keren sneller dan het meest productieve RAM-geheugen.

In het hoofdgeheugen van de processor worden gegevens opgeslagen die voortdurend worden gebruikt. Ze worden gepompt uit RAM- en machinecode-instructies. Hoe meer geheugen er is, hoe sneller de processor werkt.

Tegenwoordig zijn drie cachingniveaus verre van de limiet.

Intel Corporation, lange tijd een toonaangevend bedrijf in de productie van processors, heeft de Sandy Bridge-architectuur uitgevonden. Dankzij dit is er een extra cache "cache L0" beschikbaar gekomen. Deze sectie is verantwoordelijk voor het opslaan van gedecodeerde microcommando's.

En de krachtigste CPU's hebben ook een cache op het vierde niveau, gemaakt in de vorm van een afzonderlijke chip.

Schematisch ziet de interactie van cacheniveaus L0-L3 er als volgt uit (aan de hand van het voorbeeld van Intel Xeon):



Hoe alles werkt - wij leggen het binnen handbereik uit.

Om u duidelijker te maken hoe cachegeheugen werkt, stelt u zich een persoon voor die aan een bureau werkt. De documenten en mappen die hij gebruikt, liggen op tafel, dat wil zeggen in de geheugencache. Om toegang te krijgen, hoeft u alleen maar uw hand uit te steken.

Papier dat een persoon zeer zelden gebruikt, bevindt zich in de onderste mappen, dat wil zeggen in het RAM-geheugen. Om ze te bereiken, moet je opstaan ​​en een stukje lopen. En bestanden waarmee iemand momenteel niet werkt, worden gearchiveerd, dat wil zeggen naar de harde schijf geschreven.

Het wordt duidelijk dat hoe breder het bureau van een werkende persoon is, hoe meer documenten erop kunnen worden geplaatst. Zo heeft de medewerker snel toegang tot meer informatie. Nu begrijpt u waarom een ​​grotere cachecapaciteit ervoor zorgt dat uw programma of apparaat sneller werkt.

Soms maakt een medewerker fouten. Ze bestaan ​​uit het op tafel leggen van papieren die onbetrouwbare informatie bevatten en die bij het werk worden gebruikt. Na dergelijk werk zal de kwaliteit van het werk uiteraard afnemen. Dat wil zeggen, als er fouten in de cache voorkomen, zullen programma's en apparatuur defect raken. Om dit probleem op te lossen, moet de medewerker de bestanden met de fout vinden, weggooien en de juiste op hun plaats zetten. Dit heet het wissen van het cachegeheugen.

Hoewel de tabel groot kan zijn, is de ruimte erop beperkt, net als het cachegeheugen. Desondanks kun je meer ruimte aan de tafel toevoegen door er een tweede tafel aan toe te voegen. Maar soms is dit onmogelijk vanwege de grootte van de kamer. De grootte van het cachegeheugen kan worden vergroot als deze procedure door het programma wordt voorgeschreven. U kunt de cachehardware zelf niet wijzigen, omdat deze in de hardware is geïmplementeerd.

Maar u kunt het doen zonder uw werkruimte uit te breiden om sneller met bestanden te kunnen werken. U kunt een assistent inhuren die voor de benodigde map met bestanden zorgt. Dat wil zeggen dat het besturingssysteem een ​​deel van het ongebruikte RAM-geheugen kan toewijzen voor het cachen van apparaatgegevens. Maar zo'n assistent zal het werk niet echt versnellen, omdat het veel sneller is om zelf de nodige informatie op te nemen, omdat je precies weet waar en wat zich bevindt.

CCleaner. Als een cache-afhankelijke applicatie langzamer is geworden of regelmatig irrelevante gegevens downloadt, gebruik dan geplande tools voor het opruimen van de cache of doe dit om de paar dagen handmatig.

In feite komen we voortdurend bestandscaching tegen. Bijvoorbeeld het kopen van boodschappen voor toekomstig gebruik en alle handelingen die we tijdens dit proces als het ware tegelijkertijd ondernemen! Caching kan alles worden genoemd wat ons ervan weerhoudt onnodige drukte en bewegingen te maken. Als er geen cache op de computer was, zou de werking ervan aanzienlijk vertragen.

Ik weet zeker dat je nu de betekenis en het werkingsprincipe van de cache begrijpt. Daarom is het zo belangrijk om uw computer georganiseerd te houden, tenzij u hem wilt vertragen.