واردات و تولید تراشه، مشکل اساسی توسعه زیرساخت هوش مصنوعی است
فعالان حوزه هوش مصنوعی در رویدادی با عنوان دستیابی به عمق هوش مصنوعی با ابراز…
۱۳ آبان ۱۴۰۳
۵ خرداد ۱۴۰۱
زمان مطالعه : ۸ دقیقه
تاریخ بهروزرسانی: ۲۴ خرداد ۱۴۰۲
در این مطلب میخوانید
پردازنده مجازی (vCPU) مخفف واحد پردازش مرکزی مجازی است. یک vCPU نشاندهنده بخشی یا سهمی از CPU فیزیکی است که به یک ماشین مجازی خاص (VM) اختصاص داده شده است. در این مطلب، به بررسی چیستی vCPU و همچنین تفاوتهای بین vCPU و CPUهای سنتی میپردازیم. همچنین به محاسبات ریاضی پشت vCPUها و نحوه محاسبه تعداد آنها نگاهی میاندازیم.
برای آشنایی با CPUهای مجازی ابتدا بهتر است با چند اصطلاح و تعریف در رابطه با سرورهای مجازی آشنا شویم. این اصطلاحات شامل هایپروایزر، سوکت، رشته، هسته فیزیکی و هسته منطقی است.
Hypervisor یک لایه نرمافزاری یا سختافزاری است که مجازیسازی منابع رایانه را امکانپذیر میکند و به چندین سیستم عامل یا برنامه اجازه میدهد روی یک ماشین فیزیکی واحد اجرا شود. لایه ای از انتزاع را فراهم می کند و تخصیص و استفاده از منابع سخت افزاری را برای مجازی سازی کارآمد و ایمن مدیریت می کند.
هایپروایزر را بهعنوان یک کنترلکننده در نظر بگیرید. گاهی اوقات از آن بهعنوان مانیتور ماشین مجازی (VMM) یاد میشود. به عبارت ساده، Hypervisor نرمافزاری است که برای ایجاد و اجرای ماشینهای مجازی (VM) استفاده میشود. این نرمافزار به کامپیوتر میزبان اجازه میدهد با به اشتراکگذاری مجازی منابع خود، مانند حافظه و پردازش، از چندین ماشین مجازی مهمان پشتیبانی کند. هایپروایزرها به اندازهای باهوش هستند که میتوانند منابع را چه به یک vCPU و چه به vCPUهای متعدد تخصیص دهند.
وقتی اصطلاح سوکت را میشنوید، به یک نوع سختافزار فکر کنید. تعداد سوکتهای یک مادربرد را تصور کنید، سوکت مجموعهای از پینها است که پردازنده را در جای خود نگه میدارد و مادربرد را به توان پردازشی موجود متصل میکند. تعداد سوکتها با توجه به ظرفیت مادربرد تعیین و بسته به اینکه از کدام نسل CPU پشتیبانی میشود، تفاوتهایی در سوکتها وجود دارد. سوکت یک نقطه پایانی برای ارتباط در یک شبکه کامپیوتری است. این نشان دهنده ترکیبی از آدرس IP و شماره پورت است که به داده ها اجازه می دهد بین برنامه ها یا دستگاه های مختلف از طریق اتصال شبکه ارسال و دریافت شوند.
هر پردازندهای دارای رشته و یا همان ترِد است. این رشتهها این امکان را به شما میدهند که چندین کار را همزمان انجام دهید، در صورتی که در حالت تک رشتهای برای اجرای فرآیند دوم ابتدا باید فرآیند اول به اتمام برسد. پس برای انجام چندین فرآیند فشرده تعداد بالایی از رشتهها نیاز است.
thread دنبالهای از دستورات است که می تواند به طور مستقل توسط پردازنده کامپیوتر اجرا شود. این یک جریان واحد کنترل را در یک فرآیند نشان می دهد و امکان اجرای همزمان چندین کار، بهبود کارایی و پاسخگویی یک برنامه یا سیستم را فراهم می کند.
Thread ها واحدهای اجرای سبک وزنی هستند که فضای حافظه و منابع یکسانی را در یک فرآیند به اشتراک میگذارند و امکان ارتباط کارآمد و هماهنگی بین وظایف مختلف را فراهم می کنند. با استفاده از thread ها، توسعه دهندگان می توانند از موازیسازی و همزمانی برای افزایش عملکرد و پاسخگویی برنامه های خود استفاده کنند و آنها را قادر میسازد تا چندین عملیات را به طور همزمان انجام دهند.
تعداد رشتهها فرمول سادهای دارد، پردازنده شما به ازای هر هسته خود ۲ رشته دارد. یعنی یک پردازنده ۸ هستهای دارای ۱۶ رشته است.
هسته فیزیکی همان واحد پردازش در CPU است که ممکن است با یک یا چند هسته منطقی مرتبط باشد. درحالی که یک هسته منطقی این امکان را برای یک هسته فیزیکی واحد فراهم میکند تا دو یا چند عمل را به طور همزمان انجام دهد. هستههای منطقی از زمانی که اولین پردازندههای سرور Intel Xeon و پردازندههای دسکتاپ Pentium 4 در سال ۲۰۰۲ عرضه شدند، بهوجود آمدند.
این هستههای منطقی بودند که مفهوم hyper-threading technology (HTT) را ممکن کردند. Hyper-threading فرآیند پیادهسازی همزمان چند رشتهای اختصاصی اینتل است و برای بهبود «موازی سازی» محاسبات انجام شده روی ریزپردازندههای x86 استفاده میشود.
قبل از HTT، اجزای فرعی هسته برای انواع دستورالعملها استفاده نمیشد و فقط میتوانست برای دستورالعملهای طولانیمدت استفاده شود. HTT این امکان را برای CPU فراهم کرد تا روی ۲ وظیفه بهطور همزمان کار کند.
Hyper-threading برای مجازیسازی مهم است زیرا به یک هسته پردازشگر فیزیکی اجازه می دهد تا چندین رشته را به طور همزمان مدیریت کند و به طور موثر تعداد هسته های منطقی را دو برابر کند. این امر عملکرد و کارایی کلی ماشین های مجازی را با امکان استفاده بهتر از منابع و بهبود قابلیت های چندوظیفه ای در محیط مجازی افزایش می دهد.
هستههای منطقی امروزی بیشتر شبیه CPUهای تمام عیار هستند، بنابراین میتوانند چندین کار را به طور همزمان انجام دهند. با این حال، آنها مانند هستههای یک CPU فیزیکی واقعی نیستند و در مقایسه با قابلیتهای فیزیکی هسته، محدودیتهایی برای hyper-threading وجود دارد.
سرورهای مجازی و تخصیص منابع آنها توسط برنامهای که به عنوان Hypervisor شناخته میشود، کنترل میشود. Hypervisor از بخشی از منابع محاسباتی CPU فیزیکی استفاده میکند و آن را به یک vCPU اختصاص میدهد که به یک ماشین مجازی (VM) خاص، اختصاص داده شده است. برخی از کارشناسان فناوری اطلاعات مفهوم vCPUها را به عنوان سهمی از زمان صرف شده روی هسته پردازنده در نظر میگیرند. مدیران سیستم میتوانند از هایپروایزرها برای راهاندازی تخصیص منابع مختلف در جایی که ماشینهای مجازی خاص با قابلیتهای ویژه vCPU پیکربندی شدهاند، استفاده کنند.
این سوال برای کسانی که با سرورهای مجازیسازی شده آشنایی ندارند میتواند تا حدودی نامشخص باشد. به همین دلیل به جزئیات ریاضی پشت این موضوع خواهیم پرداخت و شما ایده روشنی در مورد نحوه محاسبه تعداد vCPUهای مورد نیاز برای سرورهای ابری خود خواهید داشت.
در گذشته، یک قانون سرانگشتی وجود داشت که در هر هسته هشت vCPU وجود دارد. امروزه تعداد vCPU تا حد زیادی توسط سازنده تعیین و محاسبه آن به صورت زیر انجام میشود.
Threads × Cores×Physical CPU = Number of vCPU
یا به عبارت دیگر:
تعداد پردازندههای مجازی = تعداد رشتهها × تعداد هستهها × تعداد پردازندههای فیزیکی
بهترین راه برای یادگیری نحوه محاسبه vCPU و هستهها، نشان دادن آن از طریق یک مثال است.
ابتدا باید سرور مجازی و CPU را انتخاب کنیم. برای این مثال، Intel Xeon E-2288G را به عنوان CPU اصلی انتخاب میکنیم. آمارهای کلیدی برای Intel Xeon E-2288G شامل ۸ هسته / ۱۶ رشته با سرعت پایه ۳.۷ گیگاهرتز و تقویت توربو ۵.۰ گیگاهرتز است.
16Threads × 8Cores × 1CPU = 128vCPU
یا به عبارت دیگر:
۱۶رشته × ۸ هسته × ۱ پردازنده مرکزی = ۱۲۸ پردازنده مجازی
این موضوع را نیز مد نظر داشته باشید که تعداد هستههای مجازی اختصاص داده شده به ماشین مجازی محدود است. به عنوان مثال، ویندوز سرور R2 2008 تعداد vCPU ها را به ۴ عدد در هر ماشین مجازی محدود میکند که در سرور ویندوز ۲۰۱۲ این عدد به ۶۴ افزایش یافت.
وقتی سرورها مجازیسازی میشوند همه منابع به صورت مجازی در اختیار دستگاهها قرار میگیرد. در این بین هسته مجازی نیز از این قاعده مستثنی نیست. به این معنی که هسته یا Core پردازنده توسط نرمافزار در قالب یک vCPU به VMها معرفی خواهند شد.
هنگام خرید سیپییو شاید واژه هسته مجازی یا Threads به گوشتان خورده باشد. پردازندهها در ابتدا به صورت تکهستهای در بازار وجود داشتند که با افزایش بار پردازشی بازیها و نرمافزارها به مرور زمان نیاز به پردازندههای قویتر احساس شد. مهندسان در آن زمان به فکر تعبیه چند پردازنده در دستگاه کامپیوتر بودند که علاوه بر هزینه زیاد، فضای اضافی و ایجاد دمای بیش از حد را به دنبال داشت.
بعد از آن هر پردازنده که واحدهای اندازهگیری آن کوچک بود به نام Core یا هسته وارد بازار شد. یکی از اشکالات این معماری آن بود که هر هسته در آن واحد فقط میتوانست یک پردازش را انجام دهد. اگر پردازنده ۴ هستهای باشد، برای انجام ۸ پردازش ناچار خواهد بود ۴ مورد آن را در انتظار قرار دهد که باعث تأخیر در عملکرد سیستم میشد. در این شرایط بود که شرکت اینتل با فناوری Hyper-threading دنیای پردازندهها را متحول کرد.
در این فناوری هر هسته CPU بهعنوان ۲ واحد پردازشی به سیستم معرفی میشود و یک پردازنده ۴ هستهای با پشتیبانی از Hyper-threading دارای ۸ واحد پردازشی یا هسته مجازی خواهد بود. در چنین حالتی دیگر شاهد تاخیر در عملیات سیستم نیستید. یکی از ویژگیهای بسیار خوب این فناوری استفاده بهینه از منابع سختافزاری بوده که CPU یکی از همین منابع است. هسته مجازی در اکثر سیپییوهای امروزی وجود دارد و با پشتیبانی از سیستمعامل فعال میشود.
از نظر تئوری، اگر ماشینهای مجازی کوچکی دارید که خیلی کم از توانایی CPU استفاده میکنند، میتوانید به راحتی ۲۰-۳۰ ماشین مجازی از یک سرور ۸ هستهای دریافت کنید. با این حال، اگر حجم کاری بزرگتری مانند سرور پایگاه داده دارید، ماشینهای مجازی بسیار کمتری از همان سرور ۸ هستهای خواهید داشت.
در آخر، به برخی از پیکربندیهای مختلف نگاهی میاندازیم. البته این مورد فقط یک مثال است و تخصیص vCPU شما به هر ماشین مجازی، به حجم کاری خاص شما بستگی دارد.
۴ پردازنده مجازی به ازای هر ماشین مجازی:
۲ پردازنده مجازی به ازای هر ماشین مجازی:
یک پردازنده مجازی به ازای هر ماشین مجازی: