NOME¶
swapon, swapoff - start/stop swapping sul file/dispositivo
SINTASSI¶
#include <unistd.h>
#include <asm/page.h> /* to find PAGE_SIZE */
#include <sys/swap.h>
int swapon(const char *path, int swapflags);
int swapoff(const char *path);
DESCRIZIONE¶
swapon() imposta lo swap sul dispositivo a blocchi o sul file specificato
in
path.
swapoff() ferma lo swap sul device a blocchi o sul file
specificato in
path.
swapon() prende l'argomento
swapflags. Se
swapflags ha il
bit
SWAP_FLAG_PREFER attivato la nuova area di swap avrà una
priorità maggiore del default. La priorità è codificata in
swapflags come:
(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK
Queste funzioni possono essere usate solo da un processo privilegiato (uno che
ha le funzionalità
CAP_SYS_ADMIN).
PRIORITÁ¶
Ogni area di swap ha una sua priorità, sia essa alta o bassa. Quella di
default è bassa. Tra le aree a bassa priorità le aree più nuove
hanno sempre una priorità più bassa delle aree più vecchie.
Tutte le priorità impostate attraverso
swapflags sono maggiori
rispetto a quella di default. Esse possono avere qualunque valore non negativo
scelto dal chiamante. A numero maggiore corrisponde priorità maggiore.
Le pagine di swap sono allocate in aree in ordine di priorità, prima quelle
con priorità maggiore. Prima di usare un'area con una certa priorità
tutte quelle con priorità maggiore sono state utilizzate. Se vi sono due
o più aree con la stessa priorità, ed è la massima
priorità disponibile, le pagine sono allocate secondo uno schema a
"round-robin".
Fino al kernel 1.3.6, si seguivano queste regole, ma con alcune eccezioni ( ?!?!
ndt )
VALORI RESTITUITI¶
In caso di successo viene restituito 0, altrimenti -1 ed
errno contine il
codice di errore.
ERRORI¶
- EBUSY
- (per swapon()) Il percorso specificato è
già stato usato come area di swap.
- EINVAL
- Il percorso del file esiste, ma non fa riferimento
nè a un file regolare, nè a un dispositivo a blocchi; o, per
swapon(), il percorso indicato non contiene una firma di swap
valida o risiede in un file system in memoria come tmpfs; o, per
swapoff(), il percorso attualmente non è un'area di
swap.
- ENFILE
- È stato raggiunto il limite del sistema sul numero
totale di file aperti.
- ENOENT
- Il percorso del file non esiste.
- ENOMEM
- Il sistema ha memoria insufficiente per iniziare lo
swapping.
- EPERM
- Il chiamante non ha la funzionalità CAP_SYS_ADMIN
.
In alternativa, il numero massimo di file di swap è già in uso;
vedere le NOTE sotto.
Queste funzioni sono specifiche di Linux e non devono essere usate in programmi
pensati per essere portabili. Il secondo argomento
swapflags è
stato introdotto in Linux 1.3.2.
NOTE¶
La partizione o percorso devono essere preparati con
mkswap(8).
C'è un limite superiore al numero di file di swap che si possono usare,
definito dalla costante del kernel MAX_SWAPFILES. Prima del kernel 2.6.10, il
valore di MAX_SWAPFILES era 8; dal kernel 2.6.10 il valore è 32. A
partire dal kernel 2.6.18 il limite è sceso di due unità (quindi:
30) se nel kernel è integrata l'opzione
CONFIG_MIGRATION (che
riserva due voci nella tabella di swap per le funzionalità di migrazione
di pagina del comando
mbind(2) e
migrate_pages(2)).
VEDERE ANCHE¶
mkswap(8),
swapoff(8),
swapon(8)