swapon
hanno -p
interruttore che imposta la priorità. Posso configurare:
swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
O in /etc/fstab:
/dev/zram0 none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0 0 0
MODIFICA: Solo per una soluzione completa - tale linea può essere utile come regola udev:
KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Nota a margine:a causa del blocco per CPU, è importante avere tanti zram-swap quante sono le CPU (modprobe zram_num_devices=n zram) invece di un singolo grande. RTFM!
Per qualche motivo sembra che ci siano molte interpretazioni errate di https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Indica chiaramente:
2) Impostare il numero massimo di flussi di compressione
Indipendentemente dal valore passato a questo attributo, ZRAM allocherà sempre più flussi di compressione, uno per CPU online, consentendo così diverse operazioni di compressione simultanee. Il numero di flussi di compressione allocati diminuisce quando alcune CPU diventano offline. Non esiste più la modalità a flusso di compressione singolo, a meno che tu non stia eseguendo un sistema UP o abbia solo 1 CPU online.Per scoprire quanti stream sono attualmente disponibili:
cat /sys/block/zram0/max_comp_streams
Ma c'è un mito urbano comune e persistente secondo cui il numero massimo di flussi è 1.
Chiaramente non è vero.
I due sistemi operativi in cui zram si è dimostrato efficace Chrome OS e Android ti consentono di un unico dispositivo. Inoltre modificano page-cluster
:
page-cluster
controlla il numero di pagine fino a cui pagine consecutive vengono lette dallo scambio in un singolo tentativo. Questa è la controparte di swap del readahead della cache della pagina.
La consecutività menzionata non è in termini di indirizzi virtuali/fisici, ma consecutivi sullo spazio di scambio, il che significa che sono stati scambiati insieme.È un valore logaritmico:impostarlo su zero significa "1 pagina", impostarlo su 1 significa "2 pagine", impostarlo su 2 significa "4 pagine", ecc. Zero disabilita completamente lo swap readahead.
Il valore predefinito è tre (otto pagine alla volta). Potrebbero esserci alcuni piccoli vantaggi nell'impostare questo valore su un valore diverso se il tuo carico di lavoro è ad alta intensità di scambio.
Valori più bassi significano latenze inferiori per gli errori iniziali, ma allo stesso tempo errori e ritardi I/O extra per errori successivi se fossero stati parte di quelle pagine consecutive che readahead avrebbe portato.
— dalla documentazione del kernel per /proc/sys/vm/*
Quindi usa echo "0" > /proc/sys/vm/page-cluster
per forzare una singola pagina.
Molto sembra provenire da zram_config, il pacchetto debian/ubuntu che per qualche ragione sembra avere ben poca correlazione con i documenti del kernel per zram e ha generato una serie di sussurri cinesi che in sostanza potrebbero essere completamente sbagliati.
Con lo scambio di file crei un'unità di scambio per ogni core? Forse questo potrebbe rispondere alle tue domande. Inoltre, a sostegno di ciò, Google Chrome OS e Android che utilizzano con successo con il cluster di pagine sopra in quanto non corrisponde a un disco, quindi la latenza può essere migliorata, singoli dispositivi.
Inoltre, per un amministratore di sistema, cos'è importante l'utilizzo effettivo di mem o l'utilizzo di vm mem? La maggior parte degli esempi mostra la creazione tramite disk_size e ignora totalmente mem_limit.disk_size=uncompressed vm size.mem_limit=actual mem footprint limit.
In un certo senso rende la scelta disk_size confusa poiché è una dimensione massima virtuale dipendente dal rapporto comp_alg e dall'overhead dello 0,1% della dimensione del disco quando non è in uso ed è davvero una stima stimata di mem_limit * (circa 2 - 4) di frugal vs ottimismo.
zram_config non controlla nemmeno l'utilizzo del servizio precedente e sovrascrive mentre un semplice controllo della classe zram sys come il seguente lo farà.
createZramSwaps () {
totalmem=$(free|awk '/^Mem:/{print $2}')
mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))
# Check Zram Class created
ZRAM_SYS_DIR='/sys/class/zram-control'
if [ ! -d "${ZRAM_SYS_DIR}" ]; then
modprobe zram
RAM_DEV='0'
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
else
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
fi
if [ "$BIG_CORES" -gt 1 ];then
for i in $(seq $((BIG_CORES - 1))); do
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
done
fi
}