Cache

Caching è un termine usato in informatica. L'idea alla base di una cache (si pronuncia "cash" /ˈkæʃ/ KASH ) è molto semplice: Molto spesso, ottenere un risultato per un calcolo richiede molto tempo, quindi memorizzare il risultato è generalmente una buona idea. Si utilizzano due tipi di supporti di memorizzazione: Uno è di solito abbastanza grande, ma l'accesso è "lento"; l'altro è molto più veloce, ma generalmente è piccolo. L'idea di base del caching è quella di utilizzare il supporto che è veloce da accedere per avere copie dei dati. Non c'è differenza tra la copia e l'originale. L'accesso ai dati originali può richiedere molto tempo, o può essere costoso da fare (per esempio: i risultati di un problema difficile che richiede molto tempo per essere risolto). Per questo motivo, è molto più "economico" utilizzare semplicemente la copia dei dati dalla cache. Mettiamola in modo diverso, una cache è un'area di memorizzazione temporanea che ha copie di dati che viene utilizzata spesso. Quando una copia dei dati è in questa cache, è più veloce usare questa copia piuttosto che recuperare o ricalcolare i dati originali. In questo modo il tempo medio necessario per accedere ai dati sarà più breve. Mettere un nuovo valore in una cache spesso significa che un valore più vecchio deve essere sostituito. Ci sono diverse idee (di solito chiamate "strategie") su come selezionare il valore da sostituire.

Un buffer è molto simile a una cache. È diverso in quanto il cliente che accede ai dati in un buffer sa che c'è un buffer; il buffer è gestito dall'applicazione. Con una cache, il cliente che accede ai dati non deve essere consapevole della presenza di una cache.

Le tipiche applicazioni informatiche accedono ai dati in modi molto simili. Supponiamo che i dati siano strutturati in "blocchi", ai quali si può accedere individualmente. Quando un'applicazione accede ad un blocco, è anche molto probabile che acceda (o faccia riferimento) ad un blocco "vicino" al blocco originale. Questo è noto come località di riferimento. Esistono diversi tipi di "località" di questo tipo. La località di riferimento è uno dei motivi per cui le cache funzionano bene in molti settori dell'informatica.

Per funzionare bene, i cache sono piccoli, rispetto all'intera quantità di dati. Più grande è la cache, più tempo ci vuole per cercare una voce. Le cache più grandi sono anche più costose da costruire.

Come funzionano i cache

Una cache è un blocco di memoria per la memorizzazione dei dati che viene probabilmente riutilizzato. La CPU e il disco rigido spesso usano una cache, così come i browser web e i server web.

Una cache è composta da molte voci, chiamate pool. Ogni voce contiene un dato (un bit di dati) che è una copia di un dato in un altro luogo. Le cache di solito usano quello che viene chiamato un archivio di backup. I negozi di backup sono lenti o costosi da accedere, rispetto alla cache. Una cache su disco usa un disco rigido come store di backup, per esempio. Ogni voce ha anche una piccola informazione allegata, chiamata tag. Questo tag viene utilizzato per trovare la posizione in cui sono memorizzati i dati originali.

Cache per la lettura

Un client (una CPU, un browser web, un sistema operativo) vuole accedere ad un bit di dati, crede di essere nel negozio di backup, controlla prima di tutto se il dato può essere trovato nella cache. Se i dati possono essere trovati nella cache, il client può utilizzarli e non ha bisogno di utilizzare la memoria principale. Questo è noto come "hit della cache". Così, ad esempio, un programma di browser web potrebbe controllare la sua cache locale su disco per vedere se ha una copia locale del contenuto di una pagina web ad un determinato URL. In questo esempio, l'URL è il tag, e il contenuto della pagina web è il dato.

L'altra situazione che può verificarsi è che il dato con il tag non può essere trovato nella cache. Questo è noto come cache miss. Il dato deve essere recuperato dal negozio di supporto. Di solito viene copiato nella cache, in modo che la volta successiva non debba più essere recuperato dal negozio di backup.

La cache ha una dimensione limitata. Per fare spazio alla voce precedentemente non memorizzata, potrebbe essere necessario cancellare dalla cache un'altra voce della cache. Per trovare la voce che deve essere eliminata nel modo migliore si applicano regole speciali. Queste regole sono di solito chiamate euristiche. Le euristiche utilizzate per trovare la voce sono chiamate politiche di sostituzione. Una regola molto semplice utilizzata è chiamata Least recently used (o LRU). Prende semplicemente la voce che è stata utilizzata più a lungo. Altre euristiche sono elencate all'algoritmo di cache...

Cache per la scrittura

Le cache possono essere utilizzate anche per la scrittura di dati; il vantaggio è che il cliente può continuare il suo funzionamento una volta che la voce è stata scritta nella cache; non deve aspettare che la voce sia scritta nel negozio di supporto.

Tuttavia, l'iscrizione deve essere scritta al negozio di supporto ad un certo punto. Il momento in cui ciò accade è controllato dalla politica di scrittura.

