বিভিন্ন হাইপারভাইজারে (VMware, KVM, Hyper-V, ইত্যাদি) ভার্চুয়াল মেশিন তৈরি করার সময় আপনি দেখতে পেতে পারেন যে কখনো কখনো একটি ভার্চুয়াল মেশিন এটির জন্য অ্যালোকেট করা সকল ভার্চুয়াল প্রসেসর সকেট (vCPU) দেখে না। আমাদের ক্ষেত্রে, একটি KVM ভার্চুয়াল মেশিনে ৮ vCPU অ্যালোকেট করা ছিল এবং তাতে গেস্ট OS হিসেবে Windows 10 ইনস্টল করা ছিল। তবে, Windows এগুলো আলাদা প্রসেসর হিসেবে সনাক্ত করেছিল (কোর হিসেবে নয়) এবং এটি শুধু ২টি ব্যবহার করতে পারত।
Windows 10 ভার্চুয়াল মেশিন শুধু ২ কোর ব্যবহার করছে
আপনি যদি Windows Device Manager খুলেন, তবে আপনি নিশ্চিত করতে পারেন যে অ্যালোকেট করা সকল কোর ৮টি আলাদা ভার্চুয়াল প্রসেসর QEMU Virtual CPU version 2.5+ হিসেবে দৃশ্যমান।

একই সময়ে, Windows 10 প্রপার্টিজ (Computer → Properties) এবং Task Manager দেখায় যে শুধু ২টি QEMU ভার্চুয়াল প্রসেসর উপলব্ধ।

এর মানে Windows 10 শুধু ২ কোর ব্যবহার করতে পারে ব Gadget কতগুলো যোগ করুন না কেন। একই সময়ে, একই হাইপারভাইজারে Windows Server 2016 চালিত একটি ভার্চুয়াল সার্ভার তার জন্য অ্যালোকেট করা সকল ১৬ vCPU দেখতে পাচ্ছে।
Windows-এ সমর্থিত প্রসেসরের সংখ্যা
সমস্যাটি হল ডেস্কটপ Windows সংস্করণগুলোর (Windows 10/8.1/7) সর্বোচ্চ ফিজিক্যাল প্রসেসর (সকেট) সংখ্যার ওপর একটি সীমাবদ্ধতা আছে যা একটি কম্পিউটার ব্যবহার করতে পারে:
- Windows 10 Home – ১ CPU
- Windows 10 Professional – ২ CPU
- Windows 10 Workstation – সর্বোচ্চ ৪ CPU
- Windows Server 2016 – সর্বোচ্চ ৬৪ CPU
তবে, এই সীমাবদ্ধতা কোরের সংখ্যা সাথে সম্পর্কিত নয়। আপনার ভার্চুয়াল মেশিনের পারফরম্যান্স বাড়াতে, আপনি আরও কোর 가진 একটি প্রসেসর ব্যবহার করতে পারেন। অধিকাংশ হাইপারভাইজার vCPU-কে প্রসেসর, প্রসেসর কোর বা এমনকি থ্রেড হিসেবে প্রদান করতে পারে। এর মানে ৮ vCPU-এর পরিবর্তে, আপনি ২ vCPU (২ সকেট) যোগ করতে পারেন যার প্রত্যেকের ৪ কোর। চলুন দেখি কিভাবে বিভিন্ন হাইপারভাইজারে ভার্চুয়াল প্রসেসরকে কোর হিসেবে অ্যাসাইন করতে হয় এবং আধুনিক প্রসেসরে ব্যবহৃত NUMA আর্কিটেকচারের সাথে এটি কীভাবে বাঁধতে হয়।
KVM-এ ভার্চুয়াল কোর ও vCPU পরিচালনা
আমার KVM ভার্চুয়াল মেশিনে চলমান Windows 10-এ, অ্যালোকেট করা সকল ভার্চুয়াল কোর আলাদা প্রসেসর হিসেবে বিবেচিত হচ্ছে।
একটি ভার্চুয়াল মেশিনের জন্য অ্যালোকেট করা সকল CPU রিসোর্স ব্যবহার করতে হলে, সেটি এক ৮-কোর প্রসেসর, ৪ কোর সহ ২ vCPU বা ২ থ্রেড সহ ১ vCPU-এ ৪ কোর দেখতে হবে, ৮ vCPU হিসেবে নয়। চলুন KVM ভার্চুয়াল মেশিনের জন্য ভার্চুয়াল কোর অ্যালোকেশন পরিবর্তন করে দেখি।
আপনার ভার্চুয়াল মেশিন শাট ডাউন করুন:
# virsh shutdown w10testvm – যেখানে w10testvm আপনার ভার্চুয়াল মেশিনের নাম
এখানে কনসোল থেকে virsh ব্যবহার করে KVM ভার্চুয়াল মেশিন পরিচালনার দিকনির্দেশনা রয়েছে।
KVM ভার্চুয়াল মেশินের বর্তমান XML কনফিগারেশন প্রদর্শন করুন:
# virsh dumpxml w10testvm
আমাদের VM CPU সেটিংস বর্ণনা করে একটি ব্লক প্রয়োজন:
<vcpu placement='static'>8</vcpu> <cputune> <shares>1000</shares> </cputune> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> <bootmenu enable='yes'/> </os> <features> <acpi/> <apic/> <pae/> </features>
আপনি দেখতে পাচ্ছেন, এখানে ৮ vCPU সেট করা আছে। কনফিগারেশন পরিবর্তন করুন:
# virsh edit w10testvm
</features> এর পরে নিচের ব্লকটি যোগ করুন:
<cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='2'/> </cpu>
যেখানে:
host-passthroughহল এমুলেশন মোড যেখানে ভার্চুয়াল মেশিন ক্লাস্টার নোডের ফিজিক্যাল প্রসেসর দেখেsockets='1'ইঙ্গিত দেয় যে একটি vCPU (সকেট) আছেcores='4' প্রতি সকেটে ৪ কোর আছেthreads='2' প্রতিটি কোরে ২ থ্রেড আছে
কনফিগারেশন ফাইল সংরক্ষণ করুন এবং ভার্চুয়াল মেশিন চালু করুন। Windows 10 গেস্ট VM-এ লগইন করুন, Task Manager বা Resource Monitor চালু করুন, এবং নিশ্চিত করুন যে Windows অ্যালোকেট করা সকল ভার্চুয়াল কোর দেখছে।

