गुण-प्रबंधक: उपलब्ध स्मृति का विभाजन


2

मेरे पास एक हाइपरविजर है जो वर्चुअल मशीनों को संभालने के लिए kvm और गुण-प्रबंधक का उपयोग करता है।

हाइपरविजर में 6GByte मेमोरी होती है।

यदि मैं एक नई वर्चुअल मशीन जोड़ता हूं तो मुझे नहीं पता कि मेमोरी अभी भी कितनी मुफ्त है।

कम से कम गुण-प्रबंधक संवाद इसे प्रदर्शित नहीं करता है:

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

क्या कोई उपकरण है जो मुझे एक मिलान अधिकतम मूल्य खोजने में मदद करता है?

उदाहरण:

  • 6 जीबी कुल होस्ट मेमोरी
  • "होस्ट-वन" की मेजबानी के लिए दिया गया 2 जीबी
  • ? होस्ट "होस्ट-टू" के लिए जीबी।

ऊपर केवल एक सरल उदाहरण है। हमारे वास्तविक सर्वर पर हमारे पास बहुत अधिक वर्चुअल-होस्ट हैं।

मैं वर्चुअल-होस्ट को बहुत अधिक मेमोरी देने से डरता हूं। यह उच्च प्रदर्शन प्रभाव का परिणाम है यदि हाइपरविजर बहुत कम है। यदि मैं "होस्ट-टू" 4 जीबी देता हूं, तो हाइपरविजर "आग पर" होगा, क्योंकि इसमें "सांस लेने के लिए कोई हवा नहीं" है।

क्या कोई उपकरण है जो मुझे यह तय करने में मदद कर सकता है कि कितनी मेमोरी उपलब्ध है?


बस रिकॉर्ड के लिए "मेमोरी को ओवरकॉम्पिट करना
guettli

जवाबों:


2

स्मृति को ओवरकम करने के बारे में आपके द्वारा लिंक किए गए रेडहैट दस्तावेज़ के अनुसार,

"केवीएम हाइपरविजर पर चलने वाली अतिथि वर्चुअल मशीनें उनके पास सौंपी गई भौतिक रैम के ब्लॉक को समर्पित नहीं करती हैं। इसके बजाय, प्रत्येक अतिथि वर्चुअल मशीन एक लिनक्स प्रक्रिया के रूप में कार्य करती है जहां होस्ट भौतिक मशीन के लिनक्स कर्नेल केवल अनुरोध किए जाने पर मेमोरी आवंटित करते हैं।"

इससे यह निर्धारित करने की पूरी स्थिति बन जाती है कि आप प्रत्येक मेजबान को कितनी फजीहत के लिए आवंटित कर सकते हैं, कितना दुर्भाग्यपूर्ण है। एक उपकरण आप VMs के बीच आबंटित स्मृति देखने पर उपयोग कर सकते हैं virsh और उसके फ्रीसेल आदेश।

वायरल के मैन पेज में कहा गया है कि फ़्रीसेल, "मशीन पर या NUMA सेल में मेमोरी की उपलब्ध मात्रा को प्रिंट करता है। फ़्रीसेल कमांड मशीन पर उपलब्ध मेमोरी के तीन अलग-अलग डिस्प्ले में से एक को निर्दिष्ट विकल्पों के आधार पर प्रदान कर सकती है ... । "

KVM- आधारित हाइपरविजर के लिए, आप वर्चुअल शेल virshमें प्रवेश करने के लिए टर्मिनल में वर्चुअल मशीन शेल कमांड ( ) का उपयोग कर सकते हैं - आपके प्रॉम्प्ट को इसके डिफ़ॉल्ट से बदलना चाहिए virsh #। फिर, आप listहाइपरविजर पर वर्चुअल मशीनों की सूची प्रदर्शित करने के लिए कमांड का उपयोग कर सकते हैं ।

वीएम प्रति मेमोरी की मात्रा प्रदर्शित करने के लिए ( listकमांड द्वारा दिखाए गए इसकी संख्या से ), उपयोग करें:

virsh # freecell <cell_number> 

आप --allवीएम में से प्रत्येक के लिए और पूरे मशीन के लिए आवंटित मेमोरी की मात्रा दिखाने के लिए एक सेल नंबर के बजाय झंडा भी पास कर सकते हैं ।

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


आप लिखते हैं कि वीएम की संख्या को फ्रीकेल कमांड में पारित किया जा सकता है, आपका आधा जवाब इस आधार पर है। हालाँकि, यह गलत है। फ्रीसेल केवल NUMA कोशिकाओं को एक तर्क के रूप में लेता है और मेजबान पर मुफ्त मेमोरी दिखाता है - VM नहीं।
vic

1

यदि आप वास्तव में सुरक्षित होना चाहते हैं और मेमोरी को ओवरकम नहीं करना चाहते हैं, तो एक विकल्प यह है कि आप अपने होस्ट पर विशाल पृष्ठों को सक्षम करें और अपनी वर्चुअल मशीनों का उपयोग करें। नकारात्मक पक्ष यह है कि आपको वास्तव में आवश्यक सभी मेमोरी की आवश्यकता है - होस्ट मेमोरी और वीएम मेमोरी को मूल रूप से अलग किया जाएगा।

आप इस पर बेहतर नियंत्रण रख सकते हैं कि यदि आप अज्ञात विशालपृष्ठों (बूट के साथ transparent_hugepages=never) को अक्षम करते हैं तो बड़े पृष्ठों का उपयोग कैसे किया जाता है और फिर आप जितने चाहें उतने बड़े पूल का प्रबंधन कर सकते हैं ( default_hugepagesz=2M hugepagesz=2M hugepages=25605GB मेमोरी के साथ बूट और होस्ट ओएस पर 1GB छोड़कर)।

आपको इसे अपनी VM परिभाषा में भी जोड़ना होगा।

<memoryBacking>
  <hugepages/>
</memoryBacking>

और अपने प्रश्न का उत्तर देने के लिए, यदि आप बहुत बड़े पैमाने का उपयोग करते हैं, तो "कितनी मेमोरी" का उत्तर दिया जाएगा grep ^Huge /proc/meminfo। यहाँ एक उदाहरण 60G के साथ VMs के लिए आरक्षित है, और लगभग 600MB अभी भी उपलब्ध है।

> grep ^Huge /proc/meminfo
HugePages_Total:   30000
HugePages_Free:      304
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

1

यहाँ मेरा hacky संस्करण है। विचारों में सुधार करने के तरीके, स्वागत योग्य हैं:

हर वीएम की जरूरत के अनुसार राम की मात्रा की सूची दें:

hypervisor5:~ # for dom in $(virsh list --all --name); do echo $(virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p') $dom ; done| sort -n
524288 testfoo
2146304 x131
3121152 y114
3121152 foo
4096000 y123
4194304 mac-test
6144000 x123

VM द्वारा उपयोग किया गया RAM का योग

hypervisor5:~ # for dom in $(virsh list --all --name); do virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p' ; done| awk '{s+=$1} END {print s}'
23347200

उपलब्ध भौतिक वीएम:

hypervisor5:~ # cat /proc/meminfo | grep MemTotal
MemTotal:       24797436 kB

VM चलाने वाले ऑपरेटिंग के लिए कितना बचा है:

hypervisor5:~ # python -c 'print 24797436-23347200'
1450236 (kiB)

... हाइपरविजर के लिए बहुत कुछ नहीं बचा है।

फिर से: विचारों में सुधार करने के लिए यह स्वागत है!

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