کش سی پی یو یا CPU Cache حافظه درون پردازنده است که از نظر سرعت عملکرد حتی از رم ها نیز سریعتر عمل میکند. در این مقاله قصد داریم که به بررسی این موضوع بپردازیم و ببینم که کش سی پی یو چیست و چه کاربردهایی دارد.
کش سی پی یو چیست؟
کش سی پی یو به عنوان یکی از ملاک های اصلی سرعت و قدرت هر پردازنده شناخته می شود. در ادامه این مقاله قصد داریم که به شکل تخصصی و فنی به این موضوع بپردازم.
در ابتدای ساخت رایانه ها و ورود آنها به بازار و فراگیر شدنشان، معماری پردازنده های تک هسته ای و رم ها چند مگابایتی بسیار رواج داشت. پردازش های بدون گرافیک و کم حجم به راحتی با این دسته از رایانه ها انجام می گرفت. اما پیشرفت رایانه ها و نیاز به پردازش های حجیم تر و سنگین تر سبب شد که قاعده بازی به شدت تغییر کند.
اولین قدم برای افزایش سرعت پردازش ها افزایش حجم رم بود. با افزایش حجم رم ها، مقدار اطلاعات بیشتری برای پردازش در اختیار پردازنده ها قرار می گرفت و سرعت پردازش بسیار بیشتر شد. اما سرعت چندان بالا نرفت. در اینجا طراحان طرح چند هسته ای بودن پردازنده را ابداع کردند. افزایش تعداد هسته ها سبب شد که قدرت پردازش بیشتر شود، اما این امر مستلزم تغییرات نرم افزاری هم در سیستم عامل ها و هم در زمینه نرم افزارها بود.
بعد از فناوری چند هسته ای، فناوری رشته ای پا به عرصه وجود گذاشت. فناوری رشته ای سبب دو برابر شدن سرعت کار هسته های پردازنده ها شد. این افزایش سرعت سبب شد که پردازنده ها با قدرت بیشتر و بهتری به پردازش های خودشان بپردازند، اما این افزایش سرعت نیازهایی دیگری هم داشت.
اولین موردی که پژوهشگران با آن مواجه بودن آن بود که باید سیستم عامل و نرم افزارهایی ابداع می کردند که با سیستم چند هسته ای و رشته ای به خوبی کار کنند. این کار نیازمند تغییراتی در پارادایم های برنامه نویسی بود. بعد از آن مشکل جدی تری پیش آمد. گرچه سرعت پردازنده ها افزایش پیدا می کرد اما باس رم (تعداد دفعات تراکنش بین رم و پردازنده) آنقدرها هم افزایش پیدا نکرد (یا به زبان بهتر امکان افزایش آن به خاطر محدودیت های ساختاری وجود نداشت). محدودیت ها و موانع زیادی بر سر راه طراحان وجود داشت تا بتوانند این مشکل را رفع کنند.
مهمترین مشکل در راه توسعه سرعت تبادل، ساختارهای تبادلی بود. افزایش پهنای باند، استفاده بهینه از فرکانس و استفاده از رساناهای بهتر، همگی راهکارهایی بود که متخصصان برای افزایش سرعت تبادل رم و پردازنده به کار بردند. اما باز هم مشکل به صورت بهینه ای رفع نشد.
در اینجا بود که کش سی پی یو به صورت یک راهکار نهایی ارائه شد.
کش سی پی یو این امکان را به پردازنده می دهد که در سریعترین زمان ممکن اطلاعات را واکشی کرده و آن ها را پردازش کند. این کار نقش بسیار زیادی در افزایش سرعت پردازنده ها به خصوص پردازنده های چند هسته ای داشت. شاید بتوان گفت که حتی کاربرد آن بهتر از سیستم چند هسته ای بود زیرا بسیار نرم افزارها به گونه ای طراحی شده بودند که نمی توانستند از قدرت پردازش موازی پردازنده ها استفاده کنند، اما با بودن کش سی پی یو، پردازش آن ها بسیار بهتر و سریعتر انجام می گرفت.
سوالی که در اینجا مطرح می شود آن است که کش سی پی یو چیست و چگونه سبب افزایش سرعت پردازش می شود.
در زمانی که سی پی یو رایانه مشغول پردازش اطلاعات است، این کار را باید در سه مرحله انجام دهد. ابتدا باید داده ها را از یک حافظه (رم یا هارد یا کش خودش) فراخوان نماید، سپس آنها را رمزگشایی کند و پس از انجام پردازش نتیجه را مجددا به حافظه برگرداند. این سه مرحله پشت سر هم و دائما در پردازنده انجام می شود. پردازنده فاقد هرگونه حافظه ای است برای همین نیازمند تبادل دائمی با رم و یا دیگر حافظه ها برای دریافت اطلاعات است.
از نظر تئوری اطلاعات در رم همیشه آماده واکشی هستند و بلافاصله در دسترس پردازنده قرار می گیرند، اما در عمل مشکلات ساختاری مانع از انجام سریع این واکشی می شود. برای همین باید از معماری بهتری استفاده شود. در اینجا ما می توانیم از یک کش داخل پردازنده استفاده کنیم. کش داخل پردازنده دقیقا مدت زمان واکشی را از میان می برد و به پردازنده این اجازه را می دهد که بلافاصله و در زمان نیاز از آدرس های خواسته شده اطلاعات را خوانده و اجرا کند.
پس در واقع علت وجود کش سی پی یو آن است که مدت زمان دسترسی پردازنده به اطلاعات و داده های مورد نظر را تا حد زیادی کاهش دهد.
در اولین سری از کش سی پی یو، آن تنها در یک سطح و با ظرفیت ۵۶ کیلوبایتی بر روی پردازنده های اینتل عرضه گردید. اما این ظرفیت با افزایش تعداد هسته و قابلیت پردازش رشته ای افزایش بیشتری پیدا کرد. بعد از مدتی مشکل جدیدی در سر راه طراحان پردازنده ها قرار گرفت.
ظرفیت کش سی پی یو تک سطحی به سرعت پر می شد و نیاز به فضای بیشتر بود. اما مشکل فقط فضا نبود، در اینجا باید آدرس دهی به سرعت بیشتری انجام می شد. بعد از کمی تحقیق حالت دو سطحی برای کش سی پی یو ارائه شد.
در حالت دو سطحی ، مقدار مشخصی از اطلاعات وارد کش سطح دوم می گردد، بخش مورد واکشی پردازنده ها وارد کش سی پی یو سطح یک شده و مورد پردازش قرار می گیرد. در صورتی که نیاز به آدرس بیشتری باشد، درخواست آدرس به کش سطح دوم ارسال شده و در صورت نبود داده و یا آدرس مورد نظر درخواست برای رم ارسال می شود.
استفاده از معماری دو سطح برای کش سی پی یو، کار پردازنده ها را سریعتر کرد و استفاده از پردازش های چند سطحی را بهبود بخشید. در این زمان هم توسعه مواد نیمه رسانا سبب شد که ظرفیت کش سی پی یو های دو سطحی به ۱۲۸ کیلوبایت در سطح اول و ۲ تا ۸ مگابایت در سطح دوم برسد.
افزایش سطح کش ها امکان توسعه بیشتر هسته ها را فراهم آورد. با کوچکتر شدن ترانزیستورها در پردازنده ها این امکان به وجود آمد که تعداد هسته های بیشتری در یک پردازنده به کار رود و طبیعی بود که این کار یعنی نیاز بیشتر به حافظه های سریعتر، که در نتیجه آن کش سطح سوم نیز به وجود آمد.
ترتیب کار سطح سوم کش سی پی یو با حالت دو سطحی تفاوتی ندارد تنها تفاوت افزایش این حجم کش سطح سوم تا ۱۲۸ مگابایت است. در این جا هم، بخشی از اطلاعات وارد کش سی پی یو سطح سوم می شود و بعد بر حسب پردازش های پردازنده اطلاعات از آن وارد سطح های دوم و اول کش سی پی یو شده و پس از پردازش از آن خارج شده و راهی رم می شود. این کار به خصوص در زمانی که تعداد هسته های یک پردازنده زیاد است بسیار سودمند است.
در سال های اخیر کش سی پی یو در هر سه سطح شاهد افزایش ظرفیت بوده است. کش هایی سطح اکنون تا یک مگابایت، سطح دو تا ۱۶ مگابایت و کش سطح سه تا ۱۲۸ مگابایت فضا را در اختیار پردازنده ها قرار می دهند. این کار سبب می شود که در فرایند هایی نظیر مجازی سازی، محاسبات پیچیده و غیره در شبکه های شلوغ به راحتی انجام شده و پردازنده ها بدون هیچ مشکلی به کار خودشان ادامه دهند.
آیا کش پردازنده بیشتر به معنای سرعت بالاتر پردازنده است؟
همانطور که در مقاله های قبل هم اشاره شد، با افزایش تک عاملی نمی توانید سرعت رایانه و یا سرور خودتان را بیشتر کنید. سریعتر شدن رایانه یا پردازنده شما وابسته به عوامل گوناگونی است. برای مثال اگر نرم افزاری که با آن کار می کنید توانایی پردازش موازی را نداشته باشد و یا آنکه بقیه سخت افزاری شما توانایی تبادل اطلاعات کافی با پردازنده را نداشته باشند (محدودیت کانالها، پهنای باند و یا پایین بودن باس ها) در نتیجه شما نمی توانید به صورت بهینه از آنها استفاده کنید. این کار می تواند سبب شود سرعت رایانه و یا سرور شما کم شود و در نتیجه سرور شما سنگین کار کند.
منظور از Cache Miss و Cache Hit در کش سی پی یو چیست؟
همانطور که در بالا هم به این موضوع اشاره شد، هنگامی که پردازنده مشغول پردازش است، اطلاعات واکشی خود را از کش سطح یک دریافت می کند، در صورت نبود اطلاعات لازم و یا آدرس دهی، به سراغ سطح دوم کش می رود و به همین طریق به کش سوم مراجعه می کند. این ترتیب جستجو همیشه و به صورت سریع انجام می شود.
اگر در این جستجو پردازنده بتواند اطلاعات لازم را در کش سی پی یو پیدا کند، در آن صورت Cache Hit (دستیابی به اطلاعات) رخ می دهد و در صورتی که این اطلاعات در کش سی پی یو یافت نشود، Cache Miss (عدم یافتن اطلاعات) رخ میدهد.
Cache Miss میتواند به علل مختلفی روی دهد، ناسازگاری نرم افزارها با سامانه های جدید پردازشی و یا مشکل در سیستم آدرس دهی از جمله مواردی هستند که سبب ایجاد Cache Miss می شود.
چرا رم را مانند کش پردازنده نمی سازند؟
راستش می سازند، اما مشکل در رم نیست در ارتباط رم با پردازنده است. در واقع همان تکنیک هایی که برای ساخت رم به کار برده می شود، در کش سی پی یو هم استفاده می شود، اما مشکل در اینجاست که برای دستیابی به اطلاعات رم باید فاصله اندکی بین اسلات رم تا هسته پردازنده پیموده شود، این مقدار به چند ده هزارم ثانیه می رسد، شاید به نظر زمان بزرگی نباشد، اما زمانی که به این مطلب فکر کنید که در هر ثانیه ۲٫۷ میلیارد پردازش در پردازنده انجام می شود، می توانید بفهمید که این مقدار کم می تواند چه اختلاف بزرگی را ایجاد کند.
علت دیگری که از کش سی پی یو استفاده می شود آن است که کش های سی پی یو این فرصت را به هسته های پردازنده می دهند که اطلاعات پردازش شده را با سرعت مطمئن به رم انتقال دهند و سپس به بخش مورد نظر ارسال شوند.
یکی از پیشرفت هایی که در سال های اخیر به وجود آمده است، بزرگتر کردن فضای پردازنده ها و افزایش فضای کش است. همانطور که در بالا هم گفته شد، کش پردازنده ها از ۲۸ کیلوبایت اولیه به ۱۲۸ مگابایت در سه سطح رسیده است. اما این آخر ماجرا نیست. اکنون ایده هایی برای حذف کامل رم ها و ادغام آن ها در دست بررسی است.
از یک سوی دیگر شیوه هایی نظیر پردازش کوانتومی نیز به نتایج بسیار خوبی رسیده است. در زمینه فایروال ها هم پیشرفت های قابل توجهی را شاهد هستیم. ترکیب فناوری، نوآوری و نیاز بازار در حال تغییر بسیار از شیوه های معمول است. اکنون و در زمان نوشتن این مقاله (پاییز ۹۸) شرکت گوگل از رایانه کوانتومی خود با قدرت پردازش خیره کننده اش پرده برداری کرده است، شرکت سوفوس از پردازنده های بسیار قوی در فایروالهای خود استفاده می کند و شرکت اچ پی نیز از ارائه رم هایی با ظرفیت ۵۱۲ گیگابایت و بیشتر صحبت می کند. شاید خیلی زود این مقاله تبدیل به یک بخش از تاریخ توسعه رایانه ها شود..!!
سوالات متداول
کش سی پی یو چیست؟
کش سی پی یو یا CPU Cache یک حافظه فوق العاده سریع است که در درون پردازنده قرار دارد و سرعت پردازش ها را بسیار بیشتر می کند. به صورت معمول این کش ها در سه سطح ارائه می شود. سطح سوم بالاترین مقدار حافظه را داراست.
آیا کش سی پی یو بیشتر به معنای سرعت بالاتر رایانه است؟
نه الزاما، اما با افزایش مقدار حافظه های کش در پردازنده ها، سرعت پردازش هسته ها افزایش پیدا می کند. اما افزایش سرعت رایانه یک پازل چندوجهی است که صرفا با افزایش یک عنصر تغییر چندانی پیدا نمی کند.
منظور از Cache Miss و Cache Hit چیست؟
هنگامی که پردازنده در واکشی اطلاعات بتواند آدرس اطلاعات مورد نظر را در یکی از سطوح کش بیابد، Cach Hit روی می دهد و در غیر این صورت حالت Cache Hit روی می دهد.
چرا به جای توسعه رم بر روی کش سی پی یو کار می شود؟
مشکل اساسی در این جا تبادل اطلاعات میان رم و پردازنده است. حتی با بهینه ترین حالت باز هم این مدت زمان این تبادل زیاد است. اما کش های درون پردازنده به سرعت می توانند اطلاعات – به خصوص در زمانی که پردازنده چند هسته ای باشد-را در اختیار پردازنده قرار دهند. به همین خاطر افزایش حجم کش سی پی یو در صدر توسعه پردازنده ها قرار گرفته است. با این حال توسعه حجم و ظرفیت رم ها در حال ادامه یافتن است.