Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

Title: La memoria swap
Author: Sandro Tosi
Last modified: 2004-11-10 (2004-10-28) (2004-10-27)

La memoria  virtuale e` un  metodo per far sembrare  alle applicazioni
che sia disponibile piu`  memoria Ram (quella fisica, veloce, costosa,
ed  in  quantita`   spesso  insufficiente)  di  quella  effettivamente
installata. Per questioni di  efficenza, la memoria viene suddivisa in
``zone'', dette ``pagine'', che appartengono ad una applicazione.

Su  un pc  moderno, e`  facile  avere piu`  applicazioni aperte  nello
stesso   momento,  ed   aprirne   di  nuove   o   e  chiuderne   altre
continuamente.  Si fa  allora credere  ad ogni  applicazione  di avere
tutta la memoria fisica a  sua disposizione; quando una nuova processo
viene  eseguito  ed  un  altro  viene  richiamato,  esso  fara`  delle
richieste  di  pagine di  memoria.  Se la  Ram  non  e` sufficiente  a
contenere queste nuove richieste, risulta necessario liberare spazio.

Lo spazio viene liberato spostando  le pagine dalla memoria Ram ad una
parte del disco fisso (molto piu`  lento della Ram ma anche molto piu`
capiente) deputata a questo scopo:  la swap. La scelta delle pagine da
spostare   puo`    richiedere   algoritmi   molto    sofisticati,   ma
principalmente possiamo  vederla su base temporale: se  una pagina non
e` stata  richiesta da diverso tempo  e` probabile che non  lo sara` a
breve, e quindi puo` essere spostata tranquillamente.

Questo e`, per sommi capi, il funzionamento della memoria virtuale (un
libro  di   Sistemi  Operativi   e`  sicuramente  piu`   esauriente  e
preciso...).


Linux  utilizza una  partizione  apposita da  dedicare  alla swap  (al
contrario  di  Windows  che  usa  un file,  il  ``pagefile.sys'').  La
grandezza di questa partizione,  o di queste partizioni, stabilisce la
quantita` di swap disponibile sul sistema.


Un tempo,  quando la  memoria Ram  era cara e  la sua  quantita` molto
limitata sui computer, si era  soliti creare una partizione di swap di
grandezza parti al doppio della Ram installata sul calcolatore (questo
consiglio e` ancora  valido nel caso si voglia riciclare  un pc un po`
datato con meno di 128Mb di  Ram). Ora che, invece, il prezzo e` sceso
e  le  quantita`  spesso raggiungono  1  Gb,  non  si ha  piu`  questa
necessita` ed a volte ha senso proprio non disporre affatto di swap.

A volte,  invece, la swap  risulta fondamentale: se vogliamo  avere il
supporto  al suspend-to-disk,  per  esempio, si  ha  bisogno di  avere
almeno  tanta swap  quanta  memoria fisica,  ma  viene consigliato  di
creare la partizione almeno 1.5-2 volte la memoria fisica.

L'utilizzo  della   swap  e`  anche   un  modo  per   incrementare  le
performance:  spostando le pagine  memoria scarsamente  utilizzate sul
disco, viene liberata Ram che puo` essere utilizzata come disk cache e
per essere  rimpiazzata da  memoria acceduta piu`  frequentemente. Non
sempre, quindi, e` conveniente rimuovere la swap, anche in presenza di
elevati quantitativi di Ram fisica.

Permette anche  di degradare  le prestazioni gradualmente:  senza swap
incorreremo  in problemi  di applicazioni  uccise per  liberare spazio
(OOM killer)  o in errori nel  salvare dati a causa  del fallimento ad
allocare memoria.


Una partizione  di swap, in  quanto utilizzata solo quando  un sistema
operativo e` in funzione (a  parte il caso del suspend-to-disk), e dal
momento che  nello stesso momento  soltanto un sistema  operativo puo`
essere  in  esecuzione  su  una  comune  macchina,  e`  possibile  far
condividire   questa  partizione   tra  installazioni   differenti  di
distribuzioni Linux.


Alcuni comando utili per gestire la swap

o  mkswap <device>
   Prepara un'area  di swap su  un device o  un file; utile  anche per
   ricreare  una partizione  di  swap  nel caso  si  supponga che  sia
   corrotta

o  swapon
   Attiva un'area di swap

o  swapoff
   Disattiva un'area di swap

o  cat /proc/swaps
   Mostra le informazioni sulle aree si swap attualmente utilizzate

o  vmstat
   Restituisce informazioni sulla memoria virtuale


Aspetti avanzati
================

Linux  supporta  anche  i  file  di swap;  nel  caso  fosse  difficile
creare/incrementare  una partizione di  swap ma  si necessiti  di piu`
spazio, e` possibile creare un  file ed utilizzare quello come area di
swap:

# dd if=/dev/zero of=/fileswap bs=1024k count=32
# sync
# mkswap /fileswap
# swapon /fileswap
# cat /proc/swaps

e` anche possibile far si`  che questo file venga utilizzato dal boot,
aggiungendo questa riga al file /etc/fstab:

/fileswap       none            swap    sw                   0       0

L'utilizzo di file  di swap e` un metodo per  avere a disposizione una
quantita` di memoria swap superiore a quella definita nelle partizione
(che solitamente  viene creata al  momento dell'installazione), magari
come soluzione  temporanea da  un carico di  lavoro molto  intenso, ma
contenuto nel tempo. Naturalmente, le prestazioni con l'utilizzo di un
file  di  swap sono  molto  minori  di quelle  che  si  hanno con  una
partizione dedicata.


In alcune macchine molto cariche, per esempio server di produzione, la
swap diventa molto  importante; solitamente queste macchine dispongono
di sottosistemi dischi molto veloci e spesso con piu` di un hard disk:
per incrementare le prestazioni e` consigliabile creare una partizione
di swap  su ogni disco  e definire quelle  aree di memoria  con stessa
priorita` (che descrive  dove vengono scritte le pagine  da mettere in
swap) in  modo che le pagine  di memoria da spostare  siano scritte in
round-robin su tutte le partizioni.


Un altro fattore che puo`  influire sulle prestazioni della swap e` la
posizione della  sua partizione nel  disco. La teoria vorrebbe  che la
parte piu` veloce  del disco sia all'inizio (la  parte piu` esterna, i
cilindri che iniziano con 1, per intendersi) ma questo solo in teoria:
infatti in questo caso diventa importante anche il tempo di seek della
testina.