হোস্টের একটি ফিজিক্যাল প্রসেসর, Intel(R) Xeon(R) Silver 4114 CPU, এখন সিস্টেম প্রপার্টিজে ভার্চুয়াল প্রসেসরের পরিবর্তে প্রদর্শিত হচ্ছে।

এভাবে আমরা VM-এর ভারী লোড সমস্যাটি সমাধান করতে পারলাম যেহেতু দুটি কোর অ্যাপ্লিকেশনগুলো সঠিকভাবে কাজ করার জন্য পর্যাপ্ত ছিল না।
VMware VM-এ प्रति vCPU কোরের সংখ্যা সেট করা
আপনি vSphere Client ইন্টারফেসে VMware ভার্চুয়াল মেশিনের vCPU প্রেজেন্টেশন পদ্ধতি পরিবর্তন করতে পারেন।
- VM শাট ডাউন করুন এবং এর সেটিংস খুলুন;
- CPU বিভাগটি প্রসারিত করুন;
- VM কনফিগারেশন পরিবর্তন করুন যাতে গেস্ট OS ৪ কোর সহ ২ প্রসেসর দেখতে পায়। Cores per Socket মানকে 4 এ পরিবর্তন করুন। এর মানে গেস্ট OS দুটি ৪-কোর CPU (২ সকেট, প্রতি সকেটে ৪ কোর) দেখবে;

