ভার্চুয়ালাইজেশন হোস্টে (VMWare ESXi বা Hyper-V) চালিত VM-গুলো প্রশাসন করার সময় এবং পারফরম্যান্স সমস্যা বিশ্লেষণ করার সময়, আপনি প্রায়শই এমন পরিস্থিতি মুখোমুখি হন যখন গেস্ট OS-এ উপলব্ধ মেমরির আকার অপারেটিং সিস্টেম যা দেখে (অথবা যা এসাইন করা হয়েছে) তার চেয়ে অনেক কম। উদাহরণস্বরূপ, একটি ভার্চুয়াল মেশিনে ৮ GB মেমরি অ্যালোকেট করা হয়েছে, টাস্ক ম্যানেজার দেখায় ১ GB ফ্রি যদিও সকল চলমান প্রসেস কমপক্ষে ৩ GB মেমরি ব্যবহার করছে। বাকি ৪ GB কোথায় গেল?
সাধারণত, এই আচরণ হাইপারভাইজরে মেমরি ওভারকমিট ফিচার ব্যবহার করার কারণে হয়।
মেমরি ওভারকমিট হল একটি হাইপারভাইজর ফিচার যা আপনাকে ফিজিক্যাল হোস্টে উপলব্ধ মেমরির চেয়ে বেশি মেমরি ভার্চুয়াল মেশিনগুলোর জন্য অ্যালোকেট করার অনুমতি দেয়, কিন্তু এই সব অনুরোধকৃত মেমরি যেকোনো নির্দিষ্ট মুহূর্তে অ্যালোকেট করা যাবে এমন কোনো গ্যারান্টি নেই। মেমরি ওভারকমিট বর্তমান হোস্ট লোডের উপর নির্ভর করে VM-গুলোর মধ্যে ডাইনামিক মেমরি বিতরণের কারণে ভার্চুয়াল মেশিনগুলো আরও ঘনভাবে অ্যালোকেট করার অনুমতি দেয় (ব্যবহারহীন VM-দের রিসোর্স বেশি লোডওয়ালা VM-গুলোর মধ্যে পুনর্বিতরণ করা যেতে পারে)।
VMWare-এ মেমরি ওভারকমিটমেন্ট বাস্তবায়নের একটি মেকানিজম হল মেমরি ব্যালুনিং। Hyper-V-এ, একই ফিচারটি ডাইনামিক মেমরি দ্বারা বাস্তবায়িত হয়।
নোট:imenti, VMWare এবং Microsoft উভয়েই কার্যকরভাবে মেমরি কম্প্রেশন ব্যবহার করে মেমরি রিসোর্স বাঁচাতে (এটি মেমরি ওভারকমিট টেকনোলজির একটি বাস্তবায়নও)।
VMWare ESXi-এ মেমরি ওভারকমিটমেন্ট (ভার্চুয়াল মেমরি ব্যালুনিং) vmmemctl.sys ড্রাইভার (VMware Tools-এ অন্তর্ভুক্ত) দ্বারা বাস্তবায়িত হয়, যা প্রয়োজনে একটি নকল প্রসেস তৈরি করে (ব্যালুন ফোলানোর মতো) ফিজিক্যাল মেমরি ক্যাপচার করতে পারে। এইভাবে, заняस्त মেমরির পরিমাণ গেস্ট OS-এ অন্যান্য অ্যাপ্লিকেশনের জন্য অনুপলব্ধ হয়ে যায়, এবং হাইপারভাইজর ফ্রি মেমরি অন্যান্য VM-গুলোর মধ্যে বিতরণ করতে পারে। Hyper-V ডাইনামিক মেমরিতে, ইন্টিগ্রেশন সার্ভিসেস থেকে dmvsc.sys ড্রাইভার (ডাইনামিক মেমরি VSC কম্পোনেন্ট) ব্যবহার করা হয়। মেমরি ওভারকমিটমেন্ট সেটিংস হাইপারভাইজর অ্যাডমিনিস্ট্রেটর দ্বারা পরিচালিত হয়।
গেস্ট VM-এর ভিতর থেকে আপনি কীভাবে সনাক্ত করবেন যে এটি আসলে গেস্ট অপারেটিং সিস্টেম যা দেখে তার চেয়ে কম ফিজিক্যাল মেমরি উপলব্ধ আছে?
চলুন বিবেচনা করি কীভাবে একটি গেস্ট উইন্ডোজ OS-এ ব্যালুন ড্রাইভার আছে কিনা এবং এর আকার কত তা সনাক্ত করা যায়। তাই, এই উদাহরণটি বিশ্লেষণ করি।
একটি VM-এ ৮ GB মেমরি অ্যালোকেট করা হয়েছে যা গেস্ট উইন্ডোজ সার্ভার ২০১২ R2 চালাচ্ছে। টাস্ক ম্যানেজার দেখায় ৯৩% মেমরি ব্যবহৃত হচ্ছে (৭.৪ GB মেমরি заняস্ত)। যাইহোক, যদি সকল চলমান প্রসেসের ব্যবহৃত মেমরির পরিমাণ যোগ করি, তবে আমরা একটি অপ্রত্যাশিত উপসংহারে পৌঁছাই যে শুধু ২.৫ GB মেমরিই আসলে ব্যবহৃত হচ্ছে। বাকি ৫ GB কোথায়? না টাস্ক ম্যানেজার, না রিসোর্স মনিটর এই প্রশ্নের উত্তর দিতে পারে।

