كيفية عرض العنوان الفعلي في سلاسل DRAM والبنوك

في مقال سابق ، ناقشنا كيف تقوم معالجات Intel Sandy Bridge بتعيين العناوين الفعلية في ذاكرة التخزين المؤقت L3.

سأخبرك الآن كيف تقوم وحدات التحكم في الذاكرة لهذه المعالجات بتعيين العناوين الفعلية إلى موقع في DRAM - على وجه الخصوص ، أرقام الخطوط والبنوك والأعمدة في وحدات DRAM. يطلق عليه تعيين عنوان DRAM . أستخدم آلة اختبار واحدة كمثال.

الدافع: علة Rowhammer


أنا مهتم بتخطيط عناوين DRAM ، لأنها تتعلق بخلل Rowhammer .

يعد Rowhammer مشكلة في بعض وحدات DRAM حيث يمكن أن تؤدي بعض نماذج الوصول إلى الذاكرة في أسوأ الحالات إلى تلف الذاكرة. في هذه DRAMs ، يتسبب التنشيط المتكرر لخط الذاكرة ("انسداد الخط") في حدوث ضجيج كهربائي يغير البتات في الخلايا المعرضة للخطوط المجاورة.

يمكن أن تحدث عمليات التنشيط المتكررة هذه بسبب الوصول المتعدد إلى زوج من عناوين DRAM الموجودة على خطوط مختلفة من نفس بنك DRAM. تعتبر معرفة تعيين عناوين DRAM مفيدة لأنها تشير إلى أزواج العناوين التي تلبي خاصية "بنك واحد ، صف مختلف" (نفس البنك ، صف مختلف ؛ SBDR).

التخمين والتحقق من تعيين العنوان


للاختبار ، لدي جهاز به وحدات DRAM عرضة لخلل Rowhammer. يُظهر تشغيل rowhammer_test على هذا الجهاز تغييرًا طفيفًا .

أود أن أعرف مخطط تعيين عنوان DRAM لهذا الجهاز ، ولكن لم يتم توثيقه علنًا: هنا هو معالج Sandy Bridge ، لكن Intel لا تقوم بتوثيق تعيين العنوان الذي تستخدمه وحدات التحكم في الذاكرة لهذه المعالجات.

في الواقع ، rowhammer_test يحتاج اختبار rowhammer_test إلى معرفة أزواج عناوين SBDR. يحاول فقط عدة مرات أن يدق أزواج من العناوين المختارة عشوائيًا. عادة ما تكون 1/8 أو 1/16 منها أزواج SBDR ، لأنه في سيارتنا هناك 8 بنوك في كل DIMM (و 16 بنكًا في المجموع). وبالتالي ، لا نحتاج إلى معرفة تعيين عناوين DRAM من أجل إحداث تغيير طفيف في الذاكرة ، ولكن هذه المعرفة ستساعد في إجراء الاختبار بشكل أكثر عمداً.

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

هندسة الذاكرة


الخطوة الأولى: تحقق من عدد وحدات DIMM المثبتة في الجهاز وكيفية تنظيمها داخليًا.

يمكنني طلب معلومات DIMM باستخدام decode-dimms على Linux (في Ubuntu توجد في حزمة I2C-tools ). تقوم هذه الأداة بفك تشفير البيانات الوصفية لـ SPD (كشف الوجود التسلسلي) في DIMM.

على جهاز الاختبار الخاص بي ، هناك جهازي SO-DIMM بأربع غيغابايت ، مما يمنح ذاكرة 8 جيجابايت.

تُبلغ decode-dimms عن المعلومات التالية لكل وحدة من الوحدات:

  الحجم 4096 ميجابايت
 البنوك × الصفوف × الأعمدة × بت 8 × 15 × 10 × 64
 الرتب 2 

هذا يعني أن كلاً من وحدات DIMM:

  • لكل بنك 2 ^ 15 سطر (32768 سطر).
  • يحتوي كل سطر على 2 ^ 10 * 64 بت = 2 ^ 16 بت = 2 ^ 13 بايت = 8 كيلوبايت.

يحتوي كل DIMM على رتبين و 8 بنوك. يعطي التحقق من سعة DIMM الحجم المتوقع:

8 كيلوبايت لكل سطر * 32768 سطرًا * ترتيبان * 8 بنوك = 4096 ميجابايت = 4 جيجابايت

تعيين عناوين DRAM


على كمبيوتر الاختبار الخاص بي ، يتم استخدام أجزاء من العناوين الفعلية على النحو التالي:

  • Bits 0-5 : هذه هي البتات السفلية الست من فهرس البايت في السلسلة (أي فهرس 6 بت لخط ذاكرة التخزين المؤقت 64 بايت).
  • بت 6 : هذا هو رقم قناة 1 بت يختار بين اثنين من وحدات DIMM.
  • البتات 7-13 : البتات السبعة العليا للمؤشر على التوالي (أي البتات العلوية لرقم العمود).
  • البتات 14-16 : XOR مع 3 بتات أقل من رقم السطر ، والتي تعطي رقم بنك 3 بت.
  • بت 17 : رقم ترتيب 1 بت يختار بين رتب DIMM (والتي عادة ما تكون وجهين لرقاقة DIMM).
  • البتات 18-32 : رقم سطر 15 بت.
  • Bits 33+ : يمكن ضبطها لأن الذاكرة الفعلية تبدأ بعناوين فعلية أكبر من 0.

لماذا مثل هذا العرض؟


