วิธีการตั้งค่า zram และ swap อย่างถูกต้อง


9

ฉันกำลังกำหนดค่าและรวบรวมเคอร์เนล 3.0 ใหม่ หนึ่งในสารพัดที่ฉันวางแผนจะใช้ในบางครั้ง (โดยการปะแก้) ที่รวมเป็น 3.0 คือ zram

เป็นไปได้หรือไม่ที่จะตั้งค่าทั้ง hdd swap และ zram swap เพื่อที่จะใช้ zram หน้าแรกและหน้าเว็บที่หกล้นเท่านั้นที่จะใส่ลงใน swap จริง

คำตอบ:


8

Sidenote: เนื่องจากการล็อกต่อซีพียูเป็นสิ่งสำคัญที่จะต้องมีzram-swaps มากเท่ากับซีพียู (modprobe zram_num_devices = n zram) แทนที่จะเป็นหนึ่งตัวใหญ่ RTFM!


1
[ต้องการอ้างอิง]? ฉันไม่พบคำแนะนำในเอกสาร Linux หรือ Google
Maciej Piechotka

โดยค่าเริ่มต้นmax_comp_streamsดูเหมือนว่าจะ1เป็นไปตามเอกสาร ฉันไม่ได้ตรวจสอบว่ามีพารามิเตอร์นั้นในปี 2011 หรือไม่ แต่ดูเหมือนว่าจะเป็นตัวเลือกที่ดีกว่าแล้วก็คือไฟล์สลับหลายไฟล์
Maciej Piechotka

1
การทดสอบกับแพคเกจzram-configภายใต้ Ubuntu (และเดเบียนน่าจะเป็น) ฉันตั้งข้อสังเกตว่าการกำหนดค่าเริ่มต้นที่ 1 ต่อคอร์หรือเธรด (2 ใน E2140 ดูอัลคอร์เก่าและ 4 ใน i3-3220)
Elder Geek

น่าสนใจและนี่ก็ค่อนข้างชัดเจนที่จะเข้าใจโดยการอ่าน /etc/init/zram-config.conf
Aquarius Power

1
sidenote นี้ล้าสมัยตั้งแต่เคอร์เนลเวอร์ชัน 3.15 ตอนนี้คุณสามารถมีหลายเธรดการบีบอัดสำหรับ zram ขนาดใหญ่เดี่ยว
Perkins

6

swaponมี-pสวิตช์ที่กำหนดลำดับความสำคัญ ฉันสามารถตั้งค่า:

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

หรือใน / etc / fstab:

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

แก้ไข:สำหรับการแก้ปัญหาอย่างเต็มรูปแบบ - บรรทัดดังกล่าวอาจมีประโยชน์ตามกฎของ udev:

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

1

เลือกจำนวนอุปกรณ์ที่คุณต้องการโดยผ่าน

zram.num_devices=4

ไปยังพารามิเตอร์เคอร์เนลหรือโดยตรงกับโมดูล (ไม่มี zram.) ค่าเริ่มต้นคือ 1. zram จะสามารถใช้ cpus ได้มากเท่าที่คุณสร้าง

เตรียมอุปกรณ์ zram0 ตั้งขนาดเป็น 1GB

echo 1000000000 > /sys/block/zram0/disksize

หรือคุณสามารถทำได้โดยกฎ udev สร้าง swap บน zram0

mkswap /dev/zram0

และเปิดใช้งานอุปกรณ์ที่มีลำดับความสำคัญสูงกว่าอุปกรณ์แลกเปลี่ยนอื่น ๆ

swapon -p 32767 /dev/zram0

คุณกำลังเขียนรุ่นเคอร์เนลและ distro ที่นี่
Cbhihe

สำหรับเร็กคอร์ดการดำเนินการตามที่คุณแนะนำบน Ubuntu บนเดสก์ท็อป 14.04.5 ล้มเหลว โดยเฉพาะอย่างยิ่งเมื่อฉันพยายามที่จะจัดลำดับความสำคัญของzram0และzram1เพื่อให้มีค่า 10 กล่อง 2 นิวเคลียส Intel T9300 swapon: /dev/zram0 or 1: swapon failed: Device or resource busyมันจะพ่นฉันด้วย:
Cbhihe

1

ด้วยเหตุผลบางอย่างดูเหมือนว่าจะมีการตีความผิด ๆ มากมายของhttps://www.kernel.org/doc/Documentation/blockdev/zram.txt

ชัดเจนว่า:

2) ตั้งค่าจำนวนสูงสุดของการบีบอัดสตรีม
โดยไม่คำนึงถึงค่าที่ส่งผ่านไปยังแอ็ตทริบิวต์นี้ ZRAM จะจัดสรรสตรีมการบีบอัดหลาย ๆ ครั้งเสมอ - หนึ่งรายการต่อซีพียูออนไลน์ - จำนวนสตรีมการบีบอัดที่จัดสรรจะลดลงเมื่อ CPU บางตัวออฟไลน์ ไม่มีโหมดการบีบอัดสตรีมอีกต่อไปเว้นแต่ว่าคุณกำลังใช้ระบบ UP หรือมีเพียง 1 CPU ออนไลน์

