Disclaimer :
La versione originale di questo articolo è stata pubblicata da IBM
developerWorks ed è di proprietà di Westtech Information Services. Questo
documento è una versione aggiornata dell'articolo originale, e contiene
numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.
|
Massimizzare la swappage (pagina di swap)
1.
Ottenere il massimo dalla swap
Non appena configurate un server Linux nuovo, create una sola partizione di swap
da 128 MB? Se è così, sapete che state limitando enormemente le performance
della swap? Volete aumentare le prestazioni della swap andando per gradi e
creare partizioni di swap anche più larghe di 1 GB? E` possibile, senza alcun
bisogno di patch per il kernel o di hardware speciale.. è solo saper fare Geek!
Per alcuni di voi, la swap potrebbe non rivestire grande importanza. Dopotutto,
i sistemi Linux, sono tipicamente efficienti per quel che riguarda la gestione
della memoria e spesso la swap è poco usata. Mentre questo è vero per i sistemi
desktop, con i server è tutta un`altra storia. Dal momento che i server possono
affrontare sforzi imprevisti, come processi impazziti, attacchi DoS (Denial of
Service), o anche l'effetto Slashdot, hanno bisogno di una quantità adeguata di
swap ad alta velocità, in modo che non siano obbligati a fermarsi e
possibilmente ad andare in crash quando tutta la memoria fisica si è esaurita.
Ancora non siete convinti dell`importanza della swap? Vi mostrero` com`è facile
bloccare un server lanciando un numero enorme di nuovi processi.
Avvertenza:
Attenzione! Se provate a fare quanto segue, fatelo solo su un server non in
funzione e di cui siete gli amministratori!
|
Supponiamo che abbiate due comandi grep personalizzati in /usr/bin
, chiamati bobgrep e jimgrep. Ora, supponiamo che
bobgrep sia semplicemente uno shell script che chiama l'eseguibile ELF
jimgrep, come mostrato di seguito:
Codice 1.1: Lo script bobgrep |
#!/bin/bash
jimgrep -r $*
|
Tutto sembra a posto in questo modo, ma cosa succederebbe se casualmente
jimgrep venisse sostituito con un link simbolico a bobgrep? In quel
caso, eseguire bobgrep o jimgrep causerebbe un loop infinito
facendo moltiplicare in pochi secondi parecchie migliaia di processi. Un caso
del genere mi è già capitato una volta e, credetemi, causa non pochi problemi!
Se un server non dispone di sufficiente swap, una situazione come questa può
causare un blocco totale della macchina in meno di un minuto. Come possiamo
risolvere il problema? Una possibile risposta sarebbe quella di aumentare le
dimensioni della swap oltre i 128 MB. Per nostra fortuna, non 128 MB non
rappresentano un limite alle dimensioni della swap, se si usa un kernel 2.2 o
superiore, al contrario di com`era in passato. Il limite corrente è di circa
2 GB su piattaforme x86, PowerPC e MC680x0, 512 MB sui sistemi MIPS, 128 GB su
piattaforma Alpha ed addirittura 3 TB su piattaforma UltraSparc!
Codice 1.2: Dimensioni limite delle partizioni di swap con kernel moderni |
x86 2 Gigabyte
PowerPC 2 Gigabyte
Motorola 680x0 2 Gigabyte
Sparc 1 Gigabyte
MIPS 512 Megabyte
Alpha 128 Gigabyte
UltraSparc 3 Terabyte
|
Nonostante sia buono aumentare le dimensioni della partizione di swap oltre i
128 MB, che ne dite di aumentare le performance? Teoricamente, sarebbe bello se
potessimo usare le partizioni di swap in RAID 0, in modo da leggere e scrivere
in parallelo ed ugualmente da tutte le partizioni. Se le partizioni si trovano
su dischi diversi, questo moltiplicherà le performance, permettendo al vostro
server di gestire temporaneamente elevati usi di memoria, senza andare
drammaticamente in blocco.
Fortunatamente, tutti i kernel Linux moderni, permettono di usare la swap in
parallelo (senza nessuna opzione speciale o patch), come se fosse in RAID 0.
Usando l'opzione pri in /etc/fstab per impostare la stessa
priorità su più partizioni swap, Linux le usera' in parallelo:
Codice 1.3: Impostare più partizioni swap alla stessa priorità |
/dev/sda2 none swap sw,pri=3 0 0
/dev/sdb2 none swap sw,pri=3 0 0
/dev/sdc2 none swap sw,pri=3 0 0
/dev/sdd2 none swap sw,pri=1 0 0
|
Nell'esempio precedente, Linux userà le partizioni di swap sda2, sdb2 ed sdc2 in
parallelo. Dal momento che le partizioni sono in dischi differenti, e
possibilmente anche su controller SCSI diversi, la velocità di lettura e scrittura
su di esse all`incirca triplicherà. La quarta partizione di swap, sdd2, entrerà in
funzione soltanto dopo che lo spazio sulle altre tre si sarà esaurito.
L'opzione pri è veramente facile da usare. La priorità dev`essere un
numero compreso tra 0 e 32767, con 32767 che rappresenta la priorità maggiore.
Le partizioni di swap saranno usate da quella a priorità più alta a quelle con
priorità più bassa, in modo che una partizione con priorità x sarà usata soltanto
se tutte le partizioni con priorità maggiore di x sono piene. Se più partizioni
hanno la stesso priorità, Linux le userà automaticamente in parallelo. Questo
permette non soltanto di usare la swap in parallelo, ma anche di usare prima le
partizioni sui dischi (o regioni di disco) più veloci. In questo modo, potrete
impostare una partizione di swap di emergenza su un disco vecchio e lento, da
usarsi soltanto quando lo spazio su tutte le partizioni di swap su dischi veloci
si sia esaurito.
Bene, è tempo di mettere in pratica un po' di questa conoscenza sulla swap. Come
direbbe Mr.Miyagi di Karate Kid: "Swap on, swap off, geek-san!"
Risorse
-
Nel documento "Partitioning
in action: Moving /home" spiego, passo dopo passo, come spostare
/home in una nuova partizione.
-
Nel documento "Partitioning
in action" spiego, passo dopo passo, come spostare /var e
/tmp in una nuova partizione.
-
Nel mio secondo tip,
"Partition planning tips", condivido con voi alcuni modi per ottimizzare
il partizionamento dei dischi.
-
La guida per l'amministratore di sistema linux, "Linux system
administrator's guide" ospitata nell'home page di Red Hat.
-
Per maggiori informazioni su come ottimizzare le performance del file system,
date un'occhiata al "Linux Software RAID
HOWTO" di Linas Vepstas. Dal momento che molto codice sul Software RAID
è stato introdotto a partire dal kernel 2.3, è un buon modo per incrementare
ulteriormente le performance dei dischi sotto Linux
Circa l`autore
Daniel Robbins vive ad Albuquerque, in Nuovo Messico. Era il Presidente di Gentoo
Technologies Inc., Chief Architect del Gentoo Project ed è autore di numerosi libri
pubblicati da MacMillan: Caldera OpenLinux Unleashed, SuSE Linux Unleashed, e Samba
Unleashed. Daniel è entrato nel mondo dei computer sin dalle superiori, quando si
espose per la prima volta al linguaggio Logo e a dosi potenzialmente letali di Pac
Man. Questo forse spiega il perchè abbia addirittura assunto il ruolo di Lead Graphic
Artist alla SONY Electronic Publishing/Psygnosis. A Daniel piace passare del tempo
con sua moglie Mary e con la sua figlioletta, Hadassah. Potete contattare Daniel
all`indirizzo Daniel Robbins.
|