Gentoo Logo

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.



Stampa

Aggiornato il 9 ottobre 2005

Oggetto: Impara come aumentare le performance della swap sul tuo server Linux procedendo per gradi. L'autore, Daniel Robbins, vi mostrerà questo piccolo trucco per avere il massimo dal vostro server.

Daniel Robbins
Autore

Alberto Santini
Traduzione

Cristiano Chiucchiolo
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.