هسته و هسته مجازی در سی پی یو یعنی چه؟
دیدم یکی از دوستانی که به پویاکام وارد شده است، از طریق سرچ این عبارت در گوگل وارد شده است: core/thread
و من یک توضیح مختصر که خواندنی باشد، در اینجا ارائه میکنم.
و من یک توضیح مختصر که خواندنی باشد، در اینجا ارائه میکنم.
این روزها شاید زیاد شنیده باشید که طرف میخواهد یک لپتاپ بخرد، میپرسد این چند هستهای است؟ و فروشنده میگوید چهار هستهای!
core در حقیقت همان هسته است. یعنی دو بخش مجزا از پردازندهی اصلی که جدا از هم فعالیت میکنند. انگار که دو پروسسور جدا باشند. انگار که کامپیوتر شما دو تا سیپییو داشته باشد. این دو کور، فرکانسی دارند که مجزا از هم فعالیت میکند. یعنی هر کدام 2 گیگاهرتز، فرکانس دارند. یعنی اولی 2 گیگاهرتز دارد کار میکند. دومی هم 2 گیگاهرتز دارد کار میکند.
میدانید که پروسسور به یک حافظه در کنار خود احتیاج دارد تا عملیات پرسرعت خودش را روی این حافظه انجام دهد. به این حافظه پرسرعت و گران، کش (cache) گفته میشود.
در سریهای جدید سیپییو، این حافظه کش بصورت هوشمند عمل میکند. یعنی اینطور نیست که هسته اول یک کش برای خود داشته باشد و هسته دوم هم یک کش مجزا. بلکه کل سیپییو یک کش بزرگ دارد. که هر کدام از هستهها که در حال فعالیت بودند و به کش بیشتر نیاز داشتند، مقدار بیشتر از کش را برای خودشان (در آن لحظه) برمیدارند.
مثلا ممکن است یک سیپییو دو هستهای، 4 مگابایت کش داشته باشد. اما در یک زمان، 3.5 مگابایت در اختیار هسته دوم باشد و 0.5 مگابایت در اختیار هسته اول.
core در حقیقت همان هسته است. یعنی دو بخش مجزا از پردازندهی اصلی که جدا از هم فعالیت میکنند. انگار که دو پروسسور جدا باشند. انگار که کامپیوتر شما دو تا سیپییو داشته باشد. این دو کور، فرکانسی دارند که مجزا از هم فعالیت میکند. یعنی هر کدام 2 گیگاهرتز، فرکانس دارند. یعنی اولی 2 گیگاهرتز دارد کار میکند. دومی هم 2 گیگاهرتز دارد کار میکند.
میدانید که پروسسور به یک حافظه در کنار خود احتیاج دارد تا عملیات پرسرعت خودش را روی این حافظه انجام دهد. به این حافظه پرسرعت و گران، کش (cache) گفته میشود.
در سریهای جدید سیپییو، این حافظه کش بصورت هوشمند عمل میکند. یعنی اینطور نیست که هسته اول یک کش برای خود داشته باشد و هسته دوم هم یک کش مجزا. بلکه کل سیپییو یک کش بزرگ دارد. که هر کدام از هستهها که در حال فعالیت بودند و به کش بیشتر نیاز داشتند، مقدار بیشتر از کش را برای خودشان (در آن لحظه) برمیدارند.
مثلا ممکن است یک سیپییو دو هستهای، 4 مگابایت کش داشته باشد. اما در یک زمان، 3.5 مگابایت در اختیار هسته دوم باشد و 0.5 مگابایت در اختیار هسته اول.