In una cache di scrittura, ogni voce viene scritta immediatamente nel negozio di supporto, oltre ad essere memorizzata nella cache.

L'altra opzione è quella di scrivere solo nella cache, e di scrivere al negozio di supporto in un secondo momento. Questo è noto come write-back (o scrivi dietro) cache. La cache contrassegna le voci che non sono ancora state scritte nel negozio di supporto; il contrassegno utilizzato viene spesso chiamato "dirty flag" (bandiera sporca). Prima di essere cancellate dalla cache, le voci vengono scritte nell'archivio di supporto. Questo è noto come scrittura pigra. Un miss in una cache di write-back (che richiede la sostituzione di un blocco con un altro) ha spesso bisogno di due accessi alla memoria: uno per ottenere il dato necessario e un altro per scrivere i dati sostituiti dalla cache all'archivio.

La politica di caching può anche dire che un certo dato deve essere scritto nella cache. Il cliente può aver apportato molte modifiche al dato nella cache. Dopo averlo fatto, può dire esplicitamente alla cache di riscrivere il dato.

L'allocazione senza scrittura è una politica di cache in cui vengono messe in cache solo le letture. In questo modo si evita la necessità di un caching di tipo "write-back" o "write-through caching". Le scritture vengono sempre effettuate nel negozio di supporto.

Il cliente non è l'applicazione che modifica i dati nell'archivio di backup. Se i dati vengono modificati nell'archivio di backup, la copia nella cache sarà obsoleta o vecchia. In alternativa, quando il cliente aggiorna i dati nella cache, le copie di quei dati in altre cache diventeranno obsolete. Ci sono speciali protocolli di comunicazione che permettono ai gestori della cache di parlare tra loro per mantenere i dati significativi. Questi sono noti come protocolli di coerenza.

Schema di una cache di memoria della CPUZoom
Schema di una cache di memoria della CPU

Selezione della voce da sostituire

Una cache è piccola, e sarà piena, o quasi piena, la maggior parte delle volte. Quindi, quando si aggiunge un nuovo valore, è necessario rimuovere quello vecchio. Ci sono diversi modi in cui questa selezione può essere fatta:

  • Il primo ad entrare, il primo ad uscire: Sostituire semplicemente la voce che è stata aggiunta alla cache più tempo fa
  • Almeno usato di recente: Questa idea è simile al FIFO di cui sopra, ma quando si usa una voce, il suo timestamp/age viene aggiornato.
  • Meno usato frequentemente: Anche in questo caso, simile al caso FIFO, invece di utilizzare un timestamp utilizzare un contatore, che viene incrementato ogni volta che si utilizza una voce
  • Scegliere una voce a caso

Storia

La parola cache è stata usata per la prima volta in informatica nel 1967, quando fu preparato un articolo scientifico da pubblicare sull'IBM Systems Journal. L'articolo riguardava un nuovo miglioramento della memoria del modello 85. Il modello 85 era un computer della linea di prodotti IBM System/360. L'editore del Journal voleva una parola migliore per buffer ad alta velocità, usata nell'articolo. Non ricevette alcun input, e suggerì la cache, dal cacher francese, che significava "nascondere". L'articolo fu pubblicato all'inizio del 1968, e gli autori furono onorati dalla IBM. Il loro lavoro fu ampiamente accolto e migliorato. La cache divenne presto un uso standard nella letteratura informatica.

Dove si usano i cache

Cache della CPU

Piccole memorie su o vicino al chip della CPU possono essere realizzate più velocemente della memoria principale, molto più grande. La maggior parte delle CPU a partire dagli anni '80 ha utilizzato una o più cache. Le moderne CPU per uso generale all'interno dei personal computer possono averne anche una mezza dozzina. Ogni cache può essere specializzata in una parte diversa del compito di esecuzione dei programmi.

Nascondigli per dischi

Le cache della CPU sono generalmente gestite interamente dall'hardware, le altre cache sono gestite da un diverso tipo di software. Il sistema operativo di solito gestisce una cache delle pagine nella memoria principale. Gli utenti al di fuori dell'informatica di solito chiamano questa cache memoria virtuale. Essa è gestita dal kernel del sistema operativo.

I moderni dischi rigidi sono dotati di buffer per i dischi. Questi sono a volte chiamati "cache del disco", ma questo è sbagliato. La funzione principale di questi buffer è quella di ordinare le scritture su disco e di gestire le letture. I colpi ripetuti di cache sono rari, perché il buffer è molto piccolo rispetto alle dimensioni del disco rigido.

Gli hard disk locali sono veloci rispetto ad altri dispositivi di memorizzazione, come server remoti, unità a nastro locali o jukebox ottici. L'utilizzo di dischi rigidi locali come cache è il concetto principale di gestione gerarchica dello storage.

Cache sul web