หากต้องการทราบจำนวนสตรีมที่มีอยู่ในปัจจุบัน:

cat /sys/block/zram0/max_comp_streams

แต่มีตำนานเมืองที่พบบ่อยและไม่หยุดยั้งที่กระแสสูงสุดคือ 1

เห็นได้ชัดว่ามันไม่เป็นความจริง

สองระบบปฏิบัติการที่ zram พิสูจน์ให้เห็นว่า Chrome OS และ Android มีประสิทธิภาพสำหรับคุณในอุปกรณ์เดียว พวกเขายังปรับแต่งpage-cluster:

page-clusterควบคุมจำนวนหน้าสูงสุดที่หน้าต่อเนื่องถูกอ่านจากการสลับในครั้งเดียว นี่คือการสลับคู่กับการอ่านแคชหน้า
การติดต่อที่ถูกต้องนั้นไม่ได้อยู่ในรูปของที่อยู่เสมือน / ที่อยู่จริง แต่ต่อเนื่องกันบนพื้นที่สว็อป - นั่นหมายความว่าพวกมันถูกสับเปลี่ยนกัน

มันเป็นค่าลอการิทึม - ตั้งค่าเป็นศูนย์หมายถึง "1 หน้า" การตั้งค่าเป็น 1 หมายถึง "2 หน้า" การตั้งค่าเป็น 2 หมายถึง "4 หน้า" ฯลฯ Zero ปิดการใช้งานการสลับ readahead อย่างสมบูรณ์

ค่าเริ่มต้นคือสาม (แปดหน้าพร้อมกัน) อาจมีประโยชน์เล็กน้อยในการปรับค่านี้ให้เป็นค่าอื่นหากเวิร์กโหลดของคุณมีการแลกเปลี่ยนอย่างมาก

ค่าที่ต่ำกว่าหมายถึงเวลาในการตอบสนองที่ต่ำกว่าสำหรับความผิดพลาดเริ่มต้น แต่ในเวลาเดียวกันความผิดพลาดเพิ่มเติมและความล่าช้าของ I / O สำหรับความผิดพลาดดังต่อไปนี้หากพวกเขาเป็นส่วนหนึ่งของหน้าต่อเนื่อง

                - จากเอกสารประกอบเคอร์เนลสำหรับ/proc/sys/vm/*

ดังนั้นใช้echo "0" > /proc/sys/vm/page-clusterเพื่อบังคับให้หน้าเดียว

ดูเหมือนว่ามีสาเหตุมาจาก zram_config แพ็คเกจเดเบียน / อูบุนตูซึ่งด้วยเหตุผลบางอย่างดูเหมือนว่าจะมีความสัมพันธ์น้อยมากกับเอกสารเคอร์เนลสำหรับ Zram และมีการปรับปรุงชุดของกระซิบจีนที่สำคัญอาจผิดอย่างสมบูรณ์

คุณใช้ swap file เพื่อสร้าง swap drive สำหรับแต่ละคอร์หรือไม่ บางทีนั่นอาจตอบคำถามของคุณ นอกจากนี้เพื่อสำรองข้อมูล Googles Chrome OS & Android ซึ่งประสบความสำเร็จในการใช้งานกับกลุ่มเพจด้านบนเนื่องจากไม่สามารถจับคู่ดิสก์เพื่อให้สามารถปรับปรุงเวลาแฝงในการปรับปรุงอุปกรณ์เดี่ยวได้

นอกจากนี้สำหรับผู้ดูแลระบบ sys การใช้งาน mem ที่สำคัญจริง ๆ หรือการใช้ vm mem คืออะไร? ตัวอย่างส่วนใหญ่แสดงการสร้างผ่าน disk_size และไม่สนใจ mem_limit ทั้งหมด disk_size = ขนาด vm ที่ไม่บีบอัด mem_limit = ขีด จำกัด การปล่อยจริงของ mem

มันทำให้การเลือก disk_size ทำให้สับสนเนื่องจากขนาดสูงสุดเสมือนขึ้นอยู่กับอัตราส่วน comp_alg และค่าโสหุ้ย 0.1% ของขนาดของดิสก์เมื่อไม่ได้ใช้งานและเป็นการคาดเดา mem_limit * (ประมาณ 2 - 4) ของ vs vs frugal แง่ดี

zram_config ไม่ได้ตรวจสอบการใช้บริการก่อนหน้านี้และเขียนทับในขณะที่การตรวจสอบอย่างง่ายของคลาส zram sys อย่างที่จะทำ

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 จะมีลำดับความสำคัญโดยอัตโนมัติ

สำหรับ Ubuntu 16.04: /usr/bin/init-zram-swapping

คุณสามารถแก้ไขไฟล์นั้น (ทำการสำรองข้อมูลอันดับที่ 1) เพื่อลด ram จริงที่ใช้ไปฉันได้เปลี่ยนบรรทัด mem เป็น:

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.