rowhammer_test هذا التعيين نتائج rowhammer_test (انظر أدناه) ، ولكن يمكننا أيضًا توضيح أن بتات العنوان يتم تعيينها بطريقة توفر أداءً جيدًا لأنماط الوصول إلى الذاكرة النموذجية ، مثل الوصول المتسلسل والوصول خطوة أو خطوة ( الوصول السلس):

  • قنوات التزامن . يعني وضع رقم القناة في البت 6 أن خطوط التخزين المؤقت ستتبادل بين قناتين (أي قناتين DIMM) يمكن الوصول إليهما بالتوازي. هذا يعني أنه إذا وصلنا إلى العناوين بالتسلسل ، فسيتم توزيع الحمل على قناتين.

    بالمناسبة ، يبدو أن Ivy Bridge (خليفة ساندي بريدج) يعقد عرض رقم القناة. يذكر العرض التقديمي من Intel "تجزئة القناة" ويذكر أنها "تسمح لك بتحديد قناة بناءً على وحدات بت العنوان المتعددة. تاريخيا ، كان "أ [6]". وهذا يضمن توزيعًا أكثر عدلاً لوصول الذاكرة عبر القنوات ".
  • انزلاق البنك : بشكل عام ، يجب أن يقلل ترتيب أرقام الأعمدة والبنوك والخطوط من التغيير المتكرر للخطوط النشطة للبنك (انهيار البنوك).

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

    ملاحقة الخطوط (مطرقة الصفوف) هي حالة خاصة من انزلاق البنك عندما يتم تنشيط خطين معينين بالتناوب (ربما عن قصد).
  • التوازي المصرفي : يمكن الوصول إلى البنوك بالتوازي (وإن كان بدرجة أقل من القنوات) ، لذلك يتغير رقم البنك قبل رقم السطر مع زيادة العنوان.
  • مخطط XOR : يعد XOR 'البتات الأقل أهمية من رقم السطر إلى رقم البنك خدعة لتجنب انزلاق البنك عند الوصول إلى المصفوفات في خطوات كبيرة. على سبيل المثال ، في العرض أعلاه ، تفرض XOR'ing أن تكون عناوين X و X + 256k موجودة في بنوك مختلفة ، دون تكوين زوج SBDR.

    يتم وصف مخططات XOR'ing للبنك / الخط في أدبيات مختلفة ، على سبيل المثال:

المصالحة مع rowhammer_test


كشف تشغيل rowhammer_test_ext (نسخة موسعة من rowhammer_test ) على جهاز اختبار لمدة 6 ساعات عن تغيير متكرر للبتات في 22 مكانًا. (انظر بيانات المصدر وشفرة التحليل ).

يولد اختبار سلاسل السك مجموعات من ثلاثة عناوين (A1 ، A2 ، V):

  • الخامس هو عنوان الضحية ، حيث نرى تغيير البتات.
  • A1 و A2 هي عناوين المعتدي التي نعكسها.
  • قم بفرز A1 و A2 بحيث يكون A1 أقرب إلى V من A2. نفترض مبدئيًا أن العنوان الأقرب ، A1 ، يتسبب في الواقع في حدوث تغيير طفيف (على الرغم من أن هذا لن يكون صحيحًا بالضرورة إذا تم استخدام تعيين أكثر تعقيدًا لعناوين DRAM).

لجميع هذه النتائج ، نتوقع أن تكتمل ثلاثة خصائص:

  • السطر : يجب أن تختلف أرقام السطور A1 و V بمقدار 1 ، أي يجب أن تكون في خطوط متجاورة. (يمكن أن يكون A2 أي رقم سطر).

    تجعل هذه الخاصية من السهل تحديد مكان أدنى بت من رقم السطر في العنوان الفعلي.

    أظهر الاختبار أن هذه الخاصية تصمد لجميع النتائج باستثناء نتيجتين. في هاتين النتيجتين ، تختلف أرقام الأسطر بـ 3 بدلاً من 1.
  • Bank : V و A1 و A2 يجب أن يكون لها نفس رقم البنك. في الواقع ، تجلى هذا العقار نفسه في جميع النتائج الـ 22. يتم حفظه فقط عند تطبيق مخطط XOR'ing للخطوط / البنوك.
  • القناة : يجب أن يكون V و A1 و A2 نفس رقم القناة. هذا صحيح لجميع النتائج. يحدث أن كل النتائج لها قناة = 0 ، لأن rowhammer_test يحدد فقط العناوين المحاذية في 4k ، وبالتالي يختبر قناة واحدة فقط (ربما يمكن اعتبار هذا خطأ).

مزيد من الاختبارات الممكنة


في المستقبل ، يمكنك تشغيل تجربتين إضافيتين للتحقق مما إذا كان تعيين عنوان DRAM يقيّم خاصية SBDR بشكل صحيح:

  • قياس الوقت : يجب أن يكون الوصول المتعدد إلى أزواج عناوين SBDR أبطأ من الوصول المتعدد إلى أزواج بدون SBDR ، لأن السبب الأول يؤدي إلى تنشيط الخطوط ، والثاني لا.
  • اختبار Rowhammer الشامل : بمجرد العثور على عنوان المعتدي A1 ، والذي يتسبب في تغيير متكرر للبتات ، يمكننا التحقق من ذلك على العديد من قيم A2. سيغير تأثير العملة (A1 ، A2) البتات فقط إذا كان زوجًا من SBDR.

بالإضافة إلى ذلك ، يجب أن تؤدي إزالة وحدة DIMM واحدة من وحدة النظام إلى إزالة بت القناة من تعيين عنوان DRAM وبالتالي تغيير عناوين المعتدين والضحايا. يمكن التحقق من ذلك أيضًا.

Source: https://habr.com/ru/post/ar431102/


All Articles