لینوکس ۳۰۵؛ شب ۴: حافظه، NUMA و overcommit
فهرست نوشته
دو VM با RAM ظاهراً یکسان میتوانند latency متفاوت داشته باشند. امشب حافظهٔ تعهدشده، مصرف واقعی و محل CPU/حافظه را جدا میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 351.1، 351.4 آزمون 305-300.
محیط: hv-a؛ ابزار numactl در صورت نیاز نصب باشد. VM کوچک ممکن است فقط یک NUMA node ببیند.
free -h
numactl --hardware
cat /proc/meminfo
vmstat 1 5
NUMA یا دسترسی غیریکنواخت به حافظه، دسترسی به حافظهٔ نزدیک هر گروه CPU را توصیف میکند. node مجازی لزوماً نقشهٔ کامل سختافزار بیرونی نیست. vCPU تعداد رشتهٔ اجرای مجاز guest است؛ تعداد core فیزیکی را تضمین نمیکند.
بودجهٔ منابع#
overcommit تعهد منابع بیشتر از ظرفیت بر اساس فرض استفادهٔ همزمان است. برای RAM، swap/OOM و ballooning را بررسی کن؛ balloon بدون همکاری و driver مهمان ظرفیت قطعی نمیدهد. pause حافظه را آزاد نمیکند؛ shutdown وضعیت متفاوتی دارد.
بودجهٔ host، دو guest، cache و daemonها را بنویس. حافظهٔ XML، RSS فرایند QEMU و حافظهٔ داخل guest معیارهای متفاوتاند. hugepages و pinning میتوانند مفید باشند، ولی برای allocation و migration محدودیت میسازند.
آزمون: پیش و پس از اجرای دو VM در شبهای libvirt، همین خروجیها و virsh dommemstat را ثبت کن. کمبود RAM را با مصرف CPU یا timeout شبکه یکی ندان. OOM را روی میزبان اصلی آزمایش نکن.
بازگشت: این جلسه read-only است. تغییر اندازهٔ VM بعداً با مقدار قبلی و domain خاموش انجام میشود.
پرسش: چرا چهار guest با RAM دو گیگابایت، بودجهٔ کامل host هشت گیگابایتی نیست؟
منبع: حافظه در libvirt ، NUMA در kernel .