In Linux, quando si installa un sistema su di un bellissimo hard disk nuovo di zecca, si nota che il disco in questione è stato partizionato in una parte primaria – dove ci stanno dati, boot e altro – e una parte di swap.
Name Flags Part Type FS Type [Label] Size (MB) sda1 Primary Linux ext3 60003.42 sda2 Boot Primary Linux ext3 [idrogeno] 98999.48 sda3 Primary Linux swap / Solaris 1036.39
Ma cos’è la swap partition?
Una utile guida mi viene in aiuto: Linux Partition HOWTO, di Anthony Lissot version 3.5, 30 Nov 2005, (basata sulla guida di Kristian Koehntopp del 1997)
Ogni processo funzionante sul nostro computer è localizzato in un numero di blocchi nella RAM. Questi blocchi sono chiamati pages. Il set di istruzioni che andrà presto in uso è detto working set; Linux prova a predire questi accessi alla memoria (assumendo che le pages usate di recente siano usate anche nel prossimo futuro) e tiene queste pages nella RAM, se possibile.
In Linux, RAM e spazio swap si sommano (non è vero per tutti gli Unix). In sostanza: 256 Mb di RAM + 256 Mb di swap fanno un totale di 512 Mb di memoria virtuale.
Se ci sono troppi processi avviati sulla box, il kernel tenterà di liberare RAM scrivendo le pages sul disco: questa è la ragione per cui esiste lo spazio di swap; in effetti esso incrementa l’ammontare di memoria disponibile – è necessario comunque ricordare che l’I/O del disco è centinaia di volte più lento della RAM. (Insomma, la memoria è di emergenza, e non un’extra.)
Se la memoria diventa così scarsa che il kernel va a leggere i processi (working set) sul disco, la box comincia a rallentare enormemente e il disco viene letto in maniera molto insistente.
idrogeno:~# nmap -O 192.168.0.0/24
Starting Nmap 4.53 ( http://insecure.org ) at 2008-02-08 21:54 CET
Interesting ports on idrogeno (192.168.0.1):
Running: Linux 2.6.X
OS details: Linux 2.6.22 – 2.6.23
Uptime: 6.947 days (since Fri Feb 1 23:10:31 2008)
Network Distance: 0 hops
Interesting ports on [elio] 192.168.0.2:
Running: Microsoft Windows XP
OS details: Microsoft Windows XP SP2
Network Distance: 1 hop
Interesting ports on [radon] 192.168.0.3:
Running: FreeBSD 6.X
OS details: FreeBSD 6.2-STABLE – 6.3-PRERELEASE
Uptime: 0.009 days (since Fri Feb 8 21:42:34 2008)
Network Distance: 1 hop
Nmap done: 256 IP addresses (3 hosts up) scanned in 24.720 seconds