
به اشتراک بگذارید

به اشتراک بگذارید
هسته مجازی یا vCPU چیست؟ واحدی پردازشی که هایپروایزر از تردهای پردازنده فیزیکی میزبان میسازد و به ماشین مجازی تحویل میدهد. مستندات CPU Options سرویس Amazon EC2 همین نسبت را در یک جمله میگوید: «هر ترد روی نمونه به شکل یک پردازنده مجازی (vCPU) نمایش داده میشود». پس روی پردازندهای با Hyper-Threading فعال، دو هسته مجازی معمولاً یک هسته فیزیکی است، نه دو هسته.
| واحد | چه چیزی است | چه کسی آن را میسازد |
|---|---|---|
| هسته فیزیکی (Core) | واحد پردازشی مستقل درون تراشه پردازنده | سازنده پردازنده |
| ترد منطقی (Thread) | یک کانتکست اجرای مستقل روی همان هسته فیزیکی | فناوری Hyper-Threading یا SMT |
| هسته مجازی (vCPU) | ترد یا سهمی از زمان پردازنده که به ماشین مجازی داده میشود | هایپروایزر میزبان |
💡 خلاصه در سه خط
هسته مجازی قطعه سختافزاری جدا نیست. سهمی از زمان پردازنده میزبان است که هایپروایزر زمانبندی میکند.
✅ عدد پنل یک سقف تخصیص است، نه تضمین؛ توان واقعی به نسل پردازنده میزبان و شلوغی آن بستگی دارد.
✅ پیش از مقایسه دو پلن، مدل و فرکانس پایه پردازنده میزبان را بپرسید و ستون st را در ساعت اوج بخوانید.
بین عددی که در پنل سرور میبینید و توانی که برنامه شما میگیرد، سه لایه فاصله است: ترد پردازنده، زمانبندی هایپروایزر و نسل پردازنده میزبان. این سه لایه را با مستندات رسمی باز میکنیم. بعد با چند دستور فقطخواندنی میبینید سرور شما چه توپولوژیای دارد و پردازنده میزبانش چقدر شلوغ است.
📌 آنچه در این مقاله میخوانید
◀️ هسته مجازی چه سهمی از پردازنده فیزیکی دارد؟
◀️ رابطه هسته مجازی با ترد و Hyper-Threading
◀️ نسبت تخصیص و معنای Steal Time
◀️ چند هسته برای سایت، دیتابیس و ویندوز لازم است؟

