swapon(2) start/stop swapping sul file/dispositivo

Other Alias

swapoff

SINTASSI

#include <unistd.h>
#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 dispositivo a blocchi o sul file specificato in path.

Se nell'argomento swapflags di swapon() è specificata l'opzione SWAP_FLAG_PREFER, la nuova area di swap avrà una priorità maggiore di quella predefinita. La priorità è codificata in swapflags come:

(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK

Se nell'argomento swapflags di swapon() è specificata l'opzione SWAP_FLAG_DISCARD, le pagine di swap liberate saranno segnate come scartate prima di essere riutilizzate, se il dispositivo di swap supporta l'operazione discard o trim. (Questo potrebbe migliorare le prestazioni di alcuni Dispositivi a Stato Solido, ma spesso non avviene). Vedere anche la sezione NOTE.

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 predefinita è 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 ad alta prorità, più alta di quella predefinita. 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. Per aree aventi priorità diverse, un'area con priorità più alta viene esaurita prima che venga usata un'area a priorità più bassa. 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

VALORE RESTITUITO

In caso di successo viene restituito 0; in caso di errore -1 ed errno viene impostato di conseguenza.

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.
EINVAL
(swapon()) Il percorso indicato non contiene una firma di swap valida o risiede in un filesystem in memoria come tmpfs.
EINVAL (a partire da Linux 3.4)
(swapon()) Un valore di opzione non valido è sato specificato in flags.
EINVAL
(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.

CONFORME A

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.4.10, il valore di MAX_SWAPFILES era 8; dal kernel 2.4.10 il valore è 32. A partire dal kernel 2.6.18 il limite è sceso di due unità (quindi: 30) se il kernel è compilato con 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)). A partire dal kernel 2.6.32, il limite è sceso ulteriormente di 1 se il kernel è compilato con l'opzione CONFIG_MEMORY_FAILURE.

Lo scarto di pagine di swap è stato introdotto nel kernel 2.6.29 e reso in seguito dipendente dall'opzione SWAP_FLAG_DISCARD nel kernel 2.6.36, che scarta ancora l'intera area di swap quando swapon() viene chiamato, anche se il bit dell'opzione non è impostato.

COLOPHON

Questa pagina fa parte del rilascio 3.73 del progetto Linux man-pages. Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trova su http://www.kernel.org/doc/man-pages/.

La versione italiana fa parte del pacchetto man-pages-it v. 3.73, a cura di: ILDP "Italian Linux Documentation Project" http://www.pluto.it/ildp
Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/
Segnalare eventuali errori di traduzione a [email protected]