Considerando,  infatti, che  solitamente la  testina si  trova  a fine
disco  (in   posizione  di  riposo)  una  grande   richiesta  di  swap
provocherebbe  un continuo  avanti ed  indietro della  testina  da una
parte  all'altra dei  piatti, inficiando  le prestazioni:  il transfer
rate  non  diventa piu`  rilevante,  in quanti  ci  si  trova a  dover
aspettare che il disco trovi i settori giusti.

Un'alternativa sarebbe  quella di posizionarla  a meta` del  disco, in
quanto mediamente la  testina dovra` accedere ad altri  dati, e quindi
``passar sopra'' alla swap.

E` comunque da considerare che l'accesso al disco e` diversi ordini di
grandezza  piu`  lento di  quello  alla  memoria,  quindi il  guadagno
potrebbe essere minimo utilizzando questi consigli.


Nel  kernel   2.6  e`  presente   la  possibilita`  di   impostare  la
``swappiness'' (la propensione da  parte del kernel all'utilizzo della
swap) modificando  il file /proc/sys/vm/swappiness.  La variabile puo`
essere impostata ad  un valore tra 0 e 100  dove numeri bassi indicano
al kernel di fare meno ricorso alla swap.

Indicando al kernel  la tendenza a effettuare lo  swap delle pagine di
memoria,  permette  di adattare  meglio  la  strategia  di swapping  a
seconda delle  proprie esigenze: un  utilizzo desktop richiede  che se
un'applicazione   e`   aperta,   ma   non  utilizzata   da   10   ore,
selezionandola, essa deve essere  pronta subito, senza attendere alcun
ritardo dovuto alla necessita` di ricaricare le pagine dalla swap. Per
un  utilizzo  server, invece,  avere  molto  memoria  libera e  magari
attendere qualche attimo per  caricare pagine scarsamente accedute, e`
decisamente accettabile.

Da una  parte si  cerca la migliore  interattivita` verso  il sistema,
dall'altra parte si necessita` di fornire il maggior numero di servizi
al maggior numero di persone possibile. I due utilizzi portano a voler
impostare, rispettivamente, un valore basso ed alto di swappiness. Con
le  dovute   eccezioni:  l'indice  di  un  proxy   server  (squid)  e`
fondamentale sia _interamente_ contenuta in Ram fisica.