الجزء 1. حول وحدة المعالجة المركزيةالجزء 3. حول التخزينفي هذه المقالة ، سنتحدث عن عدادات أداء ذاكرة الوصول العشوائي في vSphere.
يبدو أن الذاكرة لا لبس فيها أكثر مما هو الحال مع المعالج: إذا كانت هناك مشاكل في الأداء على جهاز VM ، فمن الصعب عدم ملاحظة ذلك. ولكن إذا ظهرت ، يكون التعامل معهم أكثر صعوبة. لكن أول الأشياء أولا.
قليلا من الناحية النظرية
يتم الحصول على ذاكرة الوصول العشوائي للأجهزة الافتراضية من ذاكرة الخادم الذي تعمل عليه أجهزة VM. هذا واضح جدا :). إذا كانت ذاكرة الوصول العشوائي للخادم غير كافية للجميع ، يبدأ تطبيق ESXi في تطبيق تقنيات استرجاع الذاكرة. خلاف ذلك ، قد تتعطل أنظمة التشغيل VM مع أخطاء الوصول إلى ذاكرة الوصول العشوائي.
ما هي تقنيات استخدام ESXi التي تقرر اعتمادًا على حمل RAM:
مصدرminFree هو ذاكرة الوصول العشوائي اللازمة ل hypervisor للعمل.
قبل ESXi 4.1 ضمنيًا ، تم إصلاح minFree افتراضيًا - 6٪ من ذاكرة الوصول العشوائي للخادم (يمكن تغيير النسبة من خلال خيار Mem.MinFreePct على ESXi). في الإصدارات الأحدث ، نظرًا للزيادة في أحجام الذاكرة على خوادم minFree ، بدأ حسابها استنادًا إلى حجم ذاكرة المضيف ، وليس كنسبة مئوية ثابتة.
يتم احتساب قيمة minFree (افتراضي) كما يلي:
مصدرعلى سبيل المثال ، بالنسبة لخادم ذي 128 جيجابايت من ذاكرة الوصول العشوائي ، فإن قيمة MinFree ستكون:
MinFree = 245.76 + 327.68 + 327.68 + 1024 = 1925.12 MB = 1.88 GB
قد تختلف القيمة الفعلية عن طريق بضع مئات ميغابايت ، وذلك يعتمد على الخادم وذاكرة الوصول العشوائي.
عادة ، بالنسبة للمدرجات الإنتاجية ، يمكن اعتبار "مرتفع فقط" طبيعيًا. بالنسبة إلى منصات الاختبار والتطوير ، قد تكون ظروف Clear / Soft مقبولة. إذا كان هناك أقل من 64٪ من MinFree of RAM تبقى على المضيف ، فإن أجهزة VM التي تعمل عليها ستواجه بالتأكيد مشاكل في الأداء.
في كل ولاية ، يتم تطبيق بعض تقنيات استرجاع الذاكرة بدءًا من TPS ، والتي لا تؤثر عملياً على أداء VM ، والتي تنتهي بـ Swapping. سوف أخبركم المزيد عنهم.
مشاركة الصفحة الشفافة (TPS). TPS هو ، في الغالب ، إلغاء البيانات المكررة لصفحات RAM الخاصة بالأجهزة الافتراضية على الخادم.
يبحث ESXi عن صفحات متطابقة من ذاكرة الوصول العشوائي للجهاز الظاهري ، ويقوم بحساب ومقارنة مجموع صفحات التجزئة ، ويزيل الصفحات المكررة ، ويستبدلها بروابط لنفس الصفحة في الذاكرة الفعلية للخادم. نتيجة لذلك ، يتم تقليل استهلاك الذاكرة الفعلية ويمكن تحقيق بعض إعادة الاشتراك في الذاكرة مع فقدان أداء ضئيل أو معدوم.
مصدرتعمل هذه الآلية فقط لصفحات 4 كيلوبايت (صفحات صغيرة). صفحات بحجم 2 ميغابايت (صفحات كبيرة) لا يحاول برنامج hypervisor حتى إلغاء التكرار: فرصة البحث عن صفحات متطابقة بهذا الحجم ليست كبيرة.
بشكل افتراضي ، يخصص ESXi الذاكرة للصفحات الكبيرة. يبدأ تقسيم الصفحات الكبيرة إلى صفحات صغيرة عند الوصول إلى الحد الأعلى للولاية العليا ويتم فرضه عند الوصول إلى حالة المسح (انظر جدول حالة برنامج Hypervisor).
إذا كنت ترغب في بدء TPS في العمل دون انتظار تعبئة ذاكرة الوصول العشوائي للمضيف ، في الخيارات المتقدمة ESXi ، تحتاج إلى تعيين قيمة
"Mem.AllocGuestLargePage" إلى 0 (الافتراضي هو 1). ثم سيتم تعطيل تخصيص صفحات كبيرة من الذاكرة للأجهزة الافتراضية.
منذ ديسمبر 2014 ، في جميع إصدارات ESXi ، تم تعطيل TPS بين أجهزة VM افتراضيًا ، نظرًا لوجود ثغرة أمنية تسمح نظريًا بالوصول إلى ذاكرة الوصول العشوائي لـ VM آخر من جهاز VM واحد. التفاصيل هنا. معلومات حول التنفيذ العملي لاستغلال مشكلة عدم حصانة TPS التي لم أقابلها.
يتم التحكم في سياسة TPS من خلال الخيار المتقدم
"Mem.ShareForceSalting" على ESXi:
0 - Inter-VM TPS. يعمل TPS لصفحات أجهزة VM مختلفة ؛
1 - TPS لأجهزة VM بنفس القيمة "sched.mem.pshare.salt" في VMX ؛
2 (افتراضي) - Intra-VM TPS. يعمل TPS للصفحات داخل VM.
من المنطقي بالتأكيد إيقاف تشغيل الصفحات الكبيرة وتمكين Inter-VM TPS على مقاعد الاختبار. يمكن استخدامه أيضًا للحوامل التي تحتوي على عدد كبير من VMs من نفس النوع. على سبيل المثال ، عند استخدام VDI ، يمكن أن تصل مدخرات الذاكرة الفعلية إلى عشرات بالمائة.
ذاكرة البالون. لم يعد بالونينج تقنية غير ضارة وشفافة لنظام التشغيل VM مثل TPS. ولكن مع الاستخدام السليم مع Ballooning ، يمكنك العيش وحتى العمل.
جنبا إلى جنب مع أدوات Vmware ، يتم تثبيت برنامج تشغيل خاص على VM ، يسمى برنامج Balloon Driver (المعروف أيضًا باسم vmmemctl). عندما يبدأ برنامج Hypervisor في نفاد الذاكرة الفعلية ويدخل في الحالة Soft ، يطلب ESXi من VM إرجاع ذاكرة الوصول العشوائي غير المستخدمة من خلال برنامج Balloon Driver هذا. يعمل برنامج التشغيل بدوره على مستوى نظام التشغيل ويطلب منك ذاكرة خالية منه. يرى برنامج Hypervisor صفحات الذاكرة الفعلية التي أخذتها Balloon Driver ، ويأخذ الذاكرة من الجهاز الظاهري ، ويعيدها إلى المضيف. لا توجد أي مشكلة في تشغيل نظام التشغيل ، حيث إن الذاكرة على مستوى نظام التشغيل يشغلها برنامج تشغيل البالون. بشكل افتراضي ، يمكن أن يستغرق Balloon Driver ما يصل إلى 65٪ من ذاكرة VM.
إذا لم يتم تثبيت أدوات VMware على VM أو تم تعطيل Ballooning (لا أوصي بذلك ، ولكن يوجد
KB :) ، ينتقل برنامج Hypervisor على الفور إلى طرق أكثر صرامة لإزالة الذاكرة. الخلاصة: تأكد من أن أدوات VMware على VM هي.
يمكن التحقق من تشغيل برنامج Balloon Driver من نظام التشغيل عبر أدوات VMware .
ضغط الذاكرة يتم استخدام هذه التقنية عندما يصل ESXi إلى Hard. كما يوحي الاسم ، تحاول ESXi ضغط 4 كيلوبايت من صفحات ذاكرة الوصول العشوائي إلى 2 كيلوبايت ، وبالتالي توفير مساحة في الذاكرة الفعلية للخادم. هذه التقنية تزيد بشكل كبير من وقت الوصول إلى محتويات صفحات ذاكرة الوصول العشوائي من ذاكرة الوصول العشوائي ، حيث يجب إلغاء تنظيف الصفحة أولاً. في بعض الأحيان ، لا يمكن ضغط جميع الصفحات وتستغرق العملية نفسها بعض الوقت. لذلك ، هذه التقنية ليست فعالة جدا في الممارسة العملية.
تبادل الذاكرة. بعد مرحلة قصيرة ، لا بد من ضغط الذاكرة ESXi بشكل شبه حتمي (إذا لم تذهب VMs إلى مضيفين آخرين أو تم إيقاف تشغيلها) إلى Swapping. وإذا كان هناك القليل جدًا من الذاكرة المتبقية (الحالة المنخفضة) ، فإن برنامج Hypervisor يتوقف أيضًا عن تخصيص صفحات VM من الذاكرة ، مما قد يسبب مشاكل في أجهزة VM الضيف.
هذه هي الطريقة التي يعمل التبادل. عند تشغيل الجهاز الظاهري ، يتم إنشاء ملف بالملحق .vswp له. في الحجم ، فهو يساوي RAM غير المحجوز لـ VM: هذا هو الفرق بين الذاكرة التي تم تكوينها والذاكرة المحجوزة. عند العمل مع Swapping ، يقوم ESX بإلغاء تحميل صفحات الذاكرة الخاصة بالجهاز الظاهري في هذا الملف ويبدأ العمل معه بدلاً من الذاكرة الفعلية للخادم. بطبيعة الحال ، فإن ذاكرة الوصول العشوائي هذه هي عدة أوامر من حيث الحجم أبطأ من الذاكرة الحقيقية ، حتى لو كان .vswp في حالة تخزين سريع.
على عكس Ballooning ، عند اختيار الصفحات غير المستخدمة من جهاز VM ، يمكن للصفحات التي يتم استخدامها بنشاط من قبل نظام التشغيل أو التطبيقات داخل جهاز VM الانتقال إلى القرص أثناء التبديل. نتيجة لذلك ، يسقط أداء جهاز VM حتى يتم تعليقه. يعمل VM رسميًا على الأقل ويمكن تعطيله بشكل صحيح من نظام التشغيل. إذا كنت ستتحلى بالصبر ؛)
إذا ذهبت VMs إلى Swap ، فهذه حالة غير طبيعية يمكن تجنبها إن أمكن.
عدادات أداء ذاكرة الجهاز الظاهري الأساسية
لذلك وصلنا إلى الشيء الرئيسي. لمراقبة حالة الذاكرة في جهاز VM ، تتوفر العدادات التالية:
نشط - يوضح مقدار ذاكرة الوصول العشوائي (Kbytes) التي تمكن جهاز VM من الوصول إليها في فترة القياس السابقة.
الاستخدام هو نفسه نشط ، ولكن كنسبة مئوية من ذاكرة VM المكونة. يتم حسابها باستخدام الصيغة التالية: حجم ذاكرة الجهاز النشط active النشط.
الاستخدام العالي والنشط ، على التوالي ، لا يشير دائمًا إلى مشكلات أداء VM. إذا كان جهاز VM يستخدم الذاكرة بقوة (على الأقل يمكنه الوصول إليها) ، فإن هذا لا يعني أنه لا توجد ذاكرة كافية. بدلاً من ذلك ، هذه مناسبة لمعرفة ما يحدث في نظام التشغيل.
يوجد تنبيه قياسي على استخدام الذاكرة لأجهزة VM:
مشترك - مقدار ذاكرة الوصول العشوائي في VM مكررة باستخدام TPS (داخل VM أو بين VMs).
منحت - مقدار الذاكرة الفعلية للمضيف (Kbytes) الذي تم إعطاؤه لـ VM. يشمل المشتركة.
مستهلك (منحت - مشترك) - مقدار الذاكرة الفعلية (Kbytes) التي يستهلكها VM من المضيف. لا يشمل المشتركة.
إذا لم يتم تخصيص جزء من ذاكرة VM من الذاكرة الفعلية للمضيف ، ولكن من ملف المبادلة أو تم أخذ الذاكرة من VM من خلال Balloon Driver ، لا يتم أخذ هذا المبلغ في الاعتبار في Granted and Consumed.
قيم عالية من المنح والمستهلكين طبيعية تماما. يقوم نظام التشغيل تدريجياً بسحب الذاكرة من برنامج hypervisor ولا يعيدها. بمرور الوقت ، باستخدام VM فعال ، تقارب قيم هذه العدادات مقدار الذاكرة المكوّنة ، وتبقى هناك.
صفر - مقدار الذاكرة RAM في VM (Kbytes) ، والذي يحتوي على أصفار. تعتبر هذه الذاكرة برنامج Hypervisor مجاني ويمكن إعطاؤها للأجهزة الافتراضية الأخرى. بعد أن استلم نظام التشغيل الضيف ، كتب شيئًا ما في الذاكرة الفارغة ، وذهب إلى مستهلك ولا يعود مرة أخرى.
النفقات العامة المحجوزة - مقدار ذاكرة الوصول العشوائي في VM ، (Kbytes) المحفوظة بواسطة برنامج hypervisor حتى يعمل الجهاز. هذا مبلغ صغير ، ولكن يجب أن يكون متاحًا على المضيف ، وإلا لن يتم تشغيل VM.
بالون - مقدار RAM (KB) المضبوطة من VM باستخدام Balloon Driver.
مضغوط - مقدار ذاكرة الوصول العشوائي (KB) التي كان من الممكن ضغطها.
مبادلة - مقدار ذاكرة الوصول العشوائي (كيلوبايت) ، والتي بسبب نقص الذاكرة الفعلية على الخادم انتقلت إلى القرص.
بالون وغيرها من تقنيات استصلاح الذاكرة عدادات صفر.
هذا ما يبدو عليه الرسم البياني مع عدادات ذاكرة جهاز VM يعمل بشكل طبيعي مع 150 جيجابايت من ذاكرة الوصول العشوائي.