هسته مجازی سهمی از زمان اجرای پردازنده میزبان است که هایپروایزر به ماشین مجازی میدهد. مستندات Proxmox VE این را دقیق توضیح میدهد: «برای هر پردازنده مجازی که اضافه میکنید، QEMU یک ترد اجرای تازه روی سیستم میزبان میسازد». پس هسته مجازی در عمل یک ترد روی میزبان است که سیستمعامل مهمان آن را یک پردازنده کامل میبیند.
این تفاوت در دید سیستمعامل مهم است. سیستمعامل داخل ماشین مجازی هیچ راهی ندارد بفهمد پشت هر هسته، یک هسته فیزیکی خالی نشسته یا تردی که با پنج ماشین دیگر شریک است. او فقط یک پردازنده با مجموعهای از فلگها میبیند و همین پنهان ماندن سختافزار واقعی کار اصلی مجازیسازی است؛ مقاله مجازیسازی چیست پایههای آن را توضیح داده. همین لایه است که در یک سرور مجازی ایران یا هر VPS دیگری بین شما و پردازنده میزبان قرار میگیرد.
مستندات Amazon EC2 فرمولی اعلام نمیکند، اما مثال عددیاش شمارش را روشن میکند: نمونه m5.xlarge پیشفرض دو هسته پردازشی و دو ترد روی هر هسته دارد، یعنی چهار هسته مجازی. پس شمارش عملی دو عدد لازم دارد، نه سه:
تعداد vCPU = تعداد کل هستههای فیزیکی × تعداد ترد هر هسته
# دو عدد بالا، به علاوه مدل و فرکانس میزبان:
lscpu | grep -E 'Core|Thread|Socket|Model name|MHz'
سوکت در این شمارش ضریب جدایی نیست؛ هستههای هر سوکت در همان «تعداد کل هستهها» جمع شدهاند. در Proxmox VE چیدمان سوکت و هسته «از نظر کارایی تقریباً بیاهمیت» است و تنها جایی که عدد سوکت اثر دارد، لایسنس نرمافزارهای سوکتمحور است.
🔸 نکته فنی: مدل پردازندهای که مهمان میبیند
هایپروایزر لازم نیست مدل واقعی پردازنده را به مهمان نشان دهد. پیشفرض بکاند در Proxmox VE مدل kvm64 است که روی تقریباً همه پردازندههای x86_64 کار میکند، و پیشفرض رابط گرافیکی برای ماشینهای تازه x86-64-v2-AES. با مدل host فلگهای واقعی میزبان به مهمان میرسد، اما مهاجرت زنده به میزبانی با پردازنده متفاوت ممکن است شکست بخورد. پس مدلی که در lscpu میبینید تصمیم مدیر میزبان است، نه لزوماً پردازندهای که ماشین روی آن اجرا میشود.
در بیشتر سرورهای امروزی هر هسته مجازی معادل یک ترد منطقی است، نه یک هسته فیزیکی. اینتل در صفحه معرفی این فناوری، Hyper-Threading را «نوآوری سختافزاری که اجازه میدهد بیش از یک ترد روی هر هسته اجرا شود» تعریف میکند. هر هسته فیزیکی دو کانتکست اجرا در اختیار سیستمعامل میگذارد. همین دو کانتکست است که بعد به دو هسته مجازی تبدیل میشود.
اما دو ترد روی یک هسته، دو برابر توان یک هسته نیست. مکانیزم کار این است که دو ترد همان واحدهای اجرایی و همان کش هسته را شریک هستند. سود Hyper-Threading از پر شدن زمانهای بیکاری هسته میآید: وقتی یک ترد منتظر داده از حافظه است، ترد دیگر از واحدهای اجرایی بیکار استفاده میکند. نتیجه این مکانیزم برای بارهای مختلف فرق میکند.
تقسیمبندی زیر نقل از مستندات هیچ سازندهای نیست و از همان مکانیزم اشتراک منابع بهعلاوه تجربه عملی میآید. آن را فرضیهای بگیرید که با اندازهگیری بخش بعد تأیید یا رد میشود:
جواب اینکه برای برنامه شما vCPU چیست و چقدر میارزد، از همین تقسیمبندی و آزمون روی سرور خودتان بیرون میآید. مستندات Amazon EC2 هم همین تفاوت را به رسمیت میشناسد: «میتوانید با تعیین یک ترد برای هر هسته، SMT را غیرفعال کنید». جایی که این کار را پیشنهاد میدهد، بارهای محاسبات کارایی بالا (HPC) است.
⚠️ سه قید مهم درباره غیرفعال کردن SMT
این گزینه مخصوص نمونههای EC2 است و در پنل یک سرور مجازی معمولی وجود ندارد؛ آنجا تعداد ترد هر هسته را مدیر میزبان تعیین میکند.
همان مستندات میگوید این تنظیم برای نمونههای T2، C7a، M7a، R7a، مک اپلسیلیکون و نمونههای Graviton قابل تغییر نیست.
عدد vCPU قابلمشاهده نصف میشود، اما سهمیه حسابشده عوض نمیشود: «شیوه محاسبه vCPUهای مصرفشده یک نمونه با تغییر گزینههای CPU آن تغییر نمیکند».

