Directory-based cache coherence
در مهندسی کامپیوتر، انسجام کش مبتنی بر دایرکتوری نوعی مکانیسم انسجام کش است که در آن دایرکتوریها به دلیل مقیاس پذیری برای مدیریت کشها به جای روشهای اسنوپی استفاده میشوند. روشهای جاسوسی اتوبوس به دلیل استفاده از پخش، مقیاسی ضعیف دارند. از این روشها میتوان برای هدف قرار دادن عملکرد و مقیاس پذیری سیستمهای دایرکتوری استفاده کرد.[۱]
فرمت برداری فول بیت[ویرایش]
در قالب بردار بیت کامل، برای هر خطکش ممکن در حافظه، یک بیت برای ردیابی اینکه آیا هر پردازنده منفرد آن خط را در حافظه نهان خود ذخیره کردهاست استفاده میشود.[۲] فرمت برداری کامل بیت سادهترین ساختار برای پیادهسازی است، اما کمترین مقیاس پذیری را دارد.[۱] SGI Origin 2000، بسته به تعداد پردازندهها از ترکیبی از بردار بیت کامل و بردار بیت درشت استفاده میکند.[۳]
هر ورودی دایرکتوری باید ۱ بیت ذخیره شده به ازای هر پردازنده در هر خطکش، همراه با بیتهایی برای ردیابی وضعیت دایرکتوری داشته باشد. اندازه کل مورد نیاز برابر میشود با (تعداد پردازنده)× (تعداد خطوط کش)، که دارای نسبت سربار ذخیرهسازی (تعداد پردازنده)/(اندازه بلوک کش × ۸).
میتوان مشاهده کرد که سربار دایرکتوری به صورت خطی با تعداد پردازندهها مقیاس میشود. در حالی که ممکن است این برای تعداد کمی از پردازندهها خوب باشد، زمانی که در سیستمهای بزرگ پیادهسازی شود اندازه مورد نیاز برای فهرست بیش از حد خواهد شد. به عنوان مثال، با اندازه بلوک ۳۲ بایت و ۱۰۲۴ پردازنده، نسبت سربار ذخیرهسازی ۱۰۲۴/(۳۲×۸) = ۴۰۰٪ میشود.
فرمت وکتور بیت درشت[ویرایش]
در این مورد ورودی دایرکتوری از ۱ بیت برای گروهی از پردازندهها برای هر خطکش استفاده میکند. برای مثال فرمت Full Bit Vector اگر ۱ بیت را برای ۸ پردازنده به عنوان یک گروه در نظر بگیریم، سربار ذخیرهسازی ۱۲۸/(۳۲×۸)=۵۰٪ خواهد بود. این یک پیشرفت قابل توجه نسبت به فرمت Full Bit Vector است.
فرمت دایرکتوری پراکنده[ویرایش]
کش فقط زیر مجموعه کوچکی از بلوکها را در یک زمان خاص در حافظه اصلی ذخیره میکند. از این رو بیشتر ورودیهای دایرکتوری به بلوکهای ذخیره نشده تعلق دارند. در قالب دایرکتوری پراکنده، هدر رفت تنها با ذخیره کردن بلوکهای کش در فهرست کاهش مییابد. پردازنده ای با حجم کش ۶۴ کیلوبایت با حجم بلوک ۳۲ بایت و حجم حافظه اصلی ۴ مگابایت را در نظر بگیرید. حداکثر تعداد ورودیهایی که دایرکتوری میتواند در قالب دایرکتوری پراکنده داشته باشد ۲۰۴۸ است. اگر دایرکتوری یک ورودی برای تمام بلوکهای حافظه داشته باشد، تعداد ورودیهای دایرکتوری ۱۳۱۰۷۲ خواهد بود؛ بنابراین بدیهی است که بهبود ذخیرهسازی ارائه شده توسط فرمت دایرکتوری پراکنده بسیار قابل توجه است.
قالب درختی باینری متعادل با عدد[ویرایش]
در این فرمت دایرکتوری غیرمتمرکز است و بین کشهایی که یک بلوک حافظه مشترک دارند توزیع میشود. کشهای مختلف که یک بلوک حافظه مشترک دارند به شکل یک درخت باینری مرتب شدهاند. کشی که ابتدا به یک بلوک حافظه دسترسی پیدا میکند، گره ریشه است. هر بلوک حافظه دارای اطلاعات گره ریشه (HEAD) و قسمت شمارنده اشتراک (SC) است. فیلد SC دارای تعداد کشهایی است که بلوک را به اشتراک میگذارند. هر ورودی کش دارای اشاره گرهایی به حافظههای ذخیرهسازی اشتراک گذاری بعدی است که به نامهای L-CHD و R-CHD شناخته میشوند. شرط این دایرکتوری این است که درخت باینری باید دارای عدد متعادل باشد، یعنی تعداد گرههای درخت فرعی سمت چپ باید برابر یا یک عدد بیشتر از تعداد گرههای زیردرخت سمت راست باشد. تمام درختان فرعی نیز باید دارای تعداد متعادل باشند.[۴]
قالب دایرکتوری زنجیره ای[ویرایش]
در این فرمت، حافظه نشانگر دایرکتوری را به آخرین حافظه پنهانی که به بلوک دسترسی داشتهاست نگه میدارد و هر حافظه نهان نشانگر حافظه نهان قبلی را دارد که به بلوک دسترسی داشتهاست؛ بنابراین هنگامی که یک پردازنده یک درخواست نوشتن به یک بلوک در حافظه میفرستد، پردازنده مواردی را باطل میکند که به زنجیره اشاره گرها میپردازد. در این دایرکتوری زمانی که یک بلوک کش جایگزین شدهاست ما نیاز به گذشتن از لیست به منظور تغییر دایرکتوری که باعث افزایش زمان تأخیر. به منظور جلوگیری از این امر، فهرستهای دارای پیوند دوگانه در حال حاضر بهطور گسترده استفاده میشوند که در آن هر کپی ذخیره شده دارای نشانگرهایی به کش قبلی و بعدی است که به بلوک دسترسی دارد.[۵]
فرمت اشاره گر محدود[ویرایش]
فرمت اشاره گر محدود از تعدادی نشانگر برای ردیابی پردازندههایی که دادهها را در حافظه پنهان ذخیره میکنند استفاده میکند. هنگامی که یک پردازنده جدید یک بلوک را در حافظه پنهان ذخیره میکند، یک اشاره گر آزاد از یک Pool انتخاب میشود تا به آن پردازنده اشاره کند. چند گزینه برای رسیدگی به مواردی وجود دارد که تعداد اشتراکگذاران از تعداد نشانگرهای رایگان بیشتر باشد. یکی از روشها بیاعتبار کردن یکی از اشتراکگذارها، با استفاده از اشارهگر آن برای درخواستکننده جدید است، اگرچه در مواردی که یک بلوک دارای تعداد زیادی خواننده است، مانند قفل، این میتواند پرهزینه باشد. روش دیگر این است که یک استخر جداگانه از اشاره گرهای رایگان در دسترس همه بلوکها باشد. این روش معمولاً مؤثر است زیرا تعداد بلوکهای مشترک توسط تعداد زیادی پردازنده معمولاً زیاد نیست.
منابع[ویرایش]
- ↑ ۱٫۰ ۱٫۱ Reihnhart, Steven; Basu, Arkaprava; Beckmann, Bradford; Hill, Mark (2013-07-11). "CMP Directory Coherence: One Granularity Does Not Fit All" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Solihin, Yan (2015-10-09). Fundamentals of Parallel Multicore Architecture. Raleigh, North Carolina: Solihin Publishing and Consulting, LLC. pp. 331–335. ISBN 978-1-4822-1118-4.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Laudon, James; Lenoski, Daniel (1997-06-01). The SGI Origin: a ccNUMA highly scalable serve. Proceedings of the 24th annual international symposium on Computer architecture.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).
This article "Directory-based cache coherence" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Directory-based cache coherence. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.