على الرسم البياني أدناه ، لدى VM مشاكل واضحة. يوضح الرسم البياني أنه تم استخدام كل التقنيات الموضحة للعمل مع ذاكرة الوصول العشوائي في هذا الجهاز. بالون لهذا VM أكبر بكثير من المستهلك. في الواقع ، من المحتمل أن يكون VM ميتًا أكثر منه حيا.

ESXTOP
كما هو الحال مع وحدة المعالجة المركزية ، إذا كنت ترغب في تقييم الموقف على المضيف بسرعة ، وكذلك ديناميكياته مع فاصل زمني يصل إلى ثانيتين ، فإن الأمر يستحق استخدام ESXTOP.
تسمى شاشة ذاكرة ESXTOP بالمفتاح "m" وتبدو هكذا (تم تحديد الحقول B و D و H و J و K و L و O):

المعلمات التالية ستكون مثيرة للاهتمام بالنسبة لنا:
Mem overcommit avg - متوسط قيمة ذاكرة زيادة الاشتراك على مضيف لمدة 1 و 5 و 15 دقيقة. إذا كانت أعلى من الصفر ، فهذه مناسبة لمعرفة ما يحدث ، ولكن ليس دائمًا مؤشرا على وجود المشكلات.
في السطور
PMEM / MB و
VMKMEM / MB - معلومات حول الذاكرة الفعلية للخادم والذاكرة المتوفرة لـ VMkernel. من المثير للاهتمام هنا يمكنك رؤية القيمة minfree (بالميجابايت) ، وحالة المضيف من الذاكرة (في حالتنا ، عالية).
في خط
NUMA / MB ، يمكنك مشاهدة توزيع ذاكرة الوصول العشوائي (RAM) بواسطة العقد (المآخذ). في هذا المثال ، التوزيع غير متساوٍ ، وهو من حيث المبدأ ليس جيدًا جدًا.
فيما يلي ملخص لإحصائيات الخادم لتقنيات استرجاع الذاكرة:
PSHARE / MB هو إحصائيات TPS ؛
SWAP / MB - إحصائيات حول استخدام Swap ؛
ZIP / MB - إحصائيات ضغط صفحات الذاكرة ؛
MEMCTL / MB - إحصائيات استخدام برنامج تشغيل البالون.
بالنسبة إلى الأجهزة الظاهرية الفردية ، قد نكون مهتمين بالمعلومات التالية. اختبأت أسماء VM حتى لا أحرج الجمهور :). إذا كان قياس ESXTOP هو نفسه العداد في vSphere ، أقتبس العداد المقابل.
MEMSZ هو مقدار الذاكرة التي تم تكوينها على VM (MB).
MEMSZ = GRANT + MCTLSZ + SWCUR + لم يمسها أحد.
منح - مُنحت بالميغابايت.
TCHD - نشط في ميغابايت.
MCTL؟ - مثبت على برنامج VM Balloon Driver.
MCTLSZ - بالون
بالميجابايت .
MCTLGT هو مقدار ذاكرة الوصول العشوائي (MB) التي تريد ESXi إزالتها من VM من خلال Balloon Driver (Memctl Target).
MCTLMAX - الحد الأقصى لمقدار RAM (MB) الذي يمكن لـ ESXi إزالته من VM عبر Balloon Driver.
SWCUR - المقدار الحالي من ذاكرة الوصول العشوائي (MB) الممنوحة إلى VM من ملف Swap.
SWGT - مقدار ذاكرة الوصول العشوائي (MB) التي تريد ESXi منح أجهزة VMs من ملف Swap (هدف Swap).
من خلال ESXTOP أيضًا ، يمكنك رؤية المزيد من المعلومات التفصيلية حول طوبولوجيا NUMA VM. للقيام بذلك ، حدد الحقول D ، G:

