ठीक से zram और स्वैप कैसे सेट करें


9

मैं नए 3.0 कर्नेल को कॉन्फ़िगर और कंपाइल कर रहा हूं। कुछ उपहारों में से एक जिसे मैंने कुछ समय के लिए उपयोग करने की योजना बनाई थी (पैचिंग करके) जिसे 3.0 में विलय कर दिया गया था, जोराम है।

क्या hdd swap और zram swap दोनों को सेट करना संभव है इसलिए zram को पहले प्रयोग किया जाता है और केवल गिराए गए पृष्ठों को अलग स्वैप में डाला जाता है?

जवाबों:


8

सिडेनोट: प्रति-सीपीयू लॉकिंग के कारण, एक ही बड़े के बजाय सीपीयू (modprobe zram_num_devices = n zram) के रूप में कई ज़्राम-स्वैप होना ज़रूरी है। RTFM!


1
[प्रशस्ति पत्र की जरूरत]? मुझे लिनक्स प्रलेखन या Google में पुनर्संयोजन नहीं मिल रहा है।
मैकीज पीचोटका

डिफ़ॉल्ट रूप से प्रलेखन के अनुसार max_comp_streamsप्रतीत होता है । मैंने जाँच नहीं की है कि यह पैरामीटर 2011 में मौजूद था लेकिन यह एक बेहतर विकल्प लगता है तो कई स्वैप फाइलें। 1
मैकीज पीचोटका

1
zram-configउबंटू (और संभावित डेबियन) के तहत पैकेज के साथ परीक्षण मैंने नोट किया कि कॉन्फ़िगरेशन 1 प्रति कोर या थ्रेड (2 एक पुराने E2140 दोहरे कोर पर और 4 एक i3-3220 पर) को परिभाषित करता है
एल्डर गीक

दिलचस्प है, और यह भी पढ़ने के लिए समझने के लिए काफी स्पष्ट लगता है /etc/init/zram-config.conf
कुंभ पावर

1
यह सिडेन कर्नेल संस्करण 3.15 के रूप में अप्रचलित है। अब आप एक एकल, बड़े zram के लिए कई संपीड़न धागे हो सकते हैं।
पर्किन्स

6

swaponहै -pस्विच जो प्राथमिकता तय करता है। मैं सेट कर सकता हूं:

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

या में / आदि / fstab:

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

संपादित करें: सिर्फ एक पूर्ण समाधान के लिए - ऐसी रेखा udv नियम के रूप में सहायक हो सकती है:

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 नियम से कर सकते हैं। Zram0 पर स्वैप बनाएँ

mkswap /dev/zram0

और अन्य स्वैप उपकरणों की तुलना में इसे उच्च प्राथमिकता के साथ सक्षम करें

swapon -p 32767 /dev/zram0

आप किस कर्नेल और डिस्ट्रो वर्जन के लिए यहां लिख रहे हैं?
Cbhihe

रिकॉर्ड के लिए, 14.04.5 डेस्कटॉप उबंटू पर सलाह के रूप में आगे बढ़ना, विफल रहता है। विशेष रूप से, जब मैं की प्राथमिकताएं तय करने की कोशिश zram0और zram1एक 2 नाभिक इंटेल T9300 बॉक्स पर मूल्य 10 है, यह मेरे साथ फेंकता है: swapon: /dev/zram0 or 1: swapon failed: Device or resource busy
Cbhihe

1

किसी कारण से https://www.kernel.org/doc/Documentation/blockdev/zram.txt की बहुत गलत व्याख्या प्रतीत होती है

यह स्पष्ट रूप से बताता है:

2) अधिकतम संख्या में संपीड़न धाराएँ निर्धारित करें,
भले ही इस विशेषता को मान दिया गया हो, ZRAM हमेशा कई संपीड़न धाराओं को आवंटित करेगा - एक प्रति ऑनलाइन सीपीयू - इस प्रकार कई समवर्ती संपीड़न संचालन की अनुमति देता है। सीपीयू के कुछ ऑफ़लाइन हो जाने पर आवंटित संपीड़न धाराओं की संख्या कम हो जाती है। अब तक कोई एकल-संपीड़न-स्ट्रीम मोड नहीं है, जब तक कि आप एक यूपी सिस्टम नहीं चला रहे हैं या केवल 1 सीपीयू ऑनलाइन है।