اما thread چیست؟
ترد را میتوان هسته منطقی نام نهاد. یا میتوانیم بگوییم هسته مجازی. در واقع وقتی میگوییم این کامپیوتر دارای چهار هستهی منطقی است یعنی سیستم عامل شما این پروسسور را دارای چهار هسته تشخیص میدهد و آن را چهار هستهای حساب میکند و به آن کار میدهد.
اما از نظر سختافزاری این کامپیوتر، همان مقدار هسته دارد که در تعداد «کور» دارد.
اگر سیستم شما 2 کور دارد و 4 ترد، یعنی دو هسته سختافزاری و واقعی وجود دارد که بصورت مجازی هر کدام به دو هسته مجازی تبدیل میشوند.
تردها، فرکانس مجزایی برای خودشان ندارند. بلکه با همان فرکانسی کار میکنند که هسته مادر دارد کار میکند. منظورم این است که چیزی به توانایی فرکانسی سیستم شما اضافه نمیکنند.
اما فایده تردها چیست؟
یک مثال ساده میزنم.
مثلا فرض کنید سیستم شما مشغول چندین کار است. فایرفاکس را باز کردهاید که چندین صفحه سنگین در حال اجرا دارد. در کنارش فتوشاپ را هم باز کردهاید و عکسی منتظر ویرایش شماست. کنارش اتوکد هم باز است.
در تمام حالات فوق؛ هر کدام از تردها مسوول یکی از برنامهها میشود. یعنی آن که دارد فایرفاکس را اجرا میکند؛ کاری به آن یکی که فتوشاپ را دارد اجرا میکند، ندارد.
نتیجه این میشود که اگر کار فتوشاپ شما سنگین شود و سیستم بخواهد هنگ کند؛ شما در همان زمان به راحتی کار فایرفاکستان را انجام میدهید. و متنظر میمانید که آن هسته مجازی که مسوول فتوشاپ بوده، کارش به پایان برسد. ضمن اینکه همچنان یک ترد بیکار هم دارید که میتوانید کار جدیدی را با آن شروع کنید.
اما اگر این هستههای مجازی را نداشتید چه میشد؟ یعنی اگر سیستم شما 2 کور داشت و 2 ترد ؟
این میشد که یک ترد باید همزمان فایرفاکس و فتوشاپ را اجرا میکرد. اگر کار فتوشاپ سنگین میشد و 100% توان هسته را لازم میداشت، در آن حالت دیگر اصلا فرامین فایرفاکس به شما پاسخ نمیدادند. و حاتی شبیه هنگ کردن دست میداد.
اما عیب بودن ترد بالا چیست؟
وقتی یک کور تبدیل به دو ترد میشود، عملا توانش افزایش نمییابد. بلکه توانش تقسیم میشود. خوبی این تقسیم شدن را در بالا گفتیم. اما بدیش همین میشود که یک ترد مسوول مثلا فایرفاکس میشود. حالا اگر فایرفاکس شما خیلی سنگین شد، این ترد توان کار را از دست میدهد. چرا که توان کمی دارد. از طرفی بقیه کور هم تبدیل شده به ترد دیگری که دارد برنامه دیگری را اجرا میکند.
این ترد نمیتواند از تردهای دیگر کمک بگیرد. و نتیجه این میشود که گاهی سیستم شما که 4 ترد دارد، 3 ترد آن بیکار میماند و یک ترد که مشغول یک کار وبگردی ساده است، هنگ میکند! به همین راحتی.
شاید بتوان گفت نبودن هایپر-تردینگ ( یعنی وجود هسته مجازی) گاهی بهتر است.
اگر بخواهیم مثال بزنیم اگر یک سیستم دو هستهای فقط همان دو هسته منطقی را داشته باشد، مانند یک پیکان میماند که با موتور کوچکش، از کار خودش برمیآید. اما آن سیستم دو هستهای که خود را به چهار ترد تبدیل میکند، شبیه میشود به یک پورشه با همان توان موتور که شتاب و دنده زیادی برای حرکت دارد.
در اغلب موارد پورشه، بیشتر توی چشم میآید. اما گاهی کار ساده یک پیکان (مانند تاکسی) را نمیتواند انجام دهد!
پینوشت:
یکی از دوستان پرسیده بود در سیپییو معنای «آپ تو» چیست؟
در جواب بگویم در برخی از سیپییوها، دو توان برای فرکانس معین شده است. یکی فرکانس معمولی است. یکی هم فرکانس بالاتر است که سیپییو بطور اتوماتیک در موارد مورد نیاز، خودش را به آن فرکانس ارتقا میدهد. به اصطلاح پرش میکند به آن فرکانس بالاتر. و وقتی فشار کار تمام شد، به فرکانس پایینتر بازمیگردد. این پرش فرکانسی، در هر هسته بطور کامل انجام میشود.
