La nuova versione stabilizza l'implementazione dello storage "
Extstore ti consente di utilizzare unità SSD/Flash per espandere la dimensione della cache. Come per la RAM, la memoria Flash non è permanente e viene ripristinata al riavvio. Lo scopo della nuova modalità è garantire una memorizzazione nella cache efficiente di dati di grandi dimensioni. Quando si utilizza "extstore", le chiavi e i metadati vengono, come prima, archiviati solo nella RAM, ma i dati di grandi dimensioni associati alle chiavi, la cui dimensione supera una soglia impostata, vengono archiviati nella memoria esterna e solo il puntatore rimane nella RAM.
Se la chiave è associata a dati di piccole dimensioni, Memcached funziona normalmente, mantiene i dati in memoria e non accede alla memoria esterna. Se c'è molta memoria libera, i dati più necessari possono inoltre essere completamente posizionati nella cache nella RAM (ad esempio, è possibile specificare che solo gli oggetti più grandi di 1024 byte a cui non è stato effettuato l'accesso per 3600 secondi vengano reimpostati su Flash ).
L'implementazione è ottimizzata per garantire le massime prestazioni e il minimo carico della CPU, a scapito dell'efficienza dello storage (alto livello di frammentazione). Per prolungare la durata delle unità Flash, i dati vengono memorizzati nel buffer e scaricati nello spazio di archiviazione in sequenza. Per salvare lo stato della cache tra un riavvio e l'altro, è possibile utilizzare la funzionalità apparsa nella versione 1.5.18 per eseguire il dump di un dump della cache in un file. Al successivo avvio è possibile ripristinare la cache da questo file per eliminare i picchi di carico sui processori di contenuto dovuti allo svuotamento della cache (la cache diventa immediatamente “calda”).
Il secondo cambiamento importante in Memcached 1.6 è stata la rielaborazione del codice di comunicazione di rete, che è stato adattato per elaborare automaticamente le richieste batch all'interno di una singola chiamata di sistema. In precedenza, quando si inviavano più comandi GET in un singolo pacchetto TCP, memcached inviava i risultati con chiamate di sistema separate. In Memcached 1.6, le risposte vengono aggregate e restituite inviando una singola chiamata di sistema. Di conseguenza, ora c'è una media di 1.5 chiavi per chiamata di sistema, che nei test dimostra una riduzione del carico della CPU fino al 25% e una riduzione della latenza di diversi punti percentuali.
La riprogettazione del sottosistema di rete ha inoltre reso possibile il passaggio all'allocazione dinamica dei buffer secondo necessità, invece dell'assegnazione statica dei buffer. Questa ottimizzazione ha ridotto il consumo di memoria durante l'attesa di nuovi comandi tramite una connessione stabilita dal client da 4.5 KB a 400-500 byte e ha anche permesso di eliminare molte chiamate a malloc, realloc e free, che portano a un'inutile frammentazione della memoria su sistemi con un gran numero di connessioni. Ogni thread di lavoro ora gestisce il proprio pool di buffer di lettura e scrittura per le connessioni client attive. Per regolare la dimensione di questi buffer
sono fornite le opzioni “-o resp_obj_mem_limit=N” e “-o read_buf_mem_limt=N”.
Il ramo 1.6 ha anche annunciato la deprecazione di
Fonte: opennet.ru