यह जानने के लिए कि वर्तमान में कितनी धाराएँ उपलब्ध हैं:

cat /sys/block/zram0/max_comp_streams

लेकिन एक आम, लगातार शहरी मिथक है कि अधिकतम धारा 1 है।

यह स्पष्ट रूप से सच नहीं है।

दो OS जहाँ zram ने प्रभावी Chrome OS और Android आपको एकल डिवाइस साबित किया है। इसके अलावा वे tweak page-cluster:

page-clusterउन पृष्ठों की संख्या को नियंत्रित करता है जिन तक लगातार पृष्ठों को एक ही प्रयास में स्वैप से पढ़ा जाता है। यह कैशे रीडहेड पेज पर स्वैप करने के लिए है।
उल्लिखित वाणिज्य दूतावास आभासी / भौतिक पते के संदर्भ में नहीं है, लेकिन स्वैप स्थान पर लगातार - इसका मतलब है कि उन्हें एक साथ स्वैप किया गया था।

यह एक लघुगणक मूल्य है - इसे शून्य पर सेट करने का अर्थ है "1 पृष्ठ", इसे 1 का अर्थ है "2 पृष्ठ", इसे 2 के लिए सेट करने का अर्थ है "4 पृष्ठ", आदि शून्य पूरी तरह से स्वैपहैड को निष्क्रिय करता है।

डिफ़ॉल्ट मान तीन (एक समय में आठ पृष्ठ) है। यदि आपका कार्यभार स्वैप-गहन है, तो इसे एक अलग मूल्य पर ट्यूनिंग करने में कुछ छोटे लाभ हो सकते हैं।

निम्न मानों का अर्थ है प्रारंभिक दोषों के लिए कम विलंबता, लेकिन एक ही समय में अतिरिक्त दोष और I / O दोषों का पालन करने के लिए यदि वे उस निरंतर पृष्ठों का हिस्सा होते हैं जो रीडहेड में लाया जाता है।

                - के लिए कर्नेल प्रलेखन से/proc/sys/vm/*

इसलिए echo "0" > /proc/sys/vm/page-clusterसिंगल पेज को मजबूर करने के लिए उपयोग करें।

बहुत से लगता है कि zram_config से डेबियन / ubuntu पैकेज है कि किसी कारण के लिए zram के लिए कर्नेल दस्तावेजों के साथ बहुत कम सहसंबंध है लगता है और मूल रूप से पूरी तरह से गलत हो सकता है कि चीनी फुसफुसाते हुए की एक श्रृंखला पर प्रतिबंध लगा दिया है।

फ़ाइल स्वैप के साथ आप प्रत्येक कोर के लिए एक स्वैप ड्राइव बनाते हैं? हो सकता है कि यह आपके सवालों का जवाब दे सकता है। इसके अलावा Googles Chrome OS और Android का बैकअप लेने के लिए, जो उपरोक्त पृष्ठ-क्लस्टर के साथ सफलतापूर्वक काम करता है क्योंकि इसकी डिस्क से मेल नहीं खाता है इसलिए विलंबता में सुधार किया जा सकता है, एकल डिवाइस।

इसके अलावा एक sys- व्यवस्थापक के लिए महत्वपूर्ण वास्तविक मेम उपयोग या वीएम मेम उपयोग क्या है? अधिकांश उदाहरण disk_size के माध्यम से निर्माण दिखाते हैं और पूरी तरह से mem_limit को अनदेखा करते हैं। disk_size = असम्पीडित vm आकार। mem_limit = वास्तविक मेम पदचिह्न सीमा।

यह डिस्क_साइज़ पसंद को भ्रमित करता है क्योंकि इसका वर्चुअल अधिकतम आकार कंप_लग अनुपात पर निर्भर है और डिस्क के आकार का 0.1% ओवरहेड है जब उपयोग में नहीं होता है और वास्तव में मेमुलिमिट * (लगभग 2 - 4) का एक फ्रेमवर्क है। आशावाद।

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 बना सकते हैं), उपयोग किए गए वास्तविक रैम को कम करने के लिए, मैंने इसके लिए मेम लाइन को बदल दिया है:

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.