عقد
NHN - NUMA التي توجد عليها VM. هنا يمكنك على الفور ملاحظة vm واسعة لا تتناسب مع عقدة NUMA واحدة.
NRMEM - كم ميغابايت من الذاكرة يأخذ VM من عقدة NUMA البعيد.
NLMEM - كم ميغابايت من الذاكرة يأخذ VM من عقدة NUMA المحلية.
N٪ L - النسبة المئوية لذاكرة VM على عقدة NUMA المحلية (إذا كانت أقل من 80٪ ، فقد تحدث مشكلات في الأداء).
الذاكرة على المشرف
إذا كانت عدادات وحدة المعالجة المركزية (CPU) الموجودة في برنامج hypervisor ليست ذات أهمية خاصة ، فإن الموقف معاكس للذاكرة. لا يشير استخدام الذاكرة العالي على جهاز VM دائمًا إلى مشكلة في الأداء ، ولكن الاستخدام العالي للذاكرة في برنامج hypervisor يبدأ بفني إدارة الذاكرة ويؤدي إلى مشاكل في أداء جهاز VM. يجب مراقبة إنذارات استخدام ذاكرة المضيف وعدم السماح لـ VMs بالدخول إلى Swap.


Unswap
إذا دخلت VM في Swap ، فإن أدائها سيخفض إلى حد كبير. تختفي آثار التنفيس والضغط بسرعة بعد ظهور ذاكرة الوصول العشوائي المجانية على المضيف ، لكن الجهاز الظاهري ليس في عجلة للعودة من Swap إلى الخادم RAM.
قبل ESXi 6.0 ، كانت الطريقة الوحيدة الموثوقة والسريعة لإخراج VMs من Swap هي إعادة التشغيل (بدقة أكبر ، إيقاف تشغيل / تشغيل الحاوية). بدءًا من الإصدار 6.0 من ESXi ، ظهرت طريقة غير موثوقة ولكن فعالة وموثوقة للحصول على VMs من Swap. في أحد المؤتمرات ، تمكنت من التحدث مع أحد مهندسي VMware المسؤولين عن جدولة وحدة المعالجة المركزية. وأكد أن الطريقة تعمل وآمنة للغاية. في تجربتنا ، لم تُلاحظ أيضًا مشاكل معه.
تم وصف الأوامر الفعلية لإخراج VMs من Swap
بواسطة Duncan Epping. لن أكرر الوصف التفصيلي ، فقط أعط مثالاً على استخدامه. كما يمكن رؤيته في لقطة الشاشة ، يختفي بعض الوقت بعد تنفيذ أوامر Swap المحددة على VM.

