شرح ذاكرة ECC: لماذا تستخدمها الخوادم ومتى تكون مهمة

تذكر كل مواصفات الخوادم حجم الذاكرة وسرعتها، وكثير منها يذكر أيضًا عبارة "ECC". قد تمر عليها دون انتباه، لكنها تصف أمرًا مهمًا: هل تستطيع الذاكرة اكتشاف أخطائها وتصحيحها قبل أن تصل إلى بياناتك؟ يشرح هذا الدليل ما تفعله ذاكرة ECC، وكيف تختلف عن ذاكرة الحواسيب المكتبية العادية، وكيف تتحقق منها على Linux، ومتى تستحق الاهتمام.
ما هو خطأ الذاكرة فعلًا؟
تخزّن الذاكرة البتات على شكل شحنات كهربائية صغيرة جدًا. وأحيانًا تنقلب إحدى البتات، فتُقرأ القيمة 0 على أنها 1 أو العكس. من أسباب ذلك التشويش الكهربائي والحرارة وتقادم الوحدات أو ضعفها، والإشعاع الطبيعي مثل الأشعة الكونية. معظم هذه الأخطاء "عابرة": عشوائية وتحدث مرة واحدة. وبعضها يأتي من وحدة ذاكرة بدأت تتلف، فيتكرر في العنوان نفسه.
في جهاز بلا ECC لا يملك النظام أي وسيلة لمعرفة أن بتًا قد انقلب، فيستخدم القيمة الخاطئة كما هي. وحسب مكان الخطأ قد لا يحدث شيء، أو تتوقف عملية ما، أو ينهار النواة (kernel panic)، وفي أسوأ الحالات تُكتب قيمة خاطئة بصمت على القرص أو في قاعدة البيانات.
كيف تعمل ECC؟
ECC اختصار لـ Error-Correcting Code أي "رمز تصحيح الأخطاء". تخزّن وحدة ذاكرة ECC بتات تحقق إضافية بجانب البيانات. في DDR4 تُخزَّن كل كلمة بيانات بطول 64 بت ومعها 8 بتات إضافية، فيصبح عرض الوحدة 72 بت بدل 64. يحسب متحكم الذاكرة بتات التحقق عند كل كتابة ويتحقق منها عند كل قراءة.
الأسلوب الشائع اسمه SECDED، أي تصحيح الخطأ المفرد واكتشاف الخطأ المزدوج. عمليًا:
بت واحد خاطئ في الكلمة: يصححه المتحكم فورًا، ولا يرى التطبيق أي خطأ. ويُسجَّل الحدث كخطأ مُصحَّح (CE).
بتّان خاطئان في الكلمة: لا يستطيع المتحكم إصلاحهما، لكنه يعرف أن البيانات فاسدة. هذا خطأ غير قابل للتصحيح (UE). عادةً يتوقف النظام أو يُنهي العملية المتأثرة بدل استخدام بيانات تالفة.
أكثر من بتين: قد لا يُكتشف الخطأ بشكل موثوق. هذا نادر، وكثير من منصات الخوادم تضيف أساليب أقوى (تُعرف غالبًا باسم Chipkill أو SDDC) تتحمل تعطل شريحة ذاكرة كاملة.
كما تشغّل خوادم كثيرة ما يُسمى patrol scrubbing: يقرأ المتحكم الذاكرة في الخلفية ويصحح أخطاء البت الواحد قبل أن يقع خطأ ثانٍ في الكلمة نفسها فيصبح غير قابل للتصحيح.
ECC مقابل الذاكرة العادية مقابل "on-die ECC" في DDR5
جاءت DDR5 بمصدر جديد للالتباس. فكل شريحة DDR5 تحتوي على on-die ECC، وهي تحمي البيانات داخل الشريحة نفسها، ووُجدت أساسًا لأن الشرائح الأعلى كثافة تحتاجها لتعمل بثبات. لكنها لا تحمي البيانات أثناء انتقالها بين الوحدة والمعالج، ولا تُبلغ نظام التشغيل بالأخطاء. لذلك فإن وحدة DDR5 المكتبية العادية ليست ذاكرة ECC بالمعنى المقصود في الخوادم.
أما وحدات DDR5 ECC الحقيقية فتضيف شرائح إضافية لتصحيح الأخطاء على مستوى الوحدة كما كانت وحدات DDR4 ECC تفعل. وعندما تذكر مواصفات خادم "DDR5 ECC" فهذا ما يجب أن تعنيه.
| النوع | يصحح أخطاء البت الواحد | يُبلغ نظام التشغيل بالأخطاء | الاستخدام المعتاد |
|---|---|---|---|
| DDR4 بدون ECC | لا | لا | الحواسيب المكتبية والمحمولة |
| DDR5 بدون ECC (on-die فقط) | داخل الشريحة فقط | لا | الحواسيب المكتبية والمحمولة |
| ECC UDIMM (غير مُسجَّلة) | نعم | نعم | محطات العمل والخوادم الصغيرة وكثير من خوادم Ryzen |
| ECC RDIMM (مُسجَّلة) | نعم | نعم | خوادم Xeon وEPYC ذات سعات الذاكرة الكبيرة |
تحتاج ECC إلى دعم في ثلاثة أماكن: وحدة الذاكرة، ومتحكم الذاكرة في المعالج، واللوحة الأم. إذا غاب أحدها تعمل وحدات ECC كذاكرة عادية بلا حماية. لهذا من الأفضل أن تتحقق بنفسك بدل الافتراض.
كيف تتحقق من ECC على خادم Linux
ابدأ بما تُبلغ عنه البرمجيات الثابتة (firmware):
sudo dmidecode -t memory | grep -E "Error Correction Type|Total Width|Data Width"
على نظام يدعم ECC يُفترض أن ترى شيئًا مثل:
Error Correction Type: Multi-bit ECC
Total Width: 72 bits
Data Width: 64 bits
إذا كان العرض الكلي أكبر من عرض البيانات فهذا يعني وجود بتات تحقق إضافية. أما ظهور "None" في سطر تصحيح الأخطاء فيعني عدم وجود ECC. لاحظ أن dmidecode يقرأ جداول توفرها البرمجيات الثابتة، وبعض اللوحات تُبلغ عنها بشكل خاطئ، لذلك أكّد النتيجة بالخطوة التالية.
تحقق من أن تعريف EDAC في النواة (اكتشاف الأخطاء وتصحيحها) قد تم تحميله:
dmesg | grep -i edac
ls /sys/devices/system/edac/mc/
إذا ظهر mc0 (وربما mc1) فمتحكم الذاكرة يُبلغ Linux بالأخطاء. ويمكنك قراءة العدادات مباشرة:
grep . /sys/devices/system/edac/mc/mc*/ce_count /sys/devices/system/edac/mc/mc*/ue_count
ولعرض أوضح، ثبّت rasdaemon، فهو يسجل أخطاء الذاكرة وغيرها من أخطاء العتاد في قاعدة بيانات محلية صغيرة:
# Debian / Ubuntu
sudo apt install rasdaemon
# RHEL / AlmaLinux / Rocky Linux
sudo dnf install rasdaemon
sudo systemctl enable --now rasdaemon
sudo ras-mc-ctl --status
sudo ras-mc-ctl --summary
sudo ras-mc-ctl --errors
يبدو الخطأ المُصحَّح في سجل النواة تقريبًا هكذا:
EDAC MC0: 1 CE memory read error on CPU_SrcID#0_MC#0_Chan#1_DIMM#0 ...
ماذا تفعل بهذه الأرقام؟
الأخطاء المُصحَّحة تعني أن ECC تؤدي عملها. وكقاعدة تقريبية:
صفر، أو خطأ CE منفرد نادر: أمر طبيعي ولا يحتاج إلى إجراء.
أخطاء CE تتزايد باستمرار على الوحدة نفسها: غالبًا بدأت الوحدة تتدهور. خطّط لاستبدالها قبل أن تبدأ في إنتاج أخطاء غير قابلة للتصحيح. وإذا كان الخادم المخصص مستأجرًا، أرسل ناتج
ras-mc-ctl --errorsإلى دعم مزود الخدمة.أي خطأ UE: تعامل معه كحادث عتاد. راجع البيانات التي كُتبت في ذلك الوقت، واطلب استبدال الوحدة.
بدون ECC لن تحصل على أي من هذه الإنذارات المبكرة. ستظهر الوحدة التالفة على شكل انهيارات عشوائية أو بيانات غريبة، وتشخيص ذلك أصعب بكثير.
وماذا عن الخادم الافتراضي VPS؟
في الخادم الافتراضي تنتمي الذاكرة الفعلية إلى الخادم المضيف. إذا كان المضيف يستخدم ECC فإن خادمك الافتراضي يستفيد منها، لكن الأخطاء تُصحَّح وتُسجَّل على المضيف. داخل الخادم الافتراضي يكون مجلد EDAC فارغًا عادةً، ويعرض dmidecode قيمًا افتراضية، وهذا متوقع. اسأل مزود الخدمة عن نوع ذاكرة المضيف بدل محاولة اكتشافه من الداخل.
متى تكون ECC مهمة، ومتى تقل أهميتها
ECC نوع من التأمين، وقيمتها تعتمد على ما سيكلفك خطأ صامت.
تكون ECC أكثر أهمية في:
قواعد البيانات: بت منقلب في صفحة تُكتب مرة أخرى قد يُفسد صفوفًا، وقد لا تلاحظ ذلك إلا بعد وقت طويل.
خوادم التخزين وZFS: أنظمة الملفات التي تستخدم checksums تحمي البيانات على القرص، لكنها تثق بما في الذاكرة. وECC تسد هذه الثغرة.
خوادم المحاكاة الافتراضية: مضيف واحد يحمل أحمالًا كثيرة، فوحدة تالفة واحدة تؤثر عليها جميعًا.
الخوادم التي تعمل لفترات طويلة بذاكرة كبيرة: ذاكرة أكثر تعمل مدة أطول تعني فرصًا أكثر لحدوث خطأ.
الأحمال المالية والمحاسبية والعلمية: حيث يكون الرقم الخاطئ أسوأ من التوقف.
وتقل أهميتها في:
خادم اختبار لا يحتفظ بحالة ويمكنك إعادة بنائه في دقائق.
مهام دفعية قصيرة تُراجَع نتائجها على أي حال.
حاسوب شخصي للتصفح أو الألعاب.
تكلفة ECC على الأداء صغيرة. الوحدات المُسجَّلة تضيف زمن استجابة بسيطًا، ومعظم الأحمال الفعلية لا تلاحظه. وفرق السعر عادةً متواضع مقارنة بتكلفة الخادم، وأصغر بكثير من تكلفة قاعدة بيانات تالفة.
ما الذي لا تحميك منه ECC
تحمي ECC البيانات أثناء وجودها في الذاكرة فقط. ولا تحميك من:
تعطل الأقراص أو تلف البيانات على وسائط التخزين. لذلك استخدم RAID وchecksums نظام الملفات والنسخ الاحتياطي.
أخطاء البرمجيات أو عمليات النشر الخاطئة أو استعلام
DELETEخاطئ.أخطاء في أجزاء أخرى من النظام مثل مسار الشبكة، الذي له آليات تحقق خاصة به.
تقلل ECC خطرًا محددًا واحدًا، وما زلت تحتاج إلى النسخ الاحتياطي والمراقبة.
شغّلها على IM HOST
تأتي خوادم AMD المخصصة (Bare metal بمعالجات AMD Ryzen) وخوادم Intel المخصصة (بمعالجات Intel Xeon) لدى IM HOST بذاكرة ECC وتخزين NVMe وشبكة 10 Gbps وحماية من هجمات DDoS وعنوان IPv4 مخصص. كما تعمل باقات Linux VPS الاقتصادية في بولندا وألمانيا على معالجات AMD EPYC بذاكرة DDR4 ECC. لا توجد رسوم إعداد، ولديك ضمان استرداد الأموال خلال 30 يومًا، وفريق المهندسين لدينا متاح للدعم على مدار الساعة طوال أيام الأسبوع.
المزيد من مدونتنا
اكتشف المزيد من الأدلة العملية ورؤى الخدمات من فريق IM Host.
عرض كل المقالات