Per qualche motivo sembra esserci molta interpretazione errata di https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Si afferma chiaramente:
2) Imposta il numero massimo di flussi di compressione
Indipendentemente dal valore passato a questo attributo, ZRAM alloca 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ù una modalità di flusso a compressione singola, a meno che non si 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 esiste un mito urbano comune e persistente secondo cui il flusso massimo è 1.
Chiaramente non è vero.
I due sistemi operativi in cui zram ha dimostrato che Chrome OS e Android sono efficaci in un unico dispositivo. Inoltre modificano page-cluster
:
page-cluster
controlla il numero di pagine fino a cui le pagine consecutive vengono lette dallo scambio in un solo tentativo. Questa è la controparte dello swap al readahead della cache della pagina.
La consecutività menzionata non è in termini di indirizzi virtuali / fisici, ma consecutivi nello spazio di scambio - ciò significa che sono stati scambiati insieme.
È un valore logaritmico: impostandolo su zero significa "1 pagina", impostandolo su 1 significa "2 pagine", impostandolo su 2 significa "4 pagine", ecc. Zero disabilita completamente la lettura dello swap.
Il valore predefinito è tre (otto pagine alla volta). Potrebbero esserci alcuni piccoli vantaggi nell'ottimizzare questo su un valore diverso se il carico di lavoro è ad alta intensità di scambio.
Valori più bassi significano latenze più basse per i guasti iniziali, ma allo stesso tempo guasti aggiuntivi e ritardi I / O per i guasti successivi se fossero stati parte delle 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 una correlazione molto piccola 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 ciascun core? Forse potrebbe rispondere alle tue domande. Anche per eseguire il backup di questo Google Chrome OS e Android che utilizzano con successo con il cluster di pagine sopra in quanto non corrisponde a un disco in modo che la latenza possa essere migliorata, singoli dispositivi.
Anche per un amministratore di sistema qual è l'importante utilizzo effettivo dei mem o l'utilizzo di mem vm? La maggior parte degli esempi mostra la creazione tramite disk_size e ignora totalmente mem_limit. disk_size = dimensione vm non compressa. mem_limit = limite di impronta mem effettivo.
Fa confondere la scelta di disk_size in quanto una dimensione massima virtuale dipende dal rapporto comp_alg e dal sovraccarico dello 0,1% della dimensione del disco quando non in uso ed è davvero una stima di mem_limit * (circa 2-4) di frugale vs ottimismo.
zram_config non verifica nemmeno il precedente utilizzo del servizio e lo sovrascrive, mentre un semplice controllo della classe s di zram 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
}