Memtest86+ عبارة عن أداة اختبار ذاكرة مجانية ومفتوحة المصدر ومستقلة لأجهزة الكمبيوتر ذات البنية x86 وx86-64. فهو يوفر فحصًا أكثر شمولاً للذاكرة من ذلك الذي توفره اختبارات ذاكرة BIOS.
كما أنه قادر على الوصول إلى كل ذاكرة الكمبيوتر تقريبًا، دون أن يكون مقيدًا بالذاكرة التي يستخدمها نظام التشغيل ولا يعتمد على أي برنامج أساسي مثل مكتبات UEFI.
يمكن تحميل +Memtest86 وتشغيله إما مباشرةً عن طريق BIOS للكمبيوتر الشخصي (قديم أو UEFI) أو عبر أداة تحميل تشغيل متوسطة تدعم بروتوكول التمهيد لتسليم Linux 16 بت أو 32 بت أو 64 بت أو EFI. يجب أن تعمل على أي فئة Pentium أو وحدة المعالجة المركزية الأحدث 32 بت أو 64 بت.
تتوفر الإصدارات الثنائية (إصدارات التطوير الثابتة والليلية) على memtest.org.
اعتمد Memtest86+ v6.00 على PCMemTest، والذي كان عبارة عن شوكة وإعادة كتابة للإصدار السابق Memtest86+ v5، والذي كان بدوره شوكة لـ MemTest-86. كان الغرض من إعادة كتابة PCMemTest هو:
أثناء عملية إنشاء PCMemTest، تم إسقاط عدد من ميزات Memtest86+ v5 التي لم تكن مطلوبة بشكل صارم لاختبار ذاكرة النظام. على وجه الخصوص، لم يتم إجراء أي محاولة لقياس ذاكرة التخزين المؤقت وسرعة الذاكرة الرئيسية، أو لتحديد نوع DRAM والإبلاغ عنه. تمت إضافة هذه الميزات مرة أخرى وتوسيعها في Memtest86+ v6.0 لإنشاء إصدار موحد كامل الميزات.
تم إصدار Memtest86+ بموجب شروط رخصة جنو العامة الإصدار 2 (GPLv2). بخلاف أحكام GPL، لا توجد قيود على الاستخدام، سواء كان خاصًا أو تجاريًا. راجع ملف الترخيص للحصول على التفاصيل.
يتم اختبار البناء فقط على نظام Linux، ولكن يجب أن يكون ممكنًا على أي نظام يستخدم سلسلة أدوات GNU وتنسيق ملف ELF. الأدوات المطلوبة هي:
لإنشاء صورة 32 بت، قم بتغيير الدليل إلى دليل build32
واكتب make
. والنتيجة هي ملف صورة ثنائي memtest.bin
والذي يمكن تمهيده مباشرة عن طريق نظام BIOS القديم (في الوضع المرن) أو عن طريق أداة تحميل تشغيل وسيطة باستخدام بروتوكول تمهيد Linux 16 بت وملف صورة ثنائي memtest.efi
الذي يمكن تمهيده مباشرة بواسطة UEFI BIOS 32 بت. يمكن تشغيل أي من الصورتين بواسطة أداة تحميل تشغيل متوسطة باستخدام بروتوكولات تمهيد تسليم Linux 32 بت أو 32 بت EFI.
لإنشاء صورة 64 بت، قم بتغيير الدليل إلى دليل build64
واكتب make
. والنتيجة هي ملف صورة ثنائي memtest.bin
والذي يمكن تمهيده مباشرة بواسطة BIOS القديم (في الوضع المرن) أو عن طريق أداة تحميل تشغيل وسيطة باستخدام بروتوكول تمهيد Linux 16 بت وملف صورة ثنائي memtest.efi
الذي يمكن تمهيده مباشرة بواسطة UEFI BIOS 64 بت. يمكن تشغيل أي من الصورتين بواسطة أداة تحميل تشغيل متوسطة باستخدام بروتوكولات تمهيد تسليم Linux 32 بت أو 64 بت أو 64 بت EFI.
في كلتا الحالتين، لإنشاء صورة ISO يمكن استخدامها لإنشاء قرص مضغوط أو قرص DVD أو محرك أقراص USB محمول قابل للتمهيد، اكتب make iso
، والنتيجة هي ملف صورة memtest.iso
ISO. ويمكن بعد ذلك كتابتها مباشرة على قرص مضغوط أو قرص DVD فارغ، أو على محرك أقراص USB محمول، والذي يمكن بعد ذلك تشغيله مباشرة بواسطة نظام BIOS القديم أو UEFI PC BIOS.
لاحظ أنه عند الكتابة إلى محرك أقراص USB محمول، يجب كتابة صورة ISO مباشرة ("ملقاة") إلى الجهاز الأولي، إما باستخدام الأمر dd
أو باستخدام أداة مساعدة توفر نفس الوظيفة.
عند استخدام أداة تحميل التشغيل المتوسطة، يجب تخزين ملف memtest.bin
أو ملف memtest.efi
في قسم قرص يمكن لمحمل التشغيل الوصول إليه، ويجب تحديث تكوين أداة تحميل التشغيل للتمهيد من هذا الملف كما لو كان نواة Linux ذات لا يوجد قرص RAM الأولي. تم التعرف على العديد من خيارات سطر أوامر التمهيد، كما هو موضح أدناه. في حالة استخدام بروتوكول التمهيد 16 بت، سيستخدم Memtest86+ الشاشة في وضع النص (640 × 400). في حالة استخدام بروتوكولات التمهيد 32 بت أو 64 بت، سيستخدم Memtest86+ الشاشة إما في وضع النص أو وضع الرسومات، كما هو محدد في بنية boot_params
التي تم تمريرها إليها بواسطة أداة تحميل التشغيل. إذا كنت في وضع الرسومات، فيجب أن يكون المخزن المؤقت للإطارات المرفق 640 × 400 بكسل على الأقل؛ إذا كان أكبر، سيتم توسيط العرض. إذا تم تشغيل النظام في وضع UEFI، فيجب استخدام وضع الرسومات.
ولأغراض الاختبار، هناك أيضًا خيار لإنشاء صورة ISO تستخدم GRUB كمحمل إقلاع متوسط. راجع Makefile
في دليل build32
أو build64
للحصول على التفاصيل. تعد صورة ISO قديمة وقابلة للتشغيل من خلال UEFI، لذلك تحتاج إلى تثبيت وحدات GRUB لكل من التمهيد القديم وEFI على نظام البناء الخاص بك (على سبيل المثال، في Debian، توجد وحدات GRUB المطلوبة في الحزم grub-pc-bin
و grub-efi-ia32-bin
و grub-efi-amd64-bin
). قد تحتاج إلى ضبط بعض أسماء المسارات والملفات في Makefile لتتناسب مع التسمية الموجودة على نظامك.
ملفات تكوين GRUB الموجودة في دليل grub
متاحة للاستخدام في اختبار ISO، ولكنها أيضًا بمثابة مثال لكيفية تشغيل Memtest86+ من GRUB.
قد يقوم برنامج تحميل التشغيل المتوسط بتمرير سطر أوامر التمهيد إلى Memtest86+. قد يحتوي سطر الأوامر على خيار واحد أو أكثر، مفصولة بمسافات. يتكون كل خيار من اسم خيار، متبوعًا اختياريًا بعلامة =
ومعلمة واحدة أو أكثر، مفصولة بفواصل. يتم التعرف على الخيارات التالية:
0x
(على سبيل المثال: 0xFEDC9000) يدعم Memtest86+ كلاً من واجهة لوحة المفاتيح القديمة (باستخدام منافذ الإدخال/الإخراج 0x60 و0x64) ولوحات مفاتيح USB (باستخدام برامج تشغيل أجهزة USB الخاصة بها). يمكن تحديد أحدهما أو الآخر أو كليهما عبر سطر أوامر التمهيد، إذا لم يتم تحديده في سطر الأوامر، فإن الإعداد الافتراضي هو استخدام كليهما إذا تم تمهيد النظام في وضع UEFI، وإلا فسيتم استخدام الواجهة القديمة فقط.
عادةً ما تدعم أنظمة BIOS الأقدم محاكاة لوحة مفاتيح USB القديمة، مما يجعل لوحات مفاتيح USB تعمل مثل لوحات المفاتيح القديمة المتصلة بالمنافذ 0x60 و0x64. غالبًا ما يمكن تمكين هذا أو تعطيله في قوائم إعداد BIOS. إذا تم تمكين برامج تشغيل أجهزة USB الخاصة بـ Memtest86+، فسوف تتجاوز ذلك وتصل إلى أي لوحات مفاتيح USB مباشرة. الجانب السلبي لذلك هو أن وحدات تحكم USB وبرامج تشغيل الأجهزة تتطلب حجز بعض الذاكرة لاستخدامها الخاص، مما يعني أنه لا يمكن بعد ذلك تغطية الذاكرة بواسطة اختبارات الذاكرة. لذا، لتعظيم تغطية الاختبار، إذا كان مدعومًا، قم بتمكين محاكاة لوحة مفاتيح USB القديمة، وفي حالة التشغيل في وضع UEFI، قم بإضافة keyboard=legacy
في سطر أوامر التمهيد.
ملاحظة : تدعم بعض أنظمة BIOS UEFI فقط محاكاة لوحة مفاتيح USB القديمة عند تمكين وحدة نظام التوافق (CSM) في إعداد BIOS. يدعمه الآخرون فقط عند التشغيل الفعلي في الوضع القديم.
العديد من أجهزة USB لا تتوافق تمامًا مع مواصفات USB. إذا توقف مسبار لوحة مفاتيح USB أو فشل في اكتشاف لوحة المفاتيح، فجرب الحلول المتنوعة التي يوفرها خيار التمهيد "usbinit".
ملاحظة : التوصيل السريع غير مدعوم حاليًا بواسطة برامج تشغيل Memtest86+ USB. عند استخدام هذه الأجهزة، يجب أن تكون لوحة مفاتيح USB الخاصة بك متصلة قبل تشغيل Memtest86+ ويجب أن تظل متصلة طوال الاختبار.
تستخدم بعض الأجهزة 2 في 1 لوحة LCD وهي في الأصل شاشة عرض للوضع الرأسي ولكنها مثبتة على جانبها عند توصيلها بلوحة المفاتيح. عند استخدام الشاشة في وضع الرسومات، يمكن لـ Memtest86+ تدوير الشاشة لتتناسب. أضف خيار "screen.rhs-up" أو "screen.lhs-up" في سطر أوامر التمهيد، اعتمادًا على اتجاه لوحة LCD. عند استخدام الشاشة في وضع النص، من المتوقع أن يعتني BIOS بهذا الأمر تلقائيًا.
عند التشغيل في الوضع القديم، سيستخدم Memtest86+ دقة الشاشة التي تم تعيينها بواسطة BIOS أو بواسطة أداة تحميل التشغيل المتوسطة. عند التشغيل في وضع UEFI، سيختار Memtest86+ عادةً أصغر دقة شاشة متاحة تشمل شاشة العرض التي تبلغ 640 × 400 بكسل. تقوم بعض أنظمة BIOS بإرجاع معلومات غير صحيحة حول أوضاع العرض المتوفرة، لذا يمكنك تجاوز ذلك عن طريق إضافة خيار "screen.mode=" في سطر أوامر التمهيد.
لاحظ أنه عند استخدام تدوير الشاشة، تكون دقة الشاشة المحددة للشاشة غير المدورة.
بمجرد التشغيل، سيقوم Memtest86+ بتهيئة شاشة العرض الخاصة به، ثم يتوقف مؤقتًا لبضع ثوان للسماح للمستخدم بتكوين تشغيله. إذا لم يتم الضغط على أي مفتاح، فسيبدأ تشغيل جميع الاختبارات تلقائيًا باستخدام نواة وحدة المعالجة المركزية (CPU) واحدة، ويستمر إلى أجل غير مسمى حتى يقوم المستخدم بإعادة تشغيل الجهاز أو إيقافه.
عند بدء التشغيل، وعند إجراء الاختبارات، يستجيب Memtest86+ للمفاتيح التالية:
لاحظ أن الاختبار يتوقف عند تمكين قفل التمرير وتكون منطقة التمرير ممتلئة.
تسمح قائمة التكوين للمستخدم بما يلي:
وفي جميع الحالات، يمكن استخدام مفاتيح الأرقام كبدائل لمفاتيح الوظائف (1 = F1، 2 = F2، ... 0 = F10).
يمكن تغيير وضع الإبلاغ عن الأخطاء في أي وقت دون تعطيل تسلسل الاختبار الحالي. يتم جمع إحصائيات الأخطاء بغض النظر عن وضع الإبلاغ عن الأخطاء الحالي (لذا فإن التبديل إلى وضع ملخص الأخطاء سيُظهر الإحصائيات المتراكمة منذ بدء تسلسل الاختبار الحالي). يتم تجميع أنماط BadRAM فقط عندما تكون في وضع BadRAM. يتم تجميع مناطق memmap في Linux فقط عندما تكون في وضع memmap. يتم تجميع أرقام الصفحات السيئة فقط عندما تكون في وضع الصفحة السيئة.
سيؤدي أي تغيير في الاختبارات المحددة أو نطاق العناوين أو وضع تسلسل وحدة المعالجة المركزية إلى بدء تسلسل اختبار جديد وإعادة تعيين إحصائيات الأخطاء.
يعرض وضع حساب الخطأ فقط إجمالي عدد الأخطاء التي تم العثور عليها منذ بدء تسلسل الاختبار الحالي.
يعرض وضع ملخص الأخطاء المعلومات التالية:
يعرض وضع الخطأ الفردي المعلومات التالية لكل مثيل خطأ:
يقوم وضع أنماط BadRAM بتجميع أنماط الأخطاء وعرضها لاستخدامها مع ميزة Linux BadRAM أو أمر GRUB badram. تتم طباعة الأسطر على الشكل badram=F1,M1,F2,M2...
في كل زوج من F,M
، يمثل F
عنوان خطأ و M
هو قناع بت لهذا العنوان. تشير هذه الأنماط إلى حدوث أخطاء في العناوين التي تساوي F على جميع البتات 1
في M. قد يلتقط مثل هذا النمط أخطاء أكثر مما هو موجود بالفعل، ولكن على الأقل يتم التقاط جميع الأخطاء. تم تصميم هذه الأنماط لالتقاط أنماط منتظمة من الأخطاء الناتجة عن بنية الأجهزة في بناء جملة مقتضب.
يتم تطوير أنماط BadRAM تدريجيًا بدلاً من حسابها من خلال نظرة عامة على كافة الأخطاء. يقتصر عدد الأزواج على 20 لعدد من الأسباب العملية. ونتيجة لذلك، قد تؤدي أنماط التصنيع اليدوي من الإخراج في وضع طباعة العنوان، في حالات استثنائية، إلى نتائج أفضل.
ملاحظة: كما هو مذكور في أوصاف الاختبارات الفردية، لا يساهم اختبار عنوان الأجهزة المتحركة (اختبار 0) واختبار حركة الكتلة (اختبار 7) في أنماط BadRAM لأن هذه الاختبارات لا تسمح بتحديد العنوان الدقيق للخطأ .
يقوم وضع Linux memmap بتجميع مناطق الذاكرة الخاطئة وعرضها للاستخدام مع [خيار سطر أوامر Linux memmap التمهيد] (https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt). تتم طباعة الأسطر على شكل memmap=S1$A1,S2,A2...
في كل زوج من S,A
، يمثل A
العنوان الأول في المنطقة و S
هو حجم المنطقة (بالبايت). يتم تسجيل ما يصل إلى 20 منطقة ذاكرة معيبة. بمجرد العثور على أكثر من 20 منطقة من المواقع الخاطئة المتجاورة، سيتم دمج المناطق، مما يعني أن بعض المناطق تتضمن مواقع غير خاطئة. سيحاول البرنامج تقليل عدد المواقع غير الخاطئة المضمنة.
ملاحظة: كما هو مذكور في أوصاف الاختبارات الفردية، لا يساهم اختبار عنوان الأجهزة المتحركة (اختبار 0) واختبار حركة الكتلة (اختبار 7) في مناطق الذاكرة المعيبة لأن هذه الاختبارات لا تسمح بتحديد العنوان الدقيق للخطأ عازم.
يتراكم وضع الصفحات السيئة ويعرض أرقام صفحات الذاكرة الخاطئة. يمكن استخدامها مع أمر Windows bcdedit لإضافة تلك الصفحات إلى قائمة ذاكرة Windows PFA. يتم عرض أرقام الصفحات إما كرقم سداسي عشري واحد (على سبيل المثال 0x20
) أو كنطاق من أرقام الصفحات السداسية العشرية (على سبيل المثال 0x20..0x2a
). يتم تسجيل ما يصل إلى 20 نطاقًا من الصفحات المعيبة. بمجرد العثور على أكثر من 20 نطاقًا من الصفحات الخاطئة المتجاورة، سيتم دمج النطاقات، مما يعني أن بعض النطاقات تتضمن صفحات غير معيبة. سيحاول البرنامج تقليل عدد الصفحات غير الخاطئة المضمنة.
ملاحظة: كما هو مذكور في أوصاف الاختبارات الفردية، لا يساهم اختبار عنوان الأجهزة المتحركة (اختبار 0) واختبار نقل الكتلة (اختبار 7) في أرقام الصفحات الخاطئة لأن هذه الاختبارات لا تسمح بتحديد العنوان الدقيق للخطأ عازم.
يرجى العلم أنه ليست كل الأخطاء التي أبلغ عنها Memtest86+ ترجع إلى ضعف الذاكرة. يختبر الاختبار ضمنيًا وحدة المعالجة المركزية وذاكرة التخزين المؤقت واللوحة الأم. من المستحيل أن يحدد الاختبار أسباب حدوث الفشل. معظم حالات الفشل ستكون بسبب مشكلة في الذاكرة. عندما لا يكون الأمر كذلك، فإن الخيار الوحيد هو استبدال الأجزاء حتى يتم تصحيح العطل.
بمجرد اكتشاف خطأ في الذاكرة، فإن تحديد الوحدة الفاشلة ليس إجراءً واضحًا. مع العدد الكبير من بائعي اللوحات الأم والمجموعات المحتملة من فتحات الذاكرة، سيكون من الصعب، إن لم يكن من المستحيل، تجميع معلومات كاملة حول كيفية تعيين خطأ معين إلى وحدة ذاكرة فاشلة. ومع ذلك، هناك خطوات يمكن اتخاذها لتحديد الوحدة النمطية الفاشلة. فيما يلي بعض التقنيات التي قد ترغب في استخدامها:
إزالة الوحدات
وحدات الدورية
استبدال الوحدات
في بعض الأحيان تظهر أخطاء في الذاكرة بسبب عدم توافق المكونات. قد تعمل وحدة الذاكرة بشكل جيد في نظام واحد وليس في نظام آخر. هذا ليس من غير المألوف ويشكل مصدرا للارتباك. المكونات ليست بالضرورة سيئة ولكن قد يلزم تجنب مجموعات معينة.
في الغالبية العظمى من الحالات، تكون الأخطاء التي أبلغ عنها Memtest86+ صالحة. هناك بعض الأنظمة التي تتسبب في ارتباك Memtest86+ بشأن حجم الذاكرة وسيحاول اختبار الذاكرة غير الموجودة. سيؤدي هذا إلى الإبلاغ عن عدد كبير من العناوين المتتالية على أنها سيئة، وبشكل عام سيكون هناك العديد من البتات الخاطئة. إذا كان لديك عدد صغير نسبيًا من العناوين الفاشلة وخطأ واحد أو اثنين فقط، فيمكنك التأكد من صحة الأخطاء. كما أن الأخطاء المتقطعة صالحة دائمًا.
يجب تصحيح كافة أخطاء الذاكرة الصالحة. من الممكن ألا يظهر خطأ معين أبدًا في التشغيل العادي. ومع ذلك، فإن التشغيل باستخدام الذاكرة الهامشية يعد أمرًا محفوفًا بالمخاطر ويمكن أن يؤدي إلى فقدان البيانات وحتى تلف القرص.
لا يستطيع Memtest86+ تشخيص العديد من أنواع أعطال الكمبيوتر. على سبيل المثال، وحدة المعالجة المركزية المعيبة التي تتسبب في تعطل نظام التشغيل لديك ستتسبب على الأرجح في تعطل Memtest86+ بنفس الطريقة.
سيختلف الوقت المطلوب لتمرير Memtest86+ بشكل كبير اعتمادًا على سرعة وحدة المعالجة المركزية وسرعة الذاكرة وحجم الذاكرة. يتم تنفيذ Memtest86+ لأجل غير مسمى. يتزايد عداد النجاح في كل مرة يتم فيها تشغيل جميع الاختبارات المحددة. بشكل عام، تمريرة واحدة كافية لاكتشاف جميع الأخطاء باستثناء الأخطاء الأكثر غموضًا. ومع ذلك، للحصول على الثقة الكاملة عند الاشتباه في وجود أخطاء متقطعة، ينصح بإجراء اختبار لفترة أطول.
هناك العديد من الطرق الجيدة لاختبار الذاكرة. ومع ذلك، فإن العديد من الاختبارات تقوم ببساطة بإلقاء بعض الأنماط على الذاكرة دون الكثير من التفكير أو المعرفة ببنية الذاكرة أو كيفية اكتشاف الأخطاء على أفضل وجه. يعمل هذا بشكل جيد مع حالات فشل الذاكرة الصلبة ولكنه لا يفعل الكثير للعثور على الأخطاء المتقطعة. اختبارات الذاكرة المستندة إلى BIOS غير مجدية للعثور على أخطاء الذاكرة المتقطعة.
تتكون رقائق الذاكرة من مجموعة كبيرة من خلايا الذاكرة المتراصة بإحكام، واحدة لكل بتة من البيانات. الغالبية العظمى من حالات الفشل المتقطعة هي نتيجة للتفاعل بين خلايا الذاكرة هذه. في كثير من الأحيان، قد تؤدي كتابة خلية ذاكرة إلى كتابة إحدى الخلايا المجاورة بنفس البيانات. يحاول اختبار الذاكرة الفعال اختبار هذه الحالة. ولذلك، فإن الإستراتيجية المثالية لاختبار الذاكرة ستكون كما يلي:
يجب أن يكون واضحًا أن هذه الإستراتيجية تتطلب معرفة دقيقة بكيفية وضع خلايا الذاكرة على الشريحة. بالإضافة إلى ذلك، هناك عدد لا نهاية له من تخطيطات الرقائق المحتملة لأنواع الرقائق والشركات المصنعة المختلفة، مما يجعل هذه الإستراتيجية غير عملية. ومع ذلك، هناك خوارزميات اختبار يمكنها تقريب هذه الإستراتيجية المثالية.
يستخدم Memtest86+ خوارزميتين توفران تقريبًا معقولًا لاستراتيجية الاختبار المثالية المذكورة أعلاه. تسمى أولى هذه الاستراتيجيات بالانعكاسات المتحركة. تعمل اختبارات الانعكاس المتحرك على النحو التالي:
تعد هذه الخوارزمية بمثابة تقريب جيد لاختبار الذاكرة المثالي ولكن هناك بعض القيود. تقوم معظم الرقائق عالية الكثافة اليوم بتخزين البيانات بعرض يتراوح من 4 إلى 16 بت. مع الرقائق التي يزيد عرضها عن بت واحد، من المستحيل القراءة أو الكتابة بشكل انتقائي لبت واحد فقط. وهذا يعني أننا لا نستطيع أن نضمن أن جميع الخلايا المجاورة قد تم اختبارها للتفاعل. في هذه الحالة، أفضل ما يمكننا فعله هو استخدام بعض الأنماط للتأكد من أن جميع الخلايا المجاورة قد تمت كتابتها على الأقل بجميع مجموعات الواحد والصفر الممكنة.
ويمكن أيضًا ملاحظة أن التخزين المؤقت والتخزين المؤقت والتنفيذ خارج الترتيب سوف يتداخل مع خوارزمية الانقلابات المتحركة ويجعلها أقل فعالية. من الممكن إيقاف تشغيل التخزين المؤقت ولكن لا يمكن تعطيل التخزين المؤقت للذاكرة في الشرائح الجديدة عالية الأداء. ولمعالجة هذا القيد تم إنشاء خوارزمية جديدة تسمى Modulo-20. لا تتأثر هذه الخوارزمية بالتخزين المؤقت أو التخزين المؤقت. تعمل الخوارزمية على النحو التالي:
تحقق هذه الخوارزمية تقريبًا نفس مستوى اختبار الجوار مثل عمليات الانقلاب المتحركة ولكنها لا تتأثر بالتخزين المؤقت أو التخزين المؤقت. نظرًا لأن تمريرات الكتابة المنفصلة (1.1، 1.2) وممر القراءة (1.4) تتم لجميع الذاكرة، يمكننا التأكد من أنه تم مسح كافة المخازن المؤقتة وذاكرة التخزين المؤقت بين التمريرات. كان اختيار 20 كحجم للخطوة تعسفيًا إلى حد ما. قد تكون الخطوات الأكبر أكثر فعالية ولكن قد يستغرق تنفيذها وقتًا أطول. يبدو أن اختيار العشرين يمثل حلاً وسطًا معقولًا بين السرعة والدقة.
ينفذ Memtest86+ سلسلة من الاختبارات المرقمة للتحقق من الأخطاء. تتكون هذه الاختبارات من مزيج من خوارزمية الاختبار ونمط البيانات والتخزين المؤقت. تم ترتيب ترتيب تنفيذ هذه الاختبارات بحيث يتم اكتشاف الأخطاء في أسرع وقت ممكن. فيما يلي وصف لكل اختبار.
للسماح باختبار أكثر من 4 جيجابايت من الذاكرة على وحدات المعالجة المركزية (CPUs) 32 بت، يتم تقسيم نطاق العناوين الفعلي إلى نوافذ سعة 1 جيجابايت والتي يتم تعيينها واحدة تلو الأخرى في نافذة ذاكرة افتراضية. قد تحتوي كل نافذة سعة 1 جيجابايت على منطقة ذاكرة متجاورة واحدة أو أكثر. بالنسبة لمعظم الاختبارات، يتم إجراء الاختبار على كل منطقة من مناطق الذاكرة على حدة. يتم تمكين التخزين المؤقت للجميع باستثناء الاختبار الأول.
وفي كل منطقة من مناطق الذاكرة، يتم اختبار جميع بتات العناوين باستخدام نمط عنوان متنقل. لا تساهم الأخطاء الناتجة عن هذا الاختبار في أنماط BadRAM أو مناطق memmap أو مناطق الصفحات السيئة.
وفي كل منطقة ذاكرة على التوالي، تتم كتابة كل عنوان بعنوانه الخاص ثم يتم التحقق من اتساق كل عنوان. يتم إجراء هذا الاختبار بشكل تسلسلي مع كل وحدة معالجة مركزية متوفرة، بغض النظر عن وضع تسلسل وحدة المعالجة المركزية الذي حدده المستخدم.
عبر جميع مناطق الذاكرة، تتم كتابة كل عنوان بعنوانه الظاهري بالإضافة إلى رقم النافذة (للصور 32 بت) أو العنوان الفعلي الخاص به (للصور 64 بت) ثم يتم التحقق من اتساق كل عنوان. يؤدي هذا إلى اكتشاف أي أخطاء في بتات العناوين ذات الترتيب العالي التي قد يتم تفويتها عند اختبار كل نافذة على حدة. يتم إجراء هذا الاختبار بشكل تسلسلي مع كل وحدة معالجة مركزية متوفرة، بغض النظر عن وضع تسلسل وحدة المعالجة المركزية الذي حدده المستخدم.
في كل منطقة ذاكرة على حدة، ولكل نمط على حدة، يتم استخدام خوارزمية الانقلابات المتحركة مع أنماط جميع الآحاد وجميع الأصفار.
في كل منطقة ذاكرة على حدة، ولكل نمط على حدة، يتم استخدام خوارزمية الانعكاسات المتحركة مع أنماط ذات عرض 8 بت وأصفار متحركة.
وفي كل منطقة ذاكرة على حدة، ولكل نمط على حدة، يتم استخدام خوارزمية الانقلابات المتحركة مع أنماط الرقم العشوائي ومكملته. يختلف الرقم العشوائي في كل اختبار، لذا فإن التمريرات المتعددة تزيد من الفعالية.
في كل منطقة ذاكرة على حدة، ولكل نمط بدوره، يتم استخدام خوارزمية الانعكاسات المتحركة مع أنماط بعرض 32 بت (في إصدارات 32 بت) أو بعرض 64 بت (في إصدارات 64 بت) متحركة وأصفار متحركة . على عكس الاختبارات السابقة، يتم تدوير النمط بمعدل 1 بت على كل عنوان متتالي.
يضغط هذا الاختبار على الذاكرة باستخدام تعليمات نقل الكتلة (movs) ويعتمد على اختبار burnBX الخاص بـ Robert Redelmeier.
وفي كل منطقة ذاكرة على التوالي، تتم تهيئة الذاكرة بأنماط متغيرة يتم قلبها كل 8 بايت. ثم يتم نقل كتل الذاكرة باستخدام تعليمات movs. بعد الانتهاء من التحركات يتم فحص أنماط البيانات. نظرًا لأنه يتم فحص البيانات فقط بعد اكتمال عمليات نقل الذاكرة، فمن غير الممكن معرفة مكان حدوث الخطأ. العناوين التي تم الإبلاغ عنها مخصصة فقط للأماكن التي تم العثور على النمط السيئ فيها. ونتيجة لذلك، لا تساهم الأخطاء الناتجة عن هذا الاختبار في أنماط BadRAM أو مناطق memmap أو مناطق الصفحات السيئة.
وفي كل منطقة ذاكرة على التوالي، تتم كتابة كل عنوان برقم عشوائي، ثم يتم التحقق من اتساق كل عنوان وكتابته مع تكملة البيانات الأصلية، ثم يتم فحص كل عنوان مرة أخرى للتأكد من اتساقه.
في كل منطقة ذاكرة على حدة، ولكل نمط على حدة، يتم استخدام خوارزمية Modulo-20 مع أنماط الرقم العشوائي ومكملته. يختلف الرقم العشوائي في كل اختبار، لذا فإن التمريرات المتعددة تزيد من الفعالية.
عبر جميع مناطق الذاكرة، ولكل نمط على حدة، يتم تهيئة كل موقع ذاكرة بنمط، ويتوقف لفترة من الوقت، ثم يتحقق من اتساق كل موقع من مواقع الذاكرة. يتم إجراء الاختبار باستخدام أنماط جميع الأصفار وجميع الآحاد.
يرجى الاطلاع على قائمة المشكلات المفتوحة وطلبات التحسين على GitHub.
لا تتردد في تقديم تقارير الأخطاء!
نرحب بمساهمات التعليمات البرمجية، إما لإصلاح الأخطاء أو لإجراء تحسينات. راجع README_DEVEL.md في دليل المستندات للحصول على بعض الإرشادات الأساسية.
استند Memtest86+ v6.0 إلى PCMemTest، الذي طوره Martin Whitaker، والذي كان يعتمد على Memtest86+ v5.01، الذي طوره Samuel Demeulemeester، والذي كان بدوره يعتمد على Memtest86، الذي طوره Chris Brady مع الموارد والمساعدة المذكورة أدناه:
الإصدارات الأولية من الملفات المصدر bootsect.S وsetup.S وhead.S وbuild.c هي من نواة Linux 1.2.1 وقد تم تعديلها بشكل كبير.
قدم دوج سيسك رمزًا لدعم وحدة التحكم المتصلة عبر منفذ تسلسلي. (غير مستخدم حاليا)
تم توفير التعليمات البرمجية لإنشاء أنماط BadRAM بواسطة Rick van Rein.
يعتمد اختبار حركة الكتلة على اختبار BurnBX الخاص بـ Robert Redelmeier.
تم توفير رمز المخزن المؤقت للشاشة بواسطة Jani Averbach. (غير مستخدم بواسطة Memtest86+ v6.0)
قدم إريك بيدرمان كل محتوى الميزات للإصدار 3.0 بالإضافة إلى العديد من إصلاحات الأخطاء وعمليات التنظيف المهمة للتعليمات البرمجية.
تحسينات كبيرة لاكتشاف الأجهزة وإعداد التقارير عنها في الإصدارات 3.2 و3.3 و3.4 مقدمة من Samuel Demeulemeester (من Memtest86+ v1.11 وv1.60 وv1.70).
بالإضافة إلى ذلك، تم استيراد العديد من إصلاحات الأخطاء لـ Memtest86+ من anphsw/memtest86.