I browser web e i server proxy web utilizzano cache per memorizzare le risposte precedenti dei server web, come ad esempio le pagine web. Le cache web riducono la quantità di informazioni che devono essere trasmesse in rete. Le informazioni precedentemente memorizzate nella cache possono spesso essere riutilizzate. Ciò riduce la larghezza di banda e i requisiti di elaborazione del server web e contribuisce a migliorare la reattività per gli utenti del web.

I browser web moderni utilizzano una cache web integrata, ma alcuni provider di servizi internet o organizzazioni utilizzano anche un server proxy per la cache. Si tratta di una cache web che viene condivisa tra tutti gli utenti di quella rete.

I motori di ricerca spesso rendono disponibili nella loro cache anche le pagine web che hanno indicizzato. Ad esempio, Google fornisce un link "Cached" accanto ad ogni risultato di ricerca. Questo è utile quando le pagine web sono temporaneamente inaccessibili da un server web.

Caching con reti inaffidabili

Il funzionamento in scrittura è comune nelle reti inaffidabili (come una LAN Ethernet). Il protocollo utilizzato per assicurarsi che i dati nella cache di scrittura abbiano senso quando vengono utilizzate più cache di scrittura è molto complesso, in questo caso.

Per esempio, le cache delle pagine web e le cache dei file system di rete lato client (come quelle in NFS o SMB) sono tipicamente di sola lettura o scrittura per mantenere il protocollo di rete semplice e affidabile.

La differenza tra buffer e cache

Buffer e cache non si escludono a vicenda, ma sono spesso usati insieme. Il motivo per cui vengono usati è però diverso. Un buffer è una posizione nella memoria che viene tradizionalmente usata perché le istruzioni della CPU non possono indirizzare direttamente i dati memorizzati nelle periferiche. La memoria del computer è usata come archivio intermedio.

Inoltre, tale buffer può essere realizzabile quando un grande blocco di dati viene assemblato o smontato (come richiesto da un dispositivo di memorizzazione), o quando i dati possono essere consegnati in un ordine diverso da quello in cui vengono prodotti. Anche un intero buffer di dati viene di solito trasferito in sequenza (ad esempio su disco rigido), quindi il buffering stesso a volte aumenta le prestazioni di trasferimento. Questi benefici sono presenti anche se i dati bufferizzati vengono scritti una volta nel buffer e letti una volta dal buffer.

La cache aumenta anche le prestazioni di trasferimento. Una parte dell'aumento deriva anche dalla possibilità che più piccoli trasferimenti si combinino in un unico grande blocco. Ma il principale aumento delle prestazioni si verifica perché c'è una buona probabilità che lo stesso dato venga letto più volte dalla cache, o che i dati scritti vengano presto letti. L'unico scopo della cache è quello di ridurre gli accessi alla memoria sottostante più lenta. La cache è anche di solito un livello di astrazione che è progettato per essere invisibile dal punto di vista dei livelli vicini. In questo modo, le applicazioni o i client potrebbero non essere consapevoli della presenza di una cache.

Domande e risposte

D: Che cos'è la cache?


R: La cache è un termine utilizzato in informatica che si riferisce alla pratica di memorizzare copie di dati che vengono utilizzati spesso, per accedervi più rapidamente rispetto al reperimento o al ricalcolo dei dati originali.

D: Come funziona il caching?


R: Il caching funziona utilizzando due tipi di supporti di archiviazione, uno che di solito è abbastanza grande ma lento da raggiungere, e un altro a cui si può accedere molto più velocemente, ma generalmente più piccolo. L'idea alla base del caching è di utilizzare il supporto veloce per memorizzare copie di dati, in modo che l'accesso ai dati originali richieda meno tempo o sia meno costoso.

D: Che cos'è un buffer?


R: Un buffer è simile a una cache, in quanto archivia copie di dati per un accesso più rapido; tuttavia, con un buffer, il client che accede ai dati sa che esiste un buffer ed è gestito da un'applicazione, mentre con una cache, i client non devono sapere che esiste una cache.

D: Che cosa significa località di riferimento?


R: La località di riferimento significa che quando un'applicazione accede a determinati blocchi di dati strutturati, è probabile che acceda anche ad altri blocchi vicini a quelli a cui ha avuto accesso inizialmente. Questo aiuta le cache a funzionare bene, in quanto sono tipicamente piccole rispetto a tutti i dati disponibili.

D: Perché le cache più grandi impiegano più tempo per cercare le voci?


R: Le cache più grandi richiedono più tempo perché contengono più informazioni memorizzate e quindi richiedono più tempo per le ricerche. Sono anche più costose, perché richiedono più risorse per l'archiviazione.

D: In che modo la localizzazione può aiutare a far funzionare meglio le cache?


R: La localizzazione aiuta a far funzionare meglio le cache perché quando le applicazioni accedono a determinati blocchi di dati strutturati, è probabile che abbiano bisogno anche di altri blocchi vicini, che possono essere recuperati rapidamente dalla cache invece di doverli recuperare altrove o ricalcolarli di nuovo.

AlegsaOnline.com - 2020 / 2023 - License CC3