Z jakiegoś powodu wydaje się, że istnieje wiele błędnych interpretacji https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Wyraźnie stwierdza:
2) Ustaw maksymalną liczbę strumieni kompresji
Niezależnie od wartości przekazanej do tego atrybutu, ZRAM zawsze przydzieli wiele strumieni kompresji - po jednym na procesory online - umożliwiając w ten sposób kilka jednoczesnych operacji kompresji. Liczba przydzielonych strumieni kompresji spada, gdy niektóre procesory stają się offline. Nie ma już trybu pojedynczej kompresji, chyba że używasz systemu UP lub masz tylko 1 procesor online.
Aby dowiedzieć się, ile strumieni jest obecnie dostępnych:
cat /sys/block/zram0/max_comp_streams
Ale istnieje powszechny, uporczywy mit miejski, że maksymalna liczba strumieni wynosi 1.
To po prostu nieprawda.
Dwa systemy operacyjne, w których zram udowodnił, że system operacyjny Chrome i Android to jedno urządzenie. Również poprawiają page-cluster
:
page-cluster
kontroluje liczbę stron, do których kolejne strony są odczytywane z zamiany w jednej próbie. Jest to odpowiednik zamiany pamięci podręcznej strony.
Wspomniana konsekwencja nie dotyczy adresów wirtualnych / fizycznych, ale jest kolejna na przestrzeni wymiany - oznacza to, że zostały one zamienione razem.
Jest to wartość logarytmiczna - ustawienie na zero oznacza „1 stronę”, ustawienie na 1 oznacza „2 strony”, ustawienie na 2 oznacza „4 strony” itp. Zero całkowicie wyłącza zamianę głowicy.
Wartość domyślna to trzy (osiem stron jednocześnie). Dostosowanie tej wartości do innej wartości może być niewielkie, jeśli obciążenie wymaga intensywnej wymiany.
Niższe wartości oznaczają mniejsze opóźnienia dla błędów początkowych, ale jednocześnie dodatkowe błędy i opóźnienia we / wy dla kolejnych błędów, gdyby były częścią kolejnych stron, które przyniosłaby readahead.
- z dokumentacji jądra dla/proc/sys/vm/*
Więc użyj, echo "0" > /proc/sys/vm/page-cluster
aby wymusić pojedynczą stronę.
Wydaje się, że wiele pochodzi z zram_config pakietu debian / ubuntu, który z jakiegoś powodu wydaje się mieć bardzo małą korelację z dokumentami jądra dla zram i wyhodował serię chińskich szeptów, które w istocie mogą być całkowicie błędne.
Czy za pomocą wymiany plików tworzysz dysk wymiany dla każdego rdzenia? Może to może odpowiedzieć na twoje pytania. Również w celu wykonania kopii zapasowej Googles Chrome OS i Android, które z powodzeniem wykorzystują powyższy klaster stron, ponieważ nie pasuje on do dysku, dzięki czemu można poprawić opóźnienia, pojedyncze urządzenia.
Również dla sys-admin, co jest ważne faktyczne użycie mem lub użycie mem vm? Większość przykładów pokazuje tworzenie za pomocą disk_size i całkowicie ignoruje mem_limit. disk_size = nieskompresowany rozmiar VM. mem_limit = rzeczywisty limit powierzchni pamięci mem.
To sprawia, że wybór rozmiaru dysku jest mylący, ponieważ jego wirtualny maksymalny rozmiar zależy od współczynnika comp_alg i narzutu wynoszącego 0,1% rozmiaru dysku, gdy nie jest używany, i tak naprawdę jest szacunkiem wartości mem_limit * (około 2–4) oszczędności optymizm.
zram_config nawet nie sprawdza wcześniejszego użycia usługi i zastępuje, podczas gdy proste sprawdzanie klasy zram sys, jak poniżej.
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
}