Matlab के लिए Ubuntu की वर्चुअल मेमोरी और / या स्वैप कैसे बढ़ाएं?


16

स्थिति: Out of Memoryउबंटू के मतलाब
लक्ष्य में त्रुटियों को ठीक करें: बाहरी HDD / SSD पर कुछ वर्चुअल मेमोरी और / या स्वैप आवंटित करें; 20 जीबीपीएस से 0.1 जीबीपीएस तक की रीड / राइट की कमी, जो ठीक है!
शब्दावली: यहां स्वैप और वर्चुअल मेमोरी है

नहीं, स्वैप और वर्चुअल मेमोरी पूरी तरह से अलग हैं। उदाहरण के लिए, 1GB फ़ाइल की मैपिंग करने पर अतिरिक्त 1GB वर्चुअल मेमोरी का उपयोग होता है लेकिन स्वैप के उपयोग में कोई बदलाव नहीं होता है। स्वैप बैकिंग स्टोर का एक रूप है। वर्चुअल मेमोरी के कई उपयोगों का बैकिंग स्टोर से कोई लेना-देना नहीं है। (और वर्चुअल मेमोरी और नो स्वैप के साथ-साथ स्वैप के साथ सिस्टम हैं लेकिन वर्चुअल मेमोरी नहीं है।)

उपभोक्ता हार्डवेयर सीमित है इसलिए मुझे अपने बाहरी एचडीडी के साथ अधिक वर्चुअल मेमोरी और / या स्वैप का उपयोग करने की आवश्यकता है। Matlab स्वैप मेमोरी के बारे में कहते हैं (TODO वर्चुअल मेमोरी को छोड़कर?)

लिनक्स सिस्टम - mkswapऔर swaponकमांड्स का उपयोग करके अपने स्वैप स्थान को बदलें ।

प्रणाली के लक्षण

  • आप देख सकते हैं कि आपके पास यह कितना है swapon -s

    Filename                Type        Size    Used    Priority
    /dev/sda3               partition   8326140 0       -1
    
  • मतलाब का विन्यास

    % /programming//a/35971040/54964
    com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB
    
    % TODO cannot find ways how to put Matlab use /dev/sda3
    
  • इसलिए आप देखते हैं कि मेरा मतलाब इसका इस्तेमाल नहीं कर रहा है। मुझे Out of Memoryमतलाब में बड़े मैट्रिस के साथ त्रुटियां मिलती हैं। मैं reshapeवैक्टर के लिए आईएनजी मेट्रिसेस में असफल रहा हूं और समानांतर कोड लिख रहा हूं । इसलिए मैं आभासी मेमोरी का उपयोग करना चाहता हूं क्योंकि मुझे काम करने की आवश्यकता है; दर कोई फर्क नहीं पड़ता।

स्यूडोकोड

  1. शेल स्क्रिप्ट जो स्वैप बनाता है, MATLAB शुरू करें, और MATLAB बाहर निकलने पर स्वैप हटा दें। ( माइकल हाउमैन )
  2. बाहरी एचडीडी पर स्वैप सक्षम करें। sudo swapon -aयहाँ कैसे उपयोग करें?
  3. मतलाब शुरू करो।
  4. मतलाब को स्वैप का उपयोग करें।
  5. मतलब के बाहर निकलने पर स्वैप हटाएं।

टेंपरेरी स्वैप, रनिंग क्लायंट और क्लोजिंग / रिमूवल स्वैग इन मिकेल की स्क्रिप्ट

स्थिति : पर्यावरण को स्थापित करने में त्रुटियों को नियंत्रित नहीं कर सकता (1), मतलाब (2) को चलाने और पर्यावरण को बंद करने (3)
स्क्रिप्ट

#!/usr/bin/env bash

# /programming//a/69808/54964
set -e 
# TODO How to do swapoff if any error?

SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016"
SIZE_MB=16000
TO_RUN="matlab"

