Düzgün zram ve takas nasıl kurulur


9

Yeni 3.0 çekirdeğini yapılandırıyorum ve derliyorum. 3.0 ile birleştirilen bir süre için (yama yaparak) kullanmayı planladığım güzelliklerden biri zram.

Hem hdd swap hem de zram swap'ı zram ilk önce kullanılacak ve yalnızca dökülen sayfalar gerçek swap'a konacak şekilde ayarlanabilir mi?

Yanıtlar:


8

Sidenote: cpu başına kilitleme nedeniyle, tek bir büyük yerine CPU'lar kadar çok mod ( zip-swap) (modprobe zram_num_devices = n zram) olması önemlidir. KKO!


1
[kaynak belirtilmeli]? Tavsiyeyi Linux belgelerinde veya Google'da bulamıyorum.
Maciej Piechotka

Varsayılan olarak belgelere göre max_comp_streamsgörünüyor . Bu parametrenin 2011 yılında var olup olmadığını kontrol etmedim, ancak birden fazla takas dosyasından daha iyi bir seçenek gibi görünüyor. 1
Maciej Piechotka

1
zram-configUbuntu (ve muhtemelen debian) altındaki paketle test etme Yapılandırmanın çekirdek veya iş parçacığı başına varsayılan olarak 1 olduğunu (eski bir E2140 çift çekirdekli 2 ve i3-3220'de 4) olduğunu fark ettim
Elder Geek

ilginç ve bu da /etc/init/zram-config.conf
Aquarius Power

1
Bu sidenote, çekirdek sürüm 3.15'ten itibaren kullanılmamaktadır. Artık tek bir büyük zram için birden fazla sıkıştırma iş parçacığına sahip olabilirsiniz.
Perkins

6

swapon-pönceliği ayarlayan anahtar var . Ben kurabilirim:

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap

Veya / etc / fstab içinde:

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0

EDIT: Sadece tam bir çözüm için - böyle bir hat udev kuralı olarak yardımcı olabilir:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"

1

Geçerek kaç zram cihazı istediğinizi seçin

zram.num_devices=4

çekirdek parametrelerine veya doğrudan modüle (zram olmadan). Varsayılan değer 1'dir. Zram, oluşturduğunuz cihaz sayısı kadar cpus kullanabilecektir.

Zram0 cihazı hazırlayın, boyutu 1GB olarak ayarlayın.

echo 1000000000 > /sys/block/zram0/disksize

Alternatif olarak bunu udev kuralı ile yapabilirsiniz. Zram0'da takas oluşturma

mkswap /dev/zram0

ve diğer takas cihazlarından daha yüksek önceliğe sahip olmasını sağlayın

swapon -p 32767 /dev/zram0

Burada hangi çekirdek ve dağıtım sürümlerini yazıyorsunuz?
Cbhihe

Kayıt için, 14.04.5 masaüstü Ubuntu'da önerdiğiniz gibi devam etmek başarısız olur. Ben önceliklerini ayarlamak çalıştığınızda Özellikle, zram0ve zram1bir 2 çekirdeklerinin Intel T9300 kutuyu değeri 10, o bana atar: swapon: /dev/zram0 or 1: swapon failed: Device or resource busy.
Cbhihe

1

Bazı nedenlerden dolayı https://www.kernel.org/doc/Documentation/blockdev/zram.txt dosyasının çok fazla yanlış yorumlandığı anlaşılıyor.

Açıkça ifade eder:

2) Maksimum sıkıştırma akışı sayısını ayarlayın
Bu özelliğe iletilen değerden bağımsız olarak, ZRAM her zaman çevrimiçi CPU'lar başına bir tane olmak üzere birden fazla sıkıştırma akışı tahsis eder ve böylece aynı anda birkaç sıkıştırma işlemine izin verir. Bazı CPU'lar çevrimdışı olduğunda ayrılan sıkıştırma akışlarının sayısı azalır. Bir UP sistemi çalıştırmadığınız veya yalnızca 1 CPU'nuz çevrimiçi olmadığı sürece artık tek sıkıştırma akışı modu yoktur.