ارائهدهندگان معمولاً جمع هستههای مجازی همه ماشینها را بیشتر از تعداد هستههای فیزیکی میزبان میبندند و این کار خودش اشکالی ندارد. مستندات Proxmox VE صریح است: «اگر تعداد کل هستههای همه ماشینهای مجازی شما از تعداد هستههای سرور بیشتر باشد، کاملاً بیخطر است». مرز جای دیگری است و پایینتر آن را میبینیم.
آن مرز این است که یک ماشین تنها نمیتواند بیشتر از هستههای فیزیکی موجود هسته مجازی بگیرد. Proxmox VE جلوی روشن شدن چنین ماشینی را میگیرد و دلیلش را هم میگوید: این کار «فقط به خاطر هزینه تعویض کانتکست کارایی را پایین میآورد». پس اورکامیت در سطح کل سرور پذیرفته است، ولی در سطح یک ماشین پذیرفته نیست.
تعریف فنی اینکه vCPU چیست تا اینجا روشن شده است؛ عددی که از داخل ماشین مجازی بیشترین اطلاع را درباره سهم واقعی شما میدهد، Steal Time است. در صفحه راهنمای رسمی top ستون st با همین عبارت تعریف شده است: «زمانی که هایپروایزر از این ماشین مجازی دزدیده است». یعنی زمانی که سیستمعامل شما آماده اجرا بود و پردازنده فیزیکی در اختیار کسی دیگر بود.
این عدد در فهرست پروسهها نیست. در خروجی top خط خلاصهای که با %Cpu(s) شروع میشود را بخوانید؛ آخرین مقدار همان خط st است و کلید 1 آن را به یک خط برای هر هسته مجازی باز میکند. یک قید مستند هم هست: صفحه راهنمای top هشدار میدهد «بسته به نسخه کرنل شما، ممکن است فیلد st نمایش داده نشود».
# خط خلاصه که ستون st در آن است
top -bn1 | grep '%Cpu'
# نمونهبرداری ۱۰ دقیقهای در ساعت اوج، هر ۵ ثانیه
vmstat 5 120
مستندات بالا آستانه عددی اعلام نکردهاند و تفسیر زیر قاعده سرانگشتی اداره سرور است. نزدیک صفر یعنی هسته مجازی هر وقت که خواسته پردازنده گرفته است. چند درصد پراکنده در ساعت اوج رفتار طبیعی یک میزبان اشتراکی است. اما میانگین پیوسته دو رقمی در یک نمونهبرداری ده دقیقهای ساعت اوج، نشانه فروش بیش از ظرفیت میزبان است و افزودن هسته آن را درست نمیکند.
کنار Steal Time دو اهرم دیگر هم معنای عملی هسته مجازی را عوض میکند. هر دو سمت میزبان تنظیم میشوند و مشتری یک سرور مجازی نه آنها را میبیند و نه میتواند تغییر دهد. طبق مستندات Proxmox VE، cpulimit یک عدد اعشاری است که «زمان پردازنده را به درصد» سقف میگذارد و ۱.۰ برابر صد درصد است. ماشینی با هشت هسته مجازی و cpulimit برابر ۴.۰ از چهارصد درصد بالاتر نمیرود، یعنی هر هسته مجازی حداکثر پنجاه درصد. cpuunits هم وزنی نسبی با پیشفرض ۱۰۰ است (یا ۱۰۲۴ روی cgroup نسخه یک) و وزن ۲۰۰ دو برابر پهنای باند میگیرد.
⚠️ عددی که در پنل میبینید سقف است، نه تضمین
تعداد هسته مجازی یک سقف تخصیص است و سه چیز سهم واقعی را کمتر از آن سقف میکند: cpulimit، cpuunits و رقابت بقیه ماشینها روی همان میزبان. اگر فروشنده تضمین صریح پردازنده اختصاصی نمیدهد، فرض درست این است که سهم شما در ساعت اوج کمتر از عدد پنل است. پس st را در ساعت شلوغ سایتتان بخوانید، نه نیمهشب.