- পরিবর্তনগুলো সংরক্ষণ করুন এবং VM চালু করুন।
ভার্চুয়াল মেশিন vCPU এবং NUMA আর্কিটেকচার
ভার্চুয়াল মেশিনে vCPU এবং কোর অ্যাসাইন করার আরও কিছু দিক আছে যা আপনাকে বুঝতে হবে।
প্রতি সকেট কোরের সংখ্যা অ্যাসাইন করার সময়, নিশ্চিত করুন যে আপনার पास NUMA আর্কিটেকচার আছে কিনা (আধুনিক CPU-এর অধিকাংশে ব্যবহৃত হয়)। একটি VM-এ আপনার ফিজিক্যাল সকেট (NUMA নোড) উপলব্ধ কোরের চেয়ে বেশি কোর প্রতি সকেট (এবং মোট vCPU সংখ্যা) অ্যাসাইন করা সুপারিশ করা হয় না। একক ফিজিক্যাল NUMA নোডে रखলে, একটি ভার্চুয়াল মেশিন নির্দিষ্ট NUMA নোডে উপলব্ধ দ্রুত লোকাল RAM ব্যবহার করতে পারবে। অন্যথায়, প্রসেসগুলো অন্য NUMA নোড থেকে রেসপন্স পাওয়ার জন্য অপেক্ষা করতে হবে (যা বেশি সময় নেয়)।
আপনি যদি একটি VM-এ দুটি আলাদা ভার্চুয়াল সকেট অ্যাসাইন করেন, তবে হাইপারভাইজার সেগুলো ভিন্ন NUMA নোডে चलाতে পারে। এটি VM পারফরম্যান্স প্রভাবিত করবে।
যদি প্রয়োজনীয় vCPU সংখ্যা ১ ফিজিক্যাল সকেট (NUMA নোড)-এ উপলব্ধ কোরের চেয়ে বেশি হয়, তবে প্রয়োজনীয় কোর সংখ্যার সাথে একাধিক ভার্চুয়াল সকেট (প্রসেসর) তৈরি করুন। এছাড়া বিজোড় সংখ্যক প্রসেসর ব্যবহার করা সুপারিশ করা হয় না (১ vCPU যোগ করা ভাল)।
এটি ভার্চুয়াল মেশিন পারফরম্যান্স বজায় রাখতে দেয়।

উদাহরণস্বরূপ, ১০ কোর প্রতি সকেট সহ ২-প্রসেসর হোস্টের জন্য (মোট ৪০ vCPU উপলব্ধ Hyper-Threading সহ) VM-এর জন্য vCPU কনফিগার করার সময় নিচের কনফিগারেশন সুপারিশ করা হয়:
| প্রয়োজনীয় vCPU সংখ্যা | VM সেটিংসে ভার্চুয়াল সকেটের সংখ্যা | VM সেটিংসে প্রতি ভার্চুয়াল প্রসেসরের কোর সংখ্যা |
| 1 | 1 | 1 |
| …… | ||
| 10 | 1 | 10 |
| 11 | অপ্টিমাল নয় | |
| 12 | 2 | 6 |
| …… | ||
| 20 | 2 | 10 |
ফ্রি ESXi সংস্করণে আপনি ৮ vCPU-এর বেশি VM তৈরি করতে পারবেন না।
উদাহরণস্বরূপ, ১৬ vCPU (কনফিগারেশন ৮ সকেট ২ কোর প্রতি সকেট) সহ Microsoft SQL Server 2016 Enterprise Edition চলমান একটি VM-র পারফরম্যান্স ২ সকেট x ৮ কোর প্রতি সকেট কনফিগারেশনের চেয়ে কম হবে।
এছাড়া মনে রাখবেন কিছু অ্যাপ্লিকেশন ফিজিক্যাল সকেটের সংখ্যার উপর ভিত্তি করে লাইসেন্সড (যেমন পূর্বের SQL Server সংস্করণে ছিল)। কখনো কখনো একাধিক কম কোরের প্রসেসরের চেয়ে একটি মাল্টিকোর প্রসেসর লাইসেন্স করা বেশি লাভজনক।
আধুনিক Windows Server সংস্করণগুলি ভার্চুয়াল পরিবেশে বিশেষভাবে লাইসেন্সড। VMware vSphere-এ প্রসেসর লাইসেন্সিং-এর কিছু দিকও রয়েছে।