نصائح لإدارة RAM على ESXi
في الختام ، سأقدم بعض النصائح لمساعدتك في تجنب مشاكل أداء VM بسبب ذاكرة الوصول العشوائي:
- تجنب زيادة الاشتراك في ذاكرة الوصول العشوائي في مجموعات مثمرة. يُنصح دائمًا أن يكون لديك ذاكرة خالية بنسبة 20-30٪ تقريبًا في المجموعة ، بحيث يكون لدى DRS (والمسؤول) مساحة للمناورة ، ولا يذهب VM إلى Swap أثناء الترحيل. أيضا لا تنسى هامش التسامح مع الخطأ. إنه أمر غير سار عندما ، عندما يفشل خادم واحد ويتم إعادة تشغيل VM باستخدام HA ، تنتقل بعض الأجهزة أيضًا إلى Swap.
- في البنى التحتية المدمجة للغاية ، حاول عدم إنشاء VMs بأكثر من نصف ذاكرة المضيف. هذا ، مرة أخرى ، سيساعد DRS على توزيع الأجهزة الافتراضية بين خوادم الكتلة دون أي مشاكل. هذه القاعدة ، بالطبع ، ليست عالمية :).
- احترس من المضيف استخدام الذاكرة إنذار.
- لا تنسَ وضع أدوات VMware على VM ولا تقم بإيقاف تشغيل Ballooning.
- النظر في تمكين Inter-VM TPS وتعطيل الصفحات الكبيرة في VDI وبيئات الاختبار.
- إذا كان جهاز VM يواجه مشكلات في الأداء ، فتحقق مما إذا كان يستخدم الذاكرة من عقدة NUMA بعيدة.
- احصل على VMs من Swap بأسرع وقت ممكن! من بين أشياء أخرى ، إذا كانت VM في Swap ، لأسباب واضحة ، فإن نظام التخزين يعاني.
هذا كل شيء لذاكرة الوصول العشوائي. فيما يلي مقالات ذات صلة لأولئك الذين يرغبون في الخوض في التفاصيل.
سيتم تخصيص المقال التالي للقصة.