نقطه شروع عملی برای بیشتر سایتها و برای ویندوز سرور، دو هسته مجازی است و از آن به بالا عدد را بار کاری تعیین میکند، نه حجم فایلها. مستندات Proxmox VE همین عدد را برای حالتی توصیه میکند که از بار کاری ماشین مطمئن نیستید: «معمولاً گذاشتن تعداد کل هستهها روی ۲ انتخاب مطمئنی است».
جدول زیر نقل از مستند رسمی نیست و جمعبندی تجربه عملی اداره سرور است؛ آن را نقطه شروع بخوانید، نه عدد قطعی:
| بار کاری | نقطه شروع | چه چیزی عدد را بالا میبرد |
|---|---|---|
| سایت شرکتی یا وبلاگ با ترافیک کم | ۱ تا ۲ هسته | افزونههای سنگین و نبود کش صفحه |
| فروشگاه WooCommerce فعال | ۲ تا ۴ هسته | سبد خرید و جستوجو که کش نمیشوند |
| دیتابیس MySQL یا PostgreSQL جدا | ۲ تا ۴ هسته | تعداد کانکشن همزمان و کوئری بدون ایندکس |
| ویندوز سرور با یک نرمافزار حسابداری | ۲ تا ۴ هسته | تعداد کاربر همزمان و سرویسهای پسزمینه |
| پنل میزبانی با چند سایت مشتری | ۴ هسته و بیشتر | تعداد پروسه PHP-FPM و اسکن آنتیویروس |
درباره ویندوز سرور یک نکته مستند هست که معمولاً اشتباه نقل میشود. صفحه الزامات سختافزاری ویندوز سرور در Microsoft Learn نسخههای ۲۰۱۶ تا ۲۰۲۵ را پوشش میدهد و حداقل پردازنده در آن «پردازنده ۶۴ بیتی با فرکانس ۱.۴ گیگاهرتز» سازگار با x64 است. هیچ حداقلی برای تعداد هسته اعلام نشده و همان صفحه میگوید دامنه گسترده استقرارها اعلام سختافزار «توصیهشده» را غیرواقعی میکند. پس «ویندوز حتماً چهار هسته میخواهد» قاعده مستندی نیست.
جواب دقیق اینکه برای پروژه شما vCPU چیست، بدون دانستن نسل میزبان کامل نمیشود. یک ترد روی پردازنده نسل جدید با فرکانس توربوی بالاتر، کش بزرگتر و مجموعه دستورات تازهتر، در واحد زمان کار بیشتری تمام میکند. Proxmox VE سطحهای پردازنده مجازی x86-64 را هم بر همین پایه از هم جدا میکند. سطح v2 دستورات خانواده SSE4 را اضافه میکند، سطح v3 دستورات AVX و AVX2 را و سطح v4 دستورات خانواده AVX-512 را. برنامههایی مثل کتابخانههای رمزنگاری یا پردازش تصویر مستقیم از همین دستورات سود میبرند.
lscpu تطبیق دهید.nproc --all ببینید. nproc بدون این گزینه تعداد پردازنده در دسترس همان پروسه را میدهد که با affinity کمتر از عدد خریداریشده میشود.time روی سنگینترین کوئری. پنج بار تکرار کنید و عدد میانه را بردارید.st را هم بخوانید تا بدانید کندی از کم بودن هسته است یا از رقابت روی میزبان.top -H یا ps -eLf ببینید برنامه چند ترد همزمان اجرا میکند؛ یک پروسه تکتردی از هشت هسته هم فقط یکی را میگیرد.برای یک لایه پایینتر، راهنمای پردازنده سرور نسلها و خانوادههای پردازنده سرور را جدا از بحث مجازیسازی مقایسه کرده است.
پرسشهایی که کاربران سرور مجازی بیشتر درباره هستههای پردازنده میپرسند
پردازنده فیزیکی سختافزار واقعی روی مادربرد میزبان است و هسته مجازی سهمی از زمان اجرای آن که هایپروایزر به ماشین شما میدهد. سیستمعامل مهمان این سهم را یک پردازنده کامل میبیند.
خیر. وقتی Hyper-Threading یا SMT فعال باشد، دو هسته مجازی معمولاً دو ترد روی یک هسته فیزیکی است و این دو ترد واحدهای اجرایی و کش همان هسته را شریک هستند. برای بارهای محاسباتی پیوسته، توان دو ترد به توان یک هسته نزدیکتر است تا به توان دو هسته.
آستانه عددی رسمی وجود ندارد و آنچه در عمل به کار میرود یک قاعده سرانگشتی است. نزدیک صفر بهترین حالت است و چند درصد پراکنده در ساعت اوج طبیعی. میانگین پیوسته دو رقمی در یک نمونهبرداری ده دقیقهای نشانه شلوغی میزبان است. در آن حالت افزودن هسته مشکل را حل نمیکند.
خیر. lscpu عدد ترد هر هسته را نشان میدهد، اما آن را تضمین سختافزاری نگیرید. صفحه راهنمای lscpu میگوید در محیطهای مجازی، اطلاعات نمایشدادهشده پیکربندی مهمان را نشان میدهد و این معمولاً با سیستم فیزیکی فرق دارد. بخش BUGS هم هشدار میدهد روی سختافزار مجازی تعداد هسته هر سوکت میتواند نادرست باشد. پس مقدار یک برای ترد هر هسته هم ثابت نمیکند هسته اختصاصی دارید؛ راه سنجش سهم واقعی، خواندن Steal Time در ساعت اوج یا تضمین صریح پردازنده اختصاصی است.
خودش بد نیست و در عمل همه ارائهدهندگان آن را انجام میدهند؛ مستندات Proxmox VE آن را بیخطر میداند. مشکل زمانی شروع میشود که نسبت آنقدر بالا برود که Steal Time مدام دیده شود.
یک تا دو هسته برای شروع کافی است و مستندات Proxmox VE هم عدد ۲ را برای حالتی که از بار کاری مطمئن نیستید انتخاب مطمئن میداند. با فروشگاه یا بدون کش صفحه، دو تا چهار هسته منطقیتر است.
در حالت معمول خیر و تغییر منابع از ناحیه کاربری یا پنل سرویس انجام میشود. فقط اعمال شدن منابع تازه معمولاً به یک بوت مجدد نیاز دارد، پس آن را در ساعت کمترافیک انجام دهید.
صفحه الزامات سختافزاری Microsoft Learn برای نسخههای ۲۰۱۶ تا ۲۰۲۵ هیچ حداقلی برای تعداد هسته اعلام نکرده و فقط پردازنده ۶۴ بیتی ۱.۴ گیگاهرتزی سازگار با x64 را لازم دانسته است. در عمل دو هسته برای شروع کافی است.
دو علت رایج دارد. اول اینکه برنامه تکتردی است و از هستههای تازه استفاده نمیکند؛ این را با top -H ببینید. دوم اینکه گلوگاه دیسک یا کوئری بدون ایندکس است.
جمعبندی؛ عدد هسته را با معیار درست بخوانید
پاسخ کوتاه به اینکه vCPU چیست در یک جمله جا میشود: سهمی از زمان پردازنده میزبان که هایپروایزر زمانبندی میکند و مهمان آن را یک پردازنده کامل میبیند. همین جمله چند نتیجه عملی دارد. مستندات Amazon EC2 هر ترد را یک هسته مجازی میشمارد. پس عددی که در پلن میبینید از تعداد هستههای فیزیکی ضرب در تعداد ترد هر هسته میآید و روی میزبانی با Hyper-Threading، دو هسته مجازی به توان دو هسته فیزیکی نمیرسد. اورکامیت هم در مستندات Proxmox VE در سطح کل میزبان بیخطر شمرده میشود و تنها در سطح یک ماشین تنها ممنوع است. ستون st در دستور top هم بهترین شاهدی است که از داخل ماشین مجازی به دست میآید. تصمیم ارتقا را بر پایه همان بگیرید، نه بر پایه حس کندی. ترتیب درست کار هم این است: نسل و فرکانس میزبان را بپرسید، با یک بار کاری واقعی خودتان زمان بگیرید، و ارتقا را تنها وقتی انجام دهید که داده گلوگاه پردازنده را نشان داد.
🚀 سرور مجازی ایران وبداده
سرور مجازی ایران وبداده در دیتاسنتر تهران و روی شبکه رسپینا میزبانی میشود و امکان تست ساعتی رایگان دارد. پس میتوانید همان دستورهای این مقاله را روی سرور خودتان اجرا کنید و بعد تصمیم بگیرید.
اگر عدد st سرور خودتان را در ساعت اوج خواندید، همان عدد و نوع بار کاریتان را در کامنتها بنویسید تا بقیه هم بتوانند مقایسه کنند.