Squid Cap 9

Cap 9 dello squidbook — Il Cache Store di Squid

L'ottimizzazione del cache store è influnzata da molti parametri e ci sono degli studi sul libro basati su sistemi ormai datati. In ogni caso le considerazioni generali sono sempre valide.
Le parti da analizzare sono due disco e memoria guardiamole una per volta.
Si tiene conto di solo queste due perchè come dice il paragrafo 7.3.2 di squid

Squid non utilizza in maniera intensiva la CPU, solo al momento dell'avviamento la CPU lavora a pieno regime perchè Squid deve verificare la validità gli oggetti contenuti nella cache. Ne consegue che una CPU di vecchia generazione può penalizzare l'accesso agli oggetti presenti nella cache unicamente nei minuti successivi all'avviamento di Squid. Un sistema Pentium 300 Mhz può già essere sufficente per eseguire Squid in piccole realtà aziendali (massimo 50 utenti).

Inoltre per completare il discorso vediamo anche il paragrafo successico 7.3.3 SMP
L'utilizzo di un sistema multiprocessore non aumenta in modo significativo le performance di Squid in quanto l'applicazione è basata su un processo singolo che non ricorre alla tecnologia SMP. Nel caso volessimo ottenere dei grandi benefici dall'utilizzo di SMP dovremo eseguire istanze multiple di Squid e trovare il sistema di distribuire gli utenti sulle diverse istanze.

Disco

Nel paragrafo 9.2 suggerisce alcune modalità di montaggio del file system da verificare visto che sono info abbastanza datate lasciamo perdere ext2 e ufs e dato che sul mio sistema centos di prova c'è il buon ext3 riferiamoci a quello senza modificare le impostazioni di default di montaggio per ora.
Nel paragrafo 9.4 spiega un po' l'allocazione di spazio dei file system e fa la considerazione che più è grande lo spazio di cache che squid usa per archiviare i dati maggiore sarà l'ottimizzazione … ma non mi dire :-)
Suggerisce di usare 7 GByte di spazio, prestando attenzione a non saturare lo spazio del sistema operativo.
Ecco la direttiva da usare

cache_dir ufs /usr/share/squid/cache 5000 16 256

Il primo parametro ufs non c'entra con il tipo di file system del sistema operativo ma definisce unicamente il metodo di accesso e di implementazione utilizzati internamente dal processo Squid per la gestione del Disk I/O. Attualmente vengono implementati ben 5 differenti sistemi di Disk Storage ufs, aufs (awin32 in Windows), diskd, null, coss. usf è quello di default

Nel paragrafo 9.6.7. Scelta del Disk storage più adatto vi è una tabella che spiega quale usare. Penso che sia molto interessante quindi la voglio riportare.

I/O sincrono I/O asincrono I/O fittizio
ufs - - singola cache, poche transazioni/sec
- aufs - cache multiple, molte transazioni/sec,sistema operativo con supporto POSIX-threads
- awin32 - cache multiple, molte transazioni/sec, sistema operativo Windows
- diskd - cache multiple, molte transazioni/sec, istema operativo con supporto USER-threads
- - null modalità solo proxy, reverse proxy

Nel caso di partenza usiamo usf che è il sistema nativo di squid si basa su una struttura di directory a 2 livelli dove i valori di default prevedono ben 16 directory per il primo livello (L1) e 256 per il secondo (L2). Tutti gli oggetti presenti nella cache di Squid sono immagazzinati come file all'interno del secondo livello, tutte le operazioni di I/O sono gestite in modalità sincrona direttamente dal Sistema Operativo e possono bloccare il funzionamento del processo principale di Squid sino al loro completamento.

cache_dir ufs Directory-Name MBytes L1 L2 [options]

Questo spiega il significato della direttiva vista sopra L1 è il numero di directory di primo livello, L2 è il numero di directory di secondo livello ed il numero massimo di oggetti per directory, infine MBytes indica la dimensione massima in MBytes di questo Disk Storage.
La struttura delle directory di cache viene creata al momento del lancio del comando squid3 -zX

