پردازنده (CPU) چیست؟
پردازنده یا CPU همان قطعهای است که دستورهای برنامهها را اجرا میکند و در عمل تعیین میکند سرور شما در هر لحظه چند کار میتواند انجام دهد. برای انتخاب سرور، مقدار CPU را نباید با منطق «هرچه بیشتر بهتر» انتخاب کرد؛ ملاک، نوع کاری است که اجرا میکنید: تعداد درخواستهای همزمان، سنگینی هر درخواست، و اینکه برنامه شما میتواند کار را بین چند هسته پخش کند یا روی یک هسته گیر میکند.
CPU مخفف Central Processing Unit و در لغت به معنی واحد پردازش مرکزی است. پردازنده حکم مغز سرور را دارد و عملیات ریاضی، منطقی، مقایسهای و آدرسدهی حافظه را انجام میدهد و جریان اجرای برنامهها را مدیریت میکند.
پردازنده در یک سرور دقیقاً چه کار میکند؟
کار پردازنده یک چرخه تکراری است: دستور بعدی را از حافظه میخواند، رمزگشایی میکند، اجرا میکند و نتیجه را مینویسد. برای اینکه این چرخه معطل حافظه نماند، هر پردازنده چند لایه حافظه نهان (Cache) در سطوح L1، L2 و L3 دارد که دادههای پرمصرف را نزدیک هسته نگه میدارد. به همین دلیل حجم کش و پهنای باند حافظه گاهی به اندازه تعداد هسته در کارایی واقعی اثر میگذارد.
هسته، رشته و vCPU چه فرقی دارند؟
هسته (Core) یک واحد اجرایی فیزیکی است و میتواند مستقل از بقیه، یک جریان از دستورها را اجرا کند. رشته (Thread) در فناوریهایی مثل Hyper-Threading اینتل یا SMT در AMD، به این معناست که هر هسته فیزیکی خود را به شکل دو پردازنده منطقی به سیستمعامل نشان میدهد. این دو رشته منابع اجرایی همان یک هسته را به اشتراک میگذارند؛ پس رشته دوم قدرت پردازش را دو برابر نمیکند و میزان سودش کاملاً به نوع بار کاری بستگی دارد.
در سرویسهای میزبانی معمولاً به هر واحد تخصیصیافته vCPU گفته میشود که در بیشتر موارد معادل یک پردازنده منطقی است، نه لزوماً یک هسته کامل فیزیکی. روی لینوکس با دستور lscpu میتوانید تعداد سوکت، هسته فیزیکی و رشته به ازای هر هسته را ببینید و با nproc تعداد پردازندههای منطقی در دسترس را بگیرید.
فرکانس بالاتر یا تعداد هسته بیشتر؟
فرکانس (بر حسب گیگاهرتز) یعنی پردازنده در هر ثانیه چند سیکل اجرا میکند، اما کار مفیدی که در هر سیکل انجام میشود بین معماریها و نسلهای مختلف فرق دارد. به همین دلیل مقایسه صرف عدد گیگاهرتز بین دو نسل متفاوت گمراهکننده است. ضمناً فرکانس پایه با فرکانس بوست یکی نیست؛ وقتی همه هستهها همزمان درگیر باشند، فرکانس پایدار معمولاً پایینتر از حداکثر تکهستهای است.
قاعده کلی ساده است:
- اگر بار کاری شما تکنخی است — مثل اجرای یک کوئری سنگین دیتابیس، یک اسکریپت پردازشی، یا نرمافزارهای معاملهگری که هر نمودار و هر اکسپرت را روی یک نخ اجرا میکنند — فرکانس بالا و کارایی تکهستهای تعیینکننده است. برای این دسته، سرور مجازی ترید و فارکس با تمرکز روی کارایی تکهستهای و تأخیر پایین گزینه منطقیتری از یک سرور با هسته زیاد و فرکانس پایین است.
- اگر بار کاری موازی است — تعداد زیادی درخواست همزمان وب، صفهای پردازشی، کامپایل، رمزگذاری ویدیو — تعداد هسته بیشتر نتیجه بهتری میدهد.
چرا در مجازیسازی، CPU به اشتراک گذاشته میشود؟
روی یک سرور فیزیکی چند ماشین مجازی اجرا میشود و هایپروایزر مثل یک زمانبند عمل میکند: به هر vCPU برشهایی از زمان روی هستههای فیزیکی میدهد. تا وقتی همه ماشینها همزمان اوج مصرف نداشته باشند، این اشتراکگذاری کاملاً منطقی است و همان چیزی است که سرورهای مجازی را مقرونبهصرفه میکند. اما اگر تخصیص بیش از ظرفیت (Oversubscription) از حد بگذرد، ماشینها برای گرفتن نوبت CPU منتظر میمانند.
این انتظار قابل اندازهگیری است. در لینوکس مهمان، ستون st در خروجی top یا vmstat همان Steal Time است: زمانی که پردازنده مجازی شما آماده اجرا بوده ولی هایپروایزر نوبت نداده است. معادل آن در VMware با معیار CPU Ready سنجیده میشود. اگر steal time بهطور مداوم قابل توجه باشد، مشکل از کد شما نیست و باید سراغ پلن با منابع اختصاصی یا سرور اختصاصی رفت که کل پردازنده فیزیکی در اختیار خودتان است.
نکته کمتر گفتهشده این است که دادن vCPU زیاد به یک ماشین مجازی همیشه کمک نمیکند؛ زمانبند هایپروایزر باید برای اجرای همزمان آن vCPUها منابع پیدا کند و در یک میزبان شلوغ، ماشین با vCPU زیاد ممکن است بیشتر از ماشین کوچکتر منتظر بماند.
چه مقدار CPU برای کار من لازم است؟
بهجای حدس زدن، اندازه بگیرید. روی سرور فعلی یا حتی یک محیط آزمایشی، این چند شاخص را ببینید:
- Load Average را با تعداد پردازندههای منطقی مقایسه کنید. عددی نزدیک یا بالاتر از
nprocیعنی صف اجرا در حال طولانی شدن است. - در
topتفکیکus(فضای کاربر)،sy(کرنل)،wa(انتظار ورودی/خروجی) وstرا ببینید. اگرwaبالاست، گلوگاه دیسک یا شبکه است نه پردازنده و افزودن هسته چیزی حل نمیکند. - با
pidstatیاhtopببینید کدام پروسه مصرف میکند و آیا مصرف روی یک هسته متمرکز شده است یا بین هستهها پخش میشود. - برای بار کاری وب، معیار عملی «زمان CPU به ازای هر درخواست» ضربدر تعداد درخواست همزمان است؛ بسیاری از سایتها بیش از آنکه به CPU نیاز داشته باشند، به کش و بهینهسازی کوئری نیاز دارند.
همیشه مقداری فضای خالی برای اوج مصرف نگه دارید؛ سروری که بهطور دائم نزدیک صد درصد کار میکند، در اولین موج ترافیک کند میشود. در کنار پردازنده، حجم رم، نوع دیسک و پهنای باند را هم بسنجید، چون گلوگاه واقعی اغلب یکی از اینهاست. اگر مطمئن نیستید کدام منبع محدودکننده شماست، پیش از خرید میتوانید از مشاوره پیش از خرید کمک بگیرید تا بر اساس بار کاری واقعی انتخاب کنید.
هنگام خرید سرور به چه چیزهایی نگاه کنیم
- نسل و معماری پردازنده، نه فقط عدد گیگاهرتز.
- اینکه منابع اعلامشده اختصاصی است یا اشتراکی و قابل تخصیص بیش از ظرفیت.
- امکان ارتقای منابع بدون مهاجرت کامل؛ شروع از پلن متناسب و بزرگ شدن تدریجی معمولاً کمریسکتر از خرید بیش از نیاز است.
- تناسب CPU با بقیه اجزا؛ پردازنده قوی در کنار دیسک کند یا رم ناکافی، کارایی را نجات نمیدهد.
جمعبندی: اول بفهمید کارتان تکنخی است یا موازی، بعد اندازه بگیرید که واقعاً چقدر زمان CPU مصرف میکنید، و در نهایت بین منابع اشتراکی و اختصاصی تصمیم بگیرید.
