تلوث المخازن

يُشير مصطلح "تلوث الذاكرة المؤقتة" إلى الحالات التي يقوم فيها برنامج حاسوبي قيد التنفيذ بتحميل بيانات إلى ذاكرة التخزين المؤقت لوحدة المعالجة المركزية دون داعٍ، [ 1 ] مما يؤدي إلى إخراج بيانات أخرى مفيدة من الذاكرة المؤقتة إلى مستويات أدنى من التسلسل الهرمي للذاكرة ، وبالتالي تدهور الأداء. على سبيل المثال، في معالج متعدد النوى ، قد تستبدل إحدى النوى الكتل التي جلبتها النوى الأخرى إلى ذاكرة التخزين المؤقت المشتركة، أو قد تستبدل الكتل التي تم جلبها مسبقًا الكتل التي تم جلبها عند الطلب من الذاكرة المؤقتة.

مثال

انظر إلى الرسم التوضيحي التالي:

T[0] = T[0] + 1; for i in 0.. sizeof (CACHE) C[i] = C[i] + 1; T[0] = T[0] + C[sizeof(CACHE)-1];

(الافتراضات هنا هي أن ذاكرة التخزين المؤقت تتكون من مستوى واحد فقط، وأنها غير مقفلة، وأن سياسة الاستبدال هي pseudo-LRU ، وأن جميع البيانات قابلة للتخزين المؤقت، وأن ارتباط المجموعة لذاكرة التخزين المؤقت هو N (حيث N > 1)، وأن سجل معالج واحد على الأكثر متاح لاحتواء قيم البرنامج).

قبل بدء الحلقة مباشرةً، يتم جلب T[0] من الذاكرة إلى الذاكرة المؤقتة، وتحديث قيمته. ولكن، أثناء تنفيذ الحلقة، ونظرًا لأن عدد عناصر البيانات التي تشير إليها الحلقة يتطلب ملء الذاكرة المؤقتة بالكامل، يجب إخراج كتلة الذاكرة المؤقتة التي تحتوي على T[0] من الذاكرة المؤقتة. وبالتالي، في المرة التالية التي يطلب فيها البرنامج تحديث T[0]، لا يتم العثور عليه في الذاكرة المؤقتة، ويتعين على وحدة التحكم في الذاكرة المؤقتة طلب جلب كتلة الذاكرة المؤقتة المقابلة من الذاكرة الرئيسية مرة أخرى عبر ناقل البيانات .

في هذه الحالة، يُقال إن ذاكرة التخزين المؤقت "ملوثة". يمكن التخلص من عدم الكفاءة عن طريق تغيير نمط الوصول إلى البيانات من خلال وضع التحديث الأول لـ T[0] بين الحلقة والتحديث الثاني.

for i in 0.. sizeof (CACHE) C[i] = C[i] + 1; T[0] = T[0] + 1; T[0] = T[0] + C[sizeof(CACHE)-1];

الحلول

إلى جانب إعادة هيكلة التعليمات البرمجية المذكورة أعلاه، يكمن حل مشكلة تلوث الذاكرة المؤقتة في ضمان تخزين البيانات ذات الاستخدام المتكرر فقط في الذاكرة المؤقتة. ويمكن تحقيق ذلك باستخدام تعليمات خاصة للتحكم في الذاكرة المؤقتة ، أو دعم نظام التشغيل ، أو دعم الأجهزة.

من أمثلة تعليمات الأجهزة المتخصصة تعليمة "lvxl" التي يوفرها معالج PowerPC AltiVec . تقوم هذه التعليمة بتحميل قيمة بعرض 128 بت في مسجل، وتُعلّم كتلة الذاكرة المخبئية المقابلة بأنها "الأقل استخدامًا مؤخرًا"، أي أنها المرشح الرئيسي للإخلاء عند الحاجة إلى إخراج كتلة من مجموعة الذاكرة المخبئية الخاصة بها. لاستخدام هذه التعليمة بشكل صحيح في سياق المثال أعلاه، يجب تحميل عناصر البيانات التي تشير إليها الحلقة باستخدام هذه التعليمة. عند التنفيذ بهذه الطريقة، لن يحدث تلوث للذاكرة المخبئية، لأن تنفيذ هذه الحلقة لن يتسبب في إخلاء T[0] من الذاكرة المخبئية قبل الأوان. يتم تجنب ذلك لأنه مع تقدم الحلقة، ستُطابق عناوين العناصر في C نفس مسار الذاكرة المخبئية، مما يُبقي البيانات الأقدم فعليًا (ولكن غير المُعلّمة بأنها "الأقل استخدامًا مؤخرًا") سليمة في المسارات الأخرى. سيتم إخلاء أقدم البيانات فقط (غير ذات صلة بالمثال المذكور) من الذاكرة المخبئية، والتي لا ينتمي إليها T[0]، لأن تحديثها يحدث مباشرة قبل بدء الحلقة.

وبالمثل، باستخدام دعم نظام التشغيل، يمكن تمييز صفحات الذاكرة الرئيسية التي تتوافق مع مصفوفة بيانات لغة C بأنها "غير قابلة للتخزين المؤقت"، أو بعبارة أخرى، غير قابلة للتخزين المؤقت. وبالمثل، على مستوى الأجهزة، يمكن استخدام آليات تجاوز التخزين المؤقت التي تحدد البيانات قليلة الاستخدام بناءً على نمط وصول البرنامج، وتتجاوزها من التخزين المؤقت. كما يمكن تقسيم التخزين المؤقت المشترك لتجنب التداخل المدمر بين التطبيقات قيد التشغيل. يكمن العيب في هذه الحلول في أن الآليات القائمة على نظام التشغيل قد يكون لها زمن استجابة طويل، مما قد يُلغي الفائدة المرجوة من تجنب تلوث التخزين المؤقت (إلا إذا كانت منطقة الذاكرة غير قابلة للتخزين المؤقت من البداية)، في حين أن التقنيات القائمة على الأجهزة قد لا توفر رؤية شاملة لتدفق التحكم في البرنامج ونمط الوصول إلى الذاكرة .

أهمية متزايدة

تزداد أهمية التحكم في تلوث الذاكرة المؤقتة نظرًا لتزايد العقوبات الناجمة عن ما يُسمى بـ " جدار الذاكرة ". ويواصل مصنّعو الرقائق ابتكار حلول جديدة للتغلب على زمن الاستجابة المتزايد بين الذاكرة ووحدة المعالجة المركزية. ويتم ذلك من خلال زيادة أحجام الذاكرة المؤقتة وتوفير وسائل فعّالة لمهندسي البرمجيات للتحكم في كيفية وصول البيانات إلى وحدة المعالجة المركزية وبقائها فيها. يُعد التحكم في تلوث الذاكرة المؤقتة أحد الأدوات العديدة المتاحة للمبرمجين (وخاصةً مبرمجي الأنظمة المدمجة). ومع ذلك، تُستخدم أيضًا طرق أخرى، معظمها احتكارية وتعتمد بشكل كبير على الأجهزة والتطبيقات.

مراجع