Şu anda kaç akışın mevcut olduğunu bulmak için:

cat /sys/block/zram0/max_comp_streams

Ancak, maksimum akışların 1 olduğu ortak, kalıcı bir şehir efsanesi vardır.

Açıkçası doğru değil.

Zram'ın etkili Chrome OS ve Android'in tek bir cihaz olduğunu kanıtladığı iki işletim sistemi. Ayrıca tweak yapıyorlar page-cluster:

page-clustertek bir denemede birbirini takip eden sayfaların takastan okunduğu sayfa sayısını kontrol eder. Bu, takas karşılığı ile sayfa önbelleği okuma başlığıdır.
Bahsedilen ardışıklık, sanal / fiziksel adresler açısından değil, takas alanı üzerinde ardışıktır - yani birlikte değiştirildikleri anlamına gelir.

Bu logaritmik bir değerdir - sıfıra ayarlamak "1 sayfa", 1'e ayarlamak "2 sayfa", 2'ye ayarlamak "4 sayfa" vb. Anlamına gelir. Sıfır, takas okuma başlığını tamamen devre dışı bırakır.

Varsayılan değer üç (bir seferde sekiz sayfa). İş yükünüz takas yoğunsa bunu farklı bir değere ayarlamanın bazı küçük faydaları olabilir.

Daha düşük değerler, ilk hatalar için daha düşük gecikmeler anlamına gelir, ancak aynı zamanda, ardışık sayfaların getirdiği ardışık sayfaların bir parçası olsaydı, sonraki hatalar için ekstra hatalar ve G / Ç gecikmeleri anlamına gelir.

                - için çekirdek belgelerinden/proc/sys/vm/*

Bu yüzden echo "0" > /proc/sys/vm/page-clustertek sayfayı zorlamak için kullanın .

Çok fazla neden zram_config, debian / ubuntu paketinden kaynaklanıyor gibi görünüyor, çünkü bazı nedenlerden dolayı zram için çekirdek belgelerle çok az korelasyona sahip görünüyor ve özünde tamamen yanlış olabilecek bir dizi Çinli fısıltı yetiştirdi.

Dosya takas ile her çekirdek için bir takas sürücüsü oluşturuyor musunuz? Belki bu sorularınızı cevaplayabilir. Ayrıca bunu yedeklemek için Googles Chrome OS ve Android, bir diskle eşleşmediği için yukarıdaki sayfa kümesiyle başarılı bir şekilde çalıştığı için gecikme süresi artırılabilir, tek cihazlar.

Ayrıca bir sys-admin için önemli gerçek mem kullanımı veya vm mem kullanımı nedir? Çoğu örnek disk_size yoluyla oluşturmayı gösterir ve mem_limit'i tamamen yok sayar. disk_size = sıkıştırılmamış vm boyutu. mem_limit = gerçek mem ayak izi sınırı.

Disk_size seçimini karmaşık hale getirir çünkü comp_alg oranına bağlı sanal bir maksimum boyut ve kullanılmadığında diskin boyutunun% 0,1'i yükü ve gerçekten mem_limit * (yaklaşık 2 - 4) tutkulu vs iyimserlik.

zram_config, önceki hizmet kullanımını bile kontrol etmez ve aşağıdaki gibi zram sys sınıfının basit bir kontrolü yapılırken üzerine yazar.

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
}

0

Zram'ı etkinleştirdiğinizde, otomatik olarak önceliğe sahip olacaktır.

Ubuntu 16.04 için: /usr/bin/init-zram-swapping

Bu dosyayı düzenleyebilirsiniz (yedek 1 yapın), kullanılan gerçek ram'ı düşürmek için mem satırını şu şekilde değiştirdim:

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.