डिफ़ॉल्ट स्वैप आकार क्या है?


16

इंस्टॉलर कैसे गणना करता है कि स्वैप विभाजन का आकार क्या है? संभवत: यह स्थापित रैम आकार पर आधारित है, लेकिन क्या यह रैम पर निर्भर करता है?


कोई डिफ़ॉल्ट मान नहीं है यह इस बात पर निर्भर करता है कि आपके पास कितनी रैम है।
उरई हरेरा

1
खैर हाँ, लेकिन मैं "यह निर्भर करता है" की तुलना में थोड़ा अधिक विस्तार की तलाश कर रहा था। क्या यह हमेशा RAM आकार का एक सेट होता है, या यह इस बात पर निर्भर करता है कि RAM कितनी है? उदाहरण के लिए, बड़े रैम आकारों को हाइबरनेशन को सक्षम करने के लिए कभी भी ज़रूरत से ज़्यादा ज़रूरत नहीं होगी, लेकिन बहुत छोटे रैम आकार 1: 1 की तुलना में काफी बड़े स्वैप का लाभ उठा सकते हैं।
Seret

जवाबों:


5

वास्तव में dphys-swapfileएक डिफ़ॉल्ट उबंटू स्थापना सीडी पर कोई कार्यक्रम नहीं है और इसका उपयोग स्वैप आकार की गणना करने के लिए नहीं किया जाता है ।

क्या होता है कि ubiquityइंस्टॉलर सभी विभाजनों के आकार को निर्धारित करने के लिए partman-autoस्क्रिप्ट और कॉन्फ़िगरेशन फ़ाइलों ( व्यंजनों को बुलाया जाता है ) का उपयोग करता है। यह इस तरह काम करता है:

  • पार्टमैन कंप्यूटर के प्रकार और उपयोगकर्ता द्वारा चुने गए विकल्प के अनुसार सही नुस्खा फ़ाइल पाता है।
  • वहां यह विभाजन का न्यूनतम और अधिकतम आकार और उसकी प्राथमिकता पाता है। के लिए स्वैप 512 (प्राथमिकता) 300% (अधिकतम) - यह 96 (MB में न्यूनतम) हो सकता है।
  • तब यह RAM आकार (के माध्यम से /proc/meminfo) हो जाता है ।
  • यह आकारों की गणना करने के लिए अपने स्वयं के एल्गोरिथ्म का उपयोग करता है।

विवरण:

एक नुस्खा फ़ाइल इस तरह दिख सकती है:

1 1 1 free
    $iflabel{ gpt }
    method{ biosgrub } .

500 10000 -1 $default_filesystem
    $lvmok{ }
    method{ format }
    format{ }
    mountpoint{ / } .

96 512 300% linux-swap
    $lvmok{ }
    method{ swap }
    format{ } .

आकार की गणना करने के लिए एल्गोरिथ्म:

for(i=1;i<=N;i++) {
   factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
   minsum = min[1] + min[2] + ... + min[N];
   factsum = factor[1] + factor[2] + ... + factor[N];
   ready = TRUE;
   for(i=1;i<=N;i++) {
      x = min[i] + (free_space - minsum) * factor[i] / factsum;
      if (x > max[i])
         x = max[i];
      if (x != min[i]) {
         ready = FALSE;
         min[i] = x;
      }
   }
}

अधिक देखने के लिए:


दिलचस्प बहस: एक अजीब डेबियन वेबसाइट से बेहतर संदर्भ?
enzotib

वैसे मुझे वह भी मिला जब मैंने इसकी खोज की, लेकिन पैकेज में "चेतावनी: यह पैकेज केवल डेबियन-इंस्टॉलर छवियों के निर्माण में उपयोग के लिए है। इसे सामान्य उबंटू प्रणाली पर स्थापित न करें।" मुझे लगता है कि इसका उपयोग नहीं किया गया था, इसलिए मैंने खोजा और dphys-swapfile के लिए कोड पाया>: - D Hmm दिलचस्प वास्तव में।
रिनविविंड

@enzotib: क्यों अजीब है?
व्यवस्थित करें

@ अजीब: क्योंकि एक आधिकारिक ubuntu साइट नहीं है, और यह भी एक डेबियन साइट के रूप में एक आधिकारिक एक नहीं लगता है।
20 अगस्त को enzotib

मैंने स्वैप आकार की गणना करने पर 2 और विधियाँ पाईं: इस विधि में grep ^ Mem: / proc / meminfo या यदि वह 0 grep ^ MemTotal: / proc / meminfo का उपयोग करता है और फिर 2 (डिफ़ॉल्ट या 3) से गुणा करता है (सबसे अधिक सेट हैं) न्यूनतम वास्तुकला के साथ 300%)। एक mipsel-sb1-bcm91250a एक निश्चित 512 का उपयोग करता है। i386-efi 200% का उपयोग करता है।
रिनविंड

19

यह बल्कि तकनीकी होने जा रहा है, लेकिन यह पता लगाने के लिए मजेदार था कि यहाँ जाता है ...

  • मुझे एक पैकेज मिला dphys-swapfileऔर यहाँ स्रोत कोड है । विकल्प setupका उपयोग इसे स्थापित करने के लिए किया जाता है:
सेटअप - इष्टतम स्वैप फ़ाइल आकार की गणना करने के लिए dphys-swapfile बताता है और
(फिर से) एक फिटिंग स्वैप फ़ाइल उत्पन्न करते हैं। इसे 2 बार रैम साइज डिफॉल्ट करें।
इसे बूट समय पर कॉल किया जा सकता है, इसलिए फ़ाइल ऑलवेज रहता है
करंट रैम के लिए राइट साइज़, या जब भी रैम साइज़ हो, हाथ से चलाएं
बदला हुआ।
  • अंदर एक पूर्व-निर्धारित आकार के लिए dphys-swapfileएक सेटिंग है conf_swapsize(नैटी में यह खाली है):
आकार हम इसे जबरदस्ती बनाना चाहते हैं, डिफ़ॉल्ट (खाली) 2 * RAM देता है
CONF_SWAPSIZE =

और एक सेटिंग के लिए swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • वास्तविक आकार की गणना आगे की ओर की गई है:

    अगर ["$ {CONF_SWAPSIZE}" = ""]; फिर
      # स्वचालित इष्टतम आकार की गणना करें
      इको-एन "कंप्यूटिंग साइज़,"
      # यह फिजिकल रैम साइज के सबसे नजदीक लगता है, इसमें 60k की कमी है
      KCORESIZE = "` ls -l / proc / kcore | awk '{प्रिंट $ 5}' '"
      # एमबीटी बनाते हैं जो नीचे गोल होता है ठीक 1 बहुत कम होगा, इसलिए 1 जोड़ें
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # डिफ़ॉल्ट, बिना कॉन्फिग फाइल ओवरराइडिंग, स्वैप = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" "*" "$ {SWAPFACTOR}" `"
    फाई

जैसा कि आप देख सकते हैं कि वे इस पैकेज में इसकी गणना करते हैं, के आकार पर निर्भर करता है /proc/kcore, फिर इसे ऊपर गोल करने के लिए 1048576, +1 से विभाजित हो जाता है और फिर swapfactor द्वारा गुणा किया जाता है। मेरी मशीन से:

यहाँ छवि विवरण दर्ज करें

तो इस प्रणाली के लिए डिफ़ॉल्ट 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 एमबीबीएस होगा।

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