Por alguma razão, parece haver muita interpretação errônea de https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Afirma claramente:
2) Defina o número máximo de fluxos de compactação
Independentemente do valor passado para esse atributo, o ZRAM sempre alocará vários fluxos de compactação - um por CPUs on-line -, permitindo várias operações de compactação simultâneas. O número de fluxos de compactação alocados diminui quando algumas das CPUs ficam offline. Não há mais o modo de fluxo de compactação única, a menos que você esteja executando um sistema UP ou possua apenas 1 CPU online.
Para descobrir quantos fluxos estão disponíveis no momento:
cat /sys/block/zram0/max_comp_streams
Mas existe um mito urbano comum e persistente de que o máximo de fluxos é 1.
Claramente não é verdade.
Os dois sistemas operacionais em que o zram provou que o Chrome OS e o Android são eficazes em um único dispositivo. Eles também ajustam page-cluster
:
page-cluster
controla o número de páginas até as quais páginas consecutivas são lidas do swap em uma única tentativa. Esta é a contrapartida de troca para o readahead do cache da página.
A consecutividade mencionada não é em termos de endereços virtuais / físicos, mas consecutiva no espaço de troca - isso significa que eles foram trocados juntos.
É um valor logarítmico - defini-lo para zero significa "1 página", defini-lo para 1 significa "2 páginas", defini-lo para 2 significa "4 páginas", etc. Zero desativa completamente o cabeçote de leitura de troca.
O valor padrão é três (oito páginas por vez). Pode haver alguns pequenos benefícios em ajustar isso para um valor diferente se a sua carga de trabalho exigir muito uso de trocas.
Valores mais baixos significam latências mais baixas para falhas iniciais, mas, ao mesmo tempo, falhas extras e atrasos de E / S para as seguintes falhas, se elas fizessem parte das páginas consecutivas que o readahead teria trazido.
- da documentação do kernel para/proc/sys/vm/*
Portanto, use echo "0" > /proc/sys/vm/page-cluster
para forçar uma única página.
Muito parece ter se originado no zram_config do pacote debian / ubuntu que, por algum motivo, parece ter muito pouca correlação com os documentos do kernel do zram e criou uma série de sussurros chineses que, em essência, podem estar completamente errados.
Com a troca de arquivos, você cria uma unidade de troca para cada núcleo? Talvez isso possa responder às suas perguntas. Também para fazer backup disso, no Google Chrome OS e no Android, que empregam com êxito o cluster de páginas acima, pois não corresponde a um disco, para que a latência possa ser aprimorada, em dispositivos únicos.
Também para um administrador de sistemas, o que é importante no uso real de mem ou no uso de vm mem? A maioria dos exemplos mostra a criação via disk_size e ignora totalmente o mem_limit. disk_size = tamanho da vm descompactado. mem_limit = limite real de pegada de mem.
Ele meio que torna a escolha do tamanho do disco confusa, pois é um tamanho máximo virtual dependente da proporção comp_alg e da sobrecarga de 0,1% do tamanho do disco quando não está em uso, e é realmente uma estimativa do valor mem_limit * (aprox. 2 - 4) de frugal vs otimismo.
O zram_config nem verifica o uso do serviço anterior e sobrescreve, enquanto uma simples verificação da classe zram sys, como a abaixo, 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
}