মেমরির সাথে কী ঘটছে তা বুঝতে, আপনাকে RamMap টুল ব্যবহার করতে হবে মার্ক রাসিনভিচ দ্বারা (আরেকটি কেসে, আমি দেখিয়েছিলাম কীভাবে এই টুলটি উইন্ডোজ সার্ভারে মেটাফাইল দ্বারা উচ্চ মেমরি ব্যবহার সমস্যা ডায়াগনোস করতে ব্যবহার করা যায়)। মাইক্রোসফট ওয়েবসাইট থেকে টুলটি ডাউনলোড করুন (https://technet.microsoft.com/en-us/library/ff700229.aspx) এবং অ্যাডমিনিস্ট্রেটর প্রivilেজ দিয়ে চালান। তারপর Use Counts ট্যাবে আপনি দেখতে পাবেন যে অধিকাংশ মেমরি (৫.৪ GB) Driver Locked অবজেক্ট দ্বারা ব্যবহৃত হচ্ছে।

এটি সেই মেমরি যা হাইপারভাইজর احتل করেছে এবং গেস্ট OS-এ ব্যালুন ড্রাইভার ব্যবহার করে অন্যান্য ভার্চুয়াল মেশিনগুলোর মধ্যে বিতরণ করেছে। এর মানে হাইপারভাইজর হোস্টে পর্যাপ্ত মেমরি নেই অথবা হাইপারভাইজর অ্যাডমিনিস্ট্রেটর এই VM-এর জন্য মেমরি লিমিট পলিসি ব্যবহার করছেন।
Hyper-V-এ বর্তমান VM মেমরি পরিসংখ্যান পারফরম্যান্স মনিটরে আলাদা পারফরম্যান্স কাউন্টার দ্বারা দেখানো যেতে পারে:
- Hyper-V Dynamic Memory → Guest Visible Memory
- Hyper-V Dynamic Memory → Physical Memory
এই আচরণ নিষ্ক্রিয় করতে, হাইপারভাইজর অ্যাডমিনিস্ট্রেটরকে VM-এর Hyper-V সেটিংসে Enable Dynamic Memory অপশনটি নিষ্ক্রিয় করতে হবে (অথবা ন্যূনতম রিজারভেশন মান বাড়াতে হবে)।

যদি VMWare ESXi হোস্ট ব্যবহার করা হয়, তবে আপনি এই ভার্চুয়াল মেশিনের জন্য Resource Settings-এ আরও মেমরি রিজার্ভ করতে পারেন বা সমস্ত মেমরি রিজার্ভ করতে পারেন – Reserve all guest memory (All locked)।