dd if="/dev/zero" of=${SWAP_FILE} bs="1M" count=${SIZE_MB} status="progress"
mkswap ${SWAP_FILE}
chmod 0600 ${SWAP_FILE}
sudo chown 0.0 ${SWAP_FILE} # /unix//a/297153/16920
sudo swapon -v ${SWAP_FILE}
echo "Swap enabled. Press enter to continue"; read
${TO_RUN}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v ${SWAP_FILE}
rm -vf ${SWAP_FILE}

Iteration 1 को Transcend 25M3 1 TB के साथ थोड़े से उपयोग के लिए जहाँ फाइल सिस्टम है ext4

  1. स्क्रिप्ट शुरू करने के बाद लॉग करता है

    sh start_matlab_with_swap.sh 
    16000+0 records in
    16000+0 records out
    16777216000 bytes (17 GB, 16 GiB) copied, 134.489 s, 125 MB/s
    Setting up swapspace version 1, size = 15.6 GiB (16777211904 bytes)
    no label, UUID=48c2835b-4499-4534-aa49-0648e15bd5d9
    [sudo] password for masi: 
    swapon /media/masi/SamiWeek/tmp/swap_file_18.7.2016
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: insecure file owner 1000, 0 (root) suggested.
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: found swap signature: version 1d, page-size 4, same byte order
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: pagesize=4096, swapsize=16777216000, devsize=16777216000
    Swap enabled. Press enter to continue
    start_matlab_with_swap.sh: 11: read: arg count
    
  2. ग्राहक चला रहा है

    • कमांड हिस्ट्री मैटलैब की पहली शुरुआत में स्वैप मेमोरी (टिकट # 02075943) में चली गई, त्रुटि के साथ आपके कमांड हिस्ट्री को पढ़ने में समस्या थी - - । बस अपने Matlab को पुनरारंभ करें और यदि आपके पास डिफ़ॉल्ट सेटिंग्स हैं तो समस्या हल हो गई है। कमांड prefdirदेता है /home/masi/.matlab/R2016aजो डिफ़ॉल्ट स्थान है ( /home/{username}/.matlab/R2016a। फ़ाइल /home/masi/.matlab/R2016a/matlab.prfपुनरारंभ होने के बाद यहां मौजूद है

    • ... [अन्य त्रुटियाँ] ...

  3. Matlab को बंद करना और टर्मिनल में फिर से पासवर्ड टाइप करना

    [sudo] password for masi: 
    swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016
    [ bugs here! ]
    

ओपन: यहां फंसे त्रुटि के बेहतर त्रुटि-हैंडलिंग को कैसे लागू करें? स्रोत में उदाहरण के लिए मेरी स्क्रिप्ट देखें। थ्रेड कैसे करें त्रुटि-फँसाने और यदि त्रुटि / चेतावनी स्वैप?

स्थायी स्वैप = रनिंग क्लाइंट से अलग स्वैप सेटअप

स्वैप की स्थापना

# /unix//q/297767/16920
masi@masi:~$ sudo fallocate -l 20G /mnt/.swapfile

masi@masi:~$ sudo mkswap /mnt/.swapfile 
Setting up swapspace version 1, size = 20 GiB (21474832384 bytes)
no label, UUID=45df9e48-1760-47e8-84d7-7a14f56bbd72

masi@masi:~$ sudo swapon /mnt/.swapfile
swapon: /mnt/.swapfile: insecure permissions 0644, 0600 suggested.

masi@masi:~$ sudo chmod 600 /mnt/.swapfile

masi@masi:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7925        1494         175         196        6255        5892
Swap:         28610           0       28610

/etc/fstabस्थायी परिवर्तन के लिए अंत में निम्नलिखित रखें

# /unix//a/298212/16920
# /unix//a/298543/16920

# If swap is on SSD, trim blocks each time at startup.
#/mnt/.swapfile  none    swap    defaults,discard      0        0

# If swap on External HDD, just use sw.
/media/masi/SamiWeek/.swapfile  none    swap    sw      0        0

सिस्टम: लिनक्स उबंटू 16.04 64 बिट
लिनक्स कर्नेल: 4.6
लिनक्स कर्नेल विकल्प: wl
Matlab: 2016a
आधिकारिक मैटलैब डॉक्स: "आउट ऑफ मेमोरी" त्रुटि
बाहरी एचडीडी: 1 टीबी स्टोरजेट 25M3 की समीक्षा करें: 2 टीबी स्टोरजेट 25 एम 3
बाहरी एचडीडी फाइल सिस्टम को पार करें : ext4
बाहरी HDD बफर: 8 एमबी
संबंधित सूत्र: ubuntu में MATLAB मेमोरी सीमा कैसे बढ़ाएं? (MATLAB के लिए mkswap, swapon का उपयोग कैसे करें?) , Matlab में भौतिक स्मृति में वृद्धि कैसे कम करें? , मैटलैब में मेमोरी एरर को कैसे हल करें? , 10800x10800 मैट्रिक्स के लिए मतलाब में मेमोरी त्रुटि कैसे ठीक करें? ,मैं Matlab r2012b में मेमोरी लिमिट (कुल मिलाकर और साथ ही) कैसे बढ़ाता हूं? , कैसे Matlab 2009b में Array Block बढ़ाएँ और मेमोरी एरर से बाहर हल करें? , मतलाब में एक छोटे चर के लिए इस आउट ऑफ मेमोरी इश्यू को कैसे हल करें? , मतलब में 'मेमोरी से बाहर'। एक धीमी लेकिन एक स्थायी समाधान?


4
क्षमा करें, यह प्रश्न का उत्तर नहीं दे रहा है। लेकिन क्या आप सुनिश्चित हैं कि आप ऐसा चाहते हैं? स्वैप से गणना करना अविश्वसनीय रूप से लंबा लगता है। राम प्रति सेकंड कम से कम 20 जीबी पढ़ता है, आपका बाहरी एचडीडी 0.1 जीबीपीएस से कम पर पढ़ रहा होगा
19

1
@Anake हाँ, मुझे पता है। यह एक समस्या नहीं है। मेरे पास विशाल मैट्रिसेस हैं जिनकी गणना 32/64 जीबी के साथ की जा सकती है लेकिन मेरे वर्तमान 8 जीबी अल्ट्राबुक के साथ नहीं। मुझे अभी भी छुट्टियों पर थियो संगणना करने की आवश्यकता है।
लेओ लेपोल्ड हर्ट्ज o

1
एक और गैर-उपयोगी टिप्पणी क्षमा करें। क्या आप घर पर एक कंप्यूटर छोड़ सकते हैं ताकि आप SSH को घर या यूनी पर चला सकें?
19

@Anake संभव नहीं, क्षमा करें, इस समय। इसके अलावा, मतलाब को यहां स्थानीय गणना की जरूरत है। इसके अलावा, इस समय इसे करने के लिए पर्याप्त कुंजी नहीं है।
लेओ लेपोल्ड हर्ट्ज़ o

इस संदर्भ में MATLAB के बारे में क्या खास है? क्या यह स्वैप स्पेस बढ़ाने के लिए
स्टीलड्राइवर

जवाबों:


2

ठीक है, आपके पास एक सूची है। मुझे इनलाइन जवाब दें

  1. यहाँ फँसने की त्रुटि के बेहतर त्रुटि-हैंडलिंग को कैसे लागू करें? स्रोत में उदाहरण के लिए मेरी स्क्रिप्ट देखें। थ्रेड कैसे करें त्रुटि-फँसाने और अगर त्रुटि / चेतावनी स्वैप?

मुझे इस स्क्रिप्ट की अवधारणा बिल्कुल पसंद नहीं है। आपके पास एक बाहरी हार्डड्राइव है जिसे आप स्वैप के रूप में उपयोग करने का प्रयास कर रहे हैं, यह केवल एक बुरा विचार है। यदि आप वास्तव में नियमित रूप से ऐसा करने का इरादा रखते हैं, तो एक उचित स्वैप विभाजन को डालने के लिए अपने विभाजन का आकार बदलें, एक स्वैप फ़ाइल जोड़ें, या बस एक बड़ी आंतरिक डिस्क खरीदें।

  1. मैट्रिक्स आकार स्वैप आकार से अधिक होने पर चेतावनी कैसे दें?

बस गणित करो। यदि आप कार्यक्रम शुरू होने से पहले मैट्रिक्स के आकार को जानते हैं, तो MiB में आकार की गणना करें और उपलब्ध स्वैप की तुलना करें।

  1. मतलाब में अपने विशाल मैट्रिक्स की गणना करने में प्रगति पट्टी कैसे है?

matlab के पास एपीआई अधिकार है? मुझे नहीं लगता कि यह उस सवाल का सही मंच है। यहां तक ​​कि अगर आपके पास एक एपीआई था, तो आप स्वैप के माध्यम से IO पर रोक देंगे, तो यह सिर्फ एक झटकेदार प्रगति पट्टी होगी जो वास्तव में वास्तविकता को प्रतिबिंबित नहीं करती है।

  1. कैसे व्यस्त प्रगति और / या स्वैप -s / स्वैप को मारने के लिए चलना (2)?

तुम नहीं। सिर्फ इसलिए कि आप गणना के साथ कर रहे हैं इसका मतलब यह नहीं है कि ऑपरेटिंग सिस्टम आपके द्वारा आवंटित संसाधनों के साथ किया जाता है। जब इसे स्वैप करने के लिए लिखा जाता है, तो यह खाली हो जाएगा। आपने इतनी मेमोरी खा ली है कि बहुत सारे एप्लिकेशन को वह मेमोरी नहीं मिल सकती है जिसकी उन्हें आवश्यकता है इसलिए वे स्वैप का भी उपयोग कर रहे हैं। बस इसे छोड़ दो और ऑपरेटिंग सिस्टम को यह काम करने दो। इससे पहले कि आप अपना अगला प्रदर्शन करें, कैश साफ़ करें।

echo 3 > /proc/sys/vm/drop_caches 

शायद इससे कहीं अधिक है, मैं लिनक्स वीएम विशेषज्ञ नहीं हूं। यह जांचने के लिए सार्थक होगा कि SLAB / SLUB आवंटनकर्ता कैसे काम करता है और इसे आपकी बड़ी मेमोरी आवश्यकताओं के लिए कैसे ट्यून किया जाता है। आप matlab को मेमोरी में ML ML कर सकते हैं। यह ओएस को आपके लिए मेमोरी आरक्षित करने के लिए मजबूर करता है, या यह बस शुरू नहीं होता है, आपको इसे तब भी अनलॉक करना होगा जब आप काम कर रहे हों। मैं इसे सी एपीआई के साथ ठीक कर सकता हूं, लेकिन मुझे यकीन नहीं है कि आप ऐसा कैसे करेंगे कि एक प्रक्रिया के बाहर मैं दोबारा नहीं कर सकता, इसके लिए कुछ शोध की आवश्यकता होगी।

अंत में, यह सामान की तरह है EC2 के लिए बनाया गया था। ऐसा लगता है कि 16G की आपको आवश्यकता है, एक m4.4xlarge में 64G ram @ $ 0.958 प्रति घंटा है। यह एक कप कॉफी से कम है। अपनी जुलेटू आकर्षण या समान का उपयोग करके मैटलैब की अपनी स्क्रिप्ट को लिपिबद्ध करें और पूरी चीज़ को एक सेवा के रूप में एक संगणना में बदल दें।

16 जी 16 जीबी है?

  • हां, आम तौर पर जब हम प्रत्यय छोड़ते हैं तो हमारा मतलब है आधार की इकाइयों में आधार 2 संख्या। यदि आप संक्षिप्त करना चाहते हैं तो आप 16GiB लिखेंगे।

"मुझे ऐसे मैट्रीक की आवश्यकता है जो> 100 जीबी हैं। मुझे नहीं पता कि क्या आप इसे EC2 के साथ कर सकते हैं।"

क्या आपको अपने कैश को भी साफ करना चाहिए echo 3 > /proc/sys/vm/drop_caches?

  • हाँ, यह हमेशा ऐसा करने के लिए चोट नहीं करता है। लिनक्स कर्नेल में प्रलेखन / sysctl / vm.txt देखें।

आप Matlab को मेमोरी में कैसे ML कर सकते हैं?

  • man mlock। हालांकि जब मैंने कहा कि मैं नासमझ हूं। यह कॉल आश्वासन देता है कि आप अपनी इच्छित सभी मेमोरी को आवंटित कर सकते हैं और स्वैप किए जाने से बच सकते हैं, यह कभी भी वर्चुअल मेमोरी का उपयोग नहीं करेगा। जो आप चाहते हैं वह नहीं है।

मुझे लगता है कि आप Matlab को C API बाँध सकते हैं। - - क्या आपको प्रक्रियाओं में कोई विफलता होने पर स्वैप बंद करने का कोई विचार है?

  • मैं यहाँ फ्रैंक होने जा रहा हूँ, आप जिस तरीके से प्रपोज़ करते हैं, उसमें माइक्रोफ़ोनिंग स्वैप फ़ाइलों की अवधारणा हास्यास्पद है। ऑपरेटिंग सिस्टम का काम संसाधनों का प्रबंधन करना और उन्हें निष्पक्ष और सुसंगत तरीके से सौंपना है। एक बार जब आप इसे और अधिक संसाधन देते हैं, तो यह उनका उपयोग करने जा रहा है क्योंकि यह फिट दिखता है। आपको यह बताने के लिए नहीं मिलता है कि आप कब कर रहे हैं और इसके नीचे से संसाधनों को बाहर निकालते हैं, ओएस आपको बताता है कि यह कब किया गया है।

जब मैं ओएस को मेमोरी एड्रेस स्पेस के लिए कहता हूं, तो कभी-कभी यह हमेशा सफल नहीं होता है, इसका मतलब यह नहीं है कि मैं फिर से कोशिश नहीं कर सकता। वह मटैलैब दो बार मलैक की समस्या का पता लगाने के लिए नहीं कह सकता।

इसलिए, आप जो परिवर्तन चाहते हैं, उसे प्रभावित करने के लिए, यदि वह 100G स्थान वास्तव में प्रीमियम पर है, तो आपको यह पता लगाने की आवश्यकता है कि ऑपरेटिंग सिस्टम को यह बताने के लिए कि यह कैसे मेमोरी फुटप्रिंट (शुरुआत के लिए कैश साफ़ करके) को ट्रिम करने के लिए है, इसलिए मेमोरी मैनेजर नहीं करता है अतिरिक्त स्वैप स्थान का उपयोग करने की आवश्यकता महसूस करें जो इसे प्रदान किया गया था। तब और केवल तब ही आप मेमोरी मैनेजर को स्वैप फाइल जारी करने के लिए कह सकते हैं।

मेमोरी और डिस्क जैसी चीजों को विकसित करना आसान है, उन्हें सिकोड़ना बहुत कठिन है। सिकुड़ते हुए हर उपयोगकर्ता को उस स्थान पर आवंटित संसाधनों को फिर से संतुलित करता है। अगर मैंने इसके बजाय "मेरे पास 100TB स्टोरेज सरणी है, लेकिन अब मुझे केवल 60TB की आवश्यकता है, तो जब मैं 40TB डिस्क को हटाता हूं तो सरणी काम करना बंद कर देती है क्यों?" खैर, उत्तर स्पष्ट होगा?

इसलिए यहां आपके विकल्प हैं जैसा कि मैंने देखा है।

  1. यह देखने के लिए कि आप इन बड़े पैमाने पर काम करने वाले सेटों के लिए मेमोरी कैसे आवंटित करते हैं, बेहतर नियंत्रण प्राप्त कर सकते हैं, यह देखने के लिए matlab C API की जाँच करें।

  2. उप-मैत्रियों या कुछ अन्य विरल डेटा प्रतिनिधित्व का उपयोग करने के लिए अपनी गणना करने के लिए अपने अभिकलन को वापस लें।

  3. अपने स्वयं के प्रोग्राम को C / C ++ में रेखीय बीजगणित पुस्तकालयों के बहुतायत का उपयोग करके गणना और प्रदर्शन करने के लिए अनाम mallocया उपयोग की जाने वाली mmapअनाम जगह को आवंटित करने के लिए लिखें ।


हां, लेकिन यह पर्याप्त नहीं हो सकता है और अगर यह कभी भी सफल होता है, तो आपको इंतजार करना और फिर से प्रयास करना पड़ सकता है।
पेप्त्रकी

1
हे, आपकी टिप्पणी के बाकी मेरे स्मार्टफोन में नहीं दिखा। आप उस तरह से गूंज नहीं सकते, इसके बजाय करते हैं। echo 3 | sudo tee /proc/sys/vm/drop_caches
पितृक्या

मैं इस उत्तर को स्वीकार करता हूं क्योंकि इसके उत्तर में इसका सही अर्थ है। क्लाइंट को उसी स्क्रिप्ट में चलाने के लिए जैसे वातावरण सेट करना पागलपन-संबंधी त्रुटि है। इसके बारे में अधिक चर्चा यहाँ unix.stackexchange.com/a/298543/16920 - - यह बहुत अच्छा होगा यदि आप अपने शरीर को थोड़ा साफ कर सकें।
लेओ लेपोल्ड हर्ट्ज़ '

12

आप एक सॉफ्टवेयर के लिए स्वैप समर्पित नहीं कर सकते। आप क्या कर सकते हैं एक शेल स्क्रिप्ट बना सकते हैं जो स्वैप बनाता है, MATLAB शुरू करें, और जब MATLAB बाहर निकलता है तो स्वैप हटा दें।

यहाँ एक उदाहरण स्क्रिप्ट है जो / tmp निर्देशिका में 10Mb की स्वैप बनाता है, इसे आरोहित करता है, आर शुरू करता है (मेरे पास matlab नहीं है), R से बाहर निकलें, स्वैप फ़ाइल को बाहर निकालें और इसे हटा दें।

कृपया ध्यान दें कि: - आपके पास एक चेतावनी होगी क्योंकि स्वैप फ़ाइल रूट के स्वामित्व में नहीं है। ऐसा इसलिए है क्योंकि सिस्टम किसी भी सॉफ़्टवेयर के लिए उपयोग करेगा, शायद आपके द्वारा नहीं चलाया गया है, और आप इस फ़ाइल पर पढ़ सकते हैं ... मैंने आपको इसे ठीक करने दिया। - अगर आप [ctrl] - [c] स्क्रिप्ट, या लॉगऑफ, या आदि, तो स्वैप माउंट किया जाएगा। मैं आपको इसे ठीक करने देता हूं।

#!/usr/bin/env bash

SWAP_FILE=/tmp/my_swap_file
SIZE_MB=10
TO_RUN="R"

dd if=/dev/zero of=${SWAP_FILE} bs=1M count=${SIZE_MB}
mkswap ${SWAP_FILE}
chmod 0600 ${SWAP_FILE}
sudo swapon -v ${SWAP_FILE}
echo "Swap enabled. Press enter to continue"; read
${TO_RUN}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v ${SWAP_FILE}
rm -vf ${SWAP_FILE}

1
खैर, यह वास्तव में MATLAB के लिए समर्पित नहीं है, लेकिन किसी भी स्थिति के लिए अस्थायी रूप से अधिक रैम की आवश्यकता है। कृपया ध्यान दें कि स्वेपन / स्वैपऑफ को रूट राइट की आवश्यकता होती है (इसलिए:
सुडो

1
हाँ आपके पास। कि जड़ कैसे बनें।
माइकल हुरमैन

अच्छा उत्तर। मैं व्यक्तिगत रूप से इसे प्राप्त करूंगा, और अपनी खुद की add-swap.sh पटकथा को इस प्यारे पलों के लिए रखूंगा जब मेमोरी ख़त्म हो जाती है
Sergiy Kolodyazhnyy

मैंने यहाँ इनाम को सम्मानित किया क्योंकि इसने मुझे सही तरीका बताया। मैं हालांकि उत्तर को स्वीकार नहीं कर सकता क्योंकि त्रुटि-प्रबंधन बहुत कठिन और अपूर्ण है। यह सेटअप मैटलैब चलने से अलग से अदला-बदली करने के लिए सबसे अच्छा है, तो कृपया इस सवाल का जवाब यहाँ देख unix.stackexchange.com/a/298543/16920
लियो लियोपोल्ड हर्ट्ज 준영

1

यह है कि आप बाहरी हार्ड ड्राइव का उपयोग करके अपनी SWAP मेमोरी का विस्तार कैसे कर सकते हैं :

  • सबसे पहले, रन करके अपनी वास्तविक SWAP मेमोरी लिखें:

    free -m
    
  • दूसरा, अपने HDD के फ़ोल्डर को हाथ में रखें। यह कुछ ऐसा होना चाहिए /media/myhdd

  • अतिरिक्त SWAP का आकार तय करें जिसे आप जोड़ना चाहते हैं। मान लीजिए, एक्स जीबी।
  • उस मात्रा की बाइट्स की गणना करें। GB का उपयोग करना, यह है: Y = X * 1024 ^ 3 , जहां Y आपकी गणना का परिणाम है।
  • फ़ाइल का ब्लॉक आकार चुनें (यह बाइट्स में है)। के डिफ़ॉल्ट यहाँ उपयोग करते हैं: 4096 (इस बारे में अधिक देखें यहाँ )।
  • फ़ाइल के पास ब्लॉक की संख्या की गणना करें: Z = Y / 4096
  • टर्मिनल में निम्न कमांड का उपयोग करके आकार X GB की फ़ाइल बनाएँ :

    dd if=/dev/zero of=/media/myhdd/swapfile bs=4096 count=Z
    
  • फ़ाइल का उपयोग करके SWAP बनाएँ:

    sudo mkswap /media/myhdd/swapfile -f
    
  • अंत में, SWAP सक्षम करें:

    sudo swapon -p 1000 /media/myhdd/swapfile
    

अब आपका SWAP बढ़ गया है। के साथ फिर से जाँच करेंfree -m


हम इसे एक गैर-संवादात्मक स्क्रिप्ट ( sudoआवश्यक शक्तियां) में सेट कर सकते हैं :

#!/bin/bash

### Inputs ###

swap_GB=$(expr 1) # Enter here size of the swap memory to create, in GB.
swap_bs=$(expr 4096) # Enter here block size, in bytes (must be a multiple of 8).
HDD_folder="/media/myhdd/" # Enter absolute path of HDD inside the brackets.

### Swap creation ###

swap_size=$(expr $swap_GB \* 1024 \* 1024 \* 1024 / $swap_bs)
dd if=/dev/zero of=${HDD_folder}"/swapfile" bs=$swap_bs count=$swap_size
mkswap ${HDD_folder}"/swapfile" -f
swapon -p 1000 ${HDD_folder}"/swapfile"

### EOF ###

पुनश्च: यदि संभव हो तो कृपया अनुकूलित / सही करें। जैसा कि कहा गया है, यह मेरी पहली पटकथा है :)


ठीक है, स्वैप पहले से ही धीमा है, लेकिन मैं USB ड्राइव पर स्वैप होने की कल्पना नहीं कर सकता। यह नरक की तरह धीमी हो जाएगी IMHO
माइकल हुरमैन

सारांश के रूप में एक स्क्रिप्ट यहां बहुत अच्छी होगी।
लेओ लेपोल्ड हर्ट्ज़ '

1
मैंने कभी कोई स्क्रिप्ट नहीं बनाई है, लेकिन इसे आगे बढ़ा दूंगा।

1

मैं कम से कम परीक्षण करूँगा कि कर्नेल संस्करण 3.14 के बाद से कितनी अच्छी तरह से संपीड़ित रैम (ज़्राम कर्नेल मॉड्यूल, उपलब्ध है)।

बाद archlinux विकी निर्देश

modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 4G > /sys/block/zram0/disksize
mkswap --label zram0 /dev/zram0
swapon --priority 100 /dev/zram0

मेरा अनुमान है कि कंप्रेस्ड रैम डिस्क I / O से तेज होनी चाहिए।

पुनरारंभ के बाद भी परिवर्तन रखने के लिए, बूट समय कमांड को अंदर रखें /etc/rc.localऔर चलाएं sudo systemctl enable rc-local.service


मैंने स्मृति आकार और पृष्ठन दर पर ज़्राम के प्रभाव के लिए थ्रेड unix.stackexchange.com/q/297752/16920 का उत्तर दिया । मुझे स्मृति आकार पर कोई प्रभाव नहीं मिल रहा है, शायद ज्यादातर पेजिंग पर। हालांकि, रनड के साथ सिस्टमड / ... चेतावनी बढ़ गई है। Zram की त्रुटि दर के बारे में जानना बहुत अच्छा होगा।
लेओ लेपोल्ड हर्ट्ज़ o

Zram0 के मामले में, कुछ आंकड़े / sys / block / zram0 में ओरिजनल_data_size और reg_data_size में उपलब्ध हैं । मेरे पास वहां बहुत अधिक डेटा स्वैप नहीं है, लेकिन जो अनुपात है, उसके लिए लगभग 0.35 है। उस अनुपात के साथ 11 जीबी डेटा 4 जीबी रैम में फिट हो सकता है। इसका मतलब यह हो सकता है कि 7 जीबी डाटा डिस्क पर स्वैप न हो।
जेजे हक्ला जूल

1
आप /etc/rc.local में बूट टाइम कमांड रख सकते हैं और फिरsudo systemctl enable rc-local.service
JJ Hakala

मुझे पता चला है कि zramHDD / SSD पर अदला-बदली के लिए लागू ऐसा नहीं है zramयहाँ लागू नहीं है, कृपया धागा देखना askubuntu.com/a/472227/25388
लियो लियोपोल्ड हर्ट्ज 준영

1

zswapयदि आपके पास एचडीडी / एसएसडी पर स्वैप भाग हैं, तो उपयोग करें । थू मॉड्यूल zramएचडीडी / एसएसडी पर स्वैप भागों के बिना है, इसलिए हवाला का जवाब लागू नहीं होता है। थ्रेड ज़्राम बनाम zswap बनाम zcache अंतिम गाइड देखें: जब स्पष्टीकरण के लिए कौन सा उपयोग करना है। सेटअप के zswapरूप में वर्णित थ्रेड को Ubuntu 16.04 में मतलाब गणना के लिए Zswap को सफलतापूर्वक कैसे सक्रिय करें?

  • निम्न पंक्ति के साथ संगत लाइन को बदलें /etc/default/grub

    # https://wiki.archlinux.org/index.php/Zswap
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lzo"
    
  • भागो sudo update-grub

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.