Che cos’è la falsa condivisione?

La falsa condivisione è una situazione che può verificarsi in un programma per computer quando due applicazioni in esecuzione contemporaneamente tentano di accedere alle informazioni nella stessa area di memoria logica che ciascun programma o processo ha memorizzato nella propria cache. I dati nella cache di ogni applicazione vengono copiati da un’origine comune, quindi la modifica di una cache fa sì che l’altra debba essere ricaricata dall’origine. Il falso aspetto della condivisione sorge quando le modifiche apportate alla linea della cache da un programma non influiscono effettivamente sui dati che il secondo programma sta utilizzando, nel qual caso forzare il ricaricamento della cache è uno spreco di risorse di sistema e può influire negativamente lo svolgimento del programma. Il problema della falsa condivisione è difficile da rilevare, perché non è un risultato diretto di alcun codice contenuto all’interno delle applicazioni, sebbene ci siano modi efficaci per prevenire la falsa condivisione, come lo spostamento dei dati che si trovano in una riga attualmente memorizzata nella cache su una riga separata .

Uno dei motivi principali per cui può verificarsi una falsa condivisione si trova nel modo in cui un sistema operativo o un hardware gestisce la lettura e la scrittura dei dati. Quando le informazioni da un disco rigido o da un’altra fonte vengono lette o scritte da un programma, di solito vengono caricate in una cache temporanea in modo che sia possibile accedervi rapidamente. La quantità di informazioni memorizzate nella cache dalla posizione di origine è chiamata linea di cache ed è un blocco logico di memoria che normalmente può avere una lunghezza compresa tra 2 byte e 256 byte. In alcuni sistemi operativi o architetture di sistema, i programmi possono essere eseguiti contemporaneamente, ad esempio nell’elaborazione parallela. Ciò significa che è possibile che due programmi separati tentino di accedere alle informazioni nella stessa riga della cache, quindi ogni programma avrà la propria copia dei dati di origine, causando potenzialmente che le modifiche in una cache non si rifletteranno nell’altra cache, invalidando il dati che contiene.

Ci sono un certo numero di meccanismi impiegati per gestire la situazione quando due programmi tentano di accedere alla stessa linea di cache, ma il risultato più spesso è che un programma è costretto a ricaricare la sua cache con le informazioni aggiornate che l’altro programma ha modificato. Questo tipo di incidente è noto come falsa condivisione quando i dati all’interno della linea della cache a cui ciascun programma sta accedendo non sono correlati, quindi forzare un programma a ricaricare la cache è uno spreco di potenza di elaborazione e altre risorse. Questo molto spesso è un problema per un programma che non modificherà mai le informazioni nella sua cache, quindi non c’è il rischio che l’applicazione sovrascriva le modifiche apportate dall’altro processo.

Esistono due modi prevalenti per prevenire o mitigare gli effetti della falsa condivisione. Il primo consiste nell’aggiungere informazioni vuote prima o dopo i dati in memoria, forzandole essenzialmente in una riga di cache separata a cui non accede un altro programma. Il secondo metodo consiste nel limitare la frequenza di lettura e scrittura sulla linea della cache in modo che venga ricaricata il meno possibile. Le soluzioni più complesse implicano la gestione a livello di cache o persino modifiche al modo in cui un sistema operativo gestisce la condivisione.