Memoria

Nelle faq fa qualche calcolo relativo alla dimensione degli oggetti della versione 2.5, l'ultima versione della 2.x e la 2.7 poi vi è la 3 .
Un apposita area di memoria definita con il TAG cache_mem di squid.conf viene riservata per contenere i seguenti tipi di oggetto In-Transit objects, Hot objects, Negative-Cached objects.
Gli oggetti di tipo In-Transit hanno sempre priorità sugli altri. Quando è necessario dello spazio addizionale per i dati in arrivo, gli oggetti di tipo Negative-Cached e Hot vengono rilasciati. Possiamo anche dire che gli oggetti di tipo Negative-Cached e Hot possono occupare solamente lo spazio inutilizzato che quindi non è necessario agli oggetti del tipo In-Transit.
Vediamo un po' di direttive di configurazione:

cache_mem 64 MB

questo tag specifica la memoria massima utilizzabile per contenere tutti e tre i tipi di oggetto, il valore predefinito è di 8 MB. il TAG cache_mem non determina l'occupazione massima di memoria che viene effettuata da Squid.
high_memory_warning 80 MB

Questo tag viene usato per tenere sotto controllo l'utilizzo della memoria. Se l'utilizzo della memoria supera i valori da noi impostati, Squid registra un WARNING nel file cache.log anche se il debug level è impostato a 0.
maximum_object_size 8192 Kb

Specifica la dimensione massima degli oggetti memorizzabili nel disk storage. Valori bassi forniscono un maggiore adattabilità della cache ai cambiamenti ma ovviamente consumano più banda internet. Il valore predefinito è 4096 Kb. Valori più alti permetto un maggiore corrispondenza di ricerche con successo senza accedere ad internet.
mimum_object_size 1 Kb

specifica la dimensione minima degli oggetti memorizzabili nel disk storage è valore predefinito è 0
maximum_object_size_in_memory 64 Kb

specifica la dimensione massima degli oggetti conservabili nel Memory Storage. È raccomandabile impostare questo parametro con un valore che consenta la memorizzazione degli oggetti con un elevato hit rate, senza però sovraccaricare il Memory Storage con oggetti di dimensioni elevate. Il valore predefinito é 8 KByte

Paragrafo 9.8 vi sono gli algoritmi predefiniti per il rimpiazzamento della cache. LRU è il predefinito

Indicazione dimensionamento del cache store

Come abbiamo visto prima per gli oggetti si utilizza il parametro

cache_mem 49 MB

Come indicazioni si dice di usare per quest'area non dovrebbe mai superare 1/4 della memoria ram totale installata sul sistema. Vi sono alcune note di utilizzo che facendo qualche calcolo indicano che per un disk storage di 1 GB servono 6 MB di ram e per un disk storage di 8 GB 48 MB di Ram, questi calcoli sono fatti tenendo conto della dimensione degli oggetti quindi potrebbero variare in base alla versione di squid a cui si fa riferimento.

Un'altra variabile da tenere in considerazione al fine di ottenere delle ottime performance, è quella di definire approssimativamente il numero degli utenti che dovranno utilizzare Squid. La letteratura disponibile in materia, consiglia una assegnazione di circa 20 MByte di spazio cache_dir (quindi disco) per ogni utente che accede al proxy server Squid. Dunque 20 utenti contemporanei dovrebbero rappresentare 400 MByte di cache_dir storage.

Un'altra soluzione empirica è quella di definire 10 MByte di RAM per ogni GByte di cache_dir, per le piattaforme a 64 bit come Alpha ed Opteron, il valore deve essere di 14 MByte per ogni GByte, più ulteriori 10 - 20 MByte (15 - 30 nei sistemi a 64 bit).

Alla fine del capitolo 9 vi è una soluzione di utilizzo di squid con due proxy bilanciati tramite wdpa configurati in fail over

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License