ECC RAM چیست و چرا در سرور اهمیت دارد؟
در فهرست مشخصات سرورها همیشه عبارت ECC را میبینی. این یک برچسب بازاریابی نیست؛ تفاوت واقعی در رفتار سرور هنگام بروز خطای حافظه است.
ECC یعنی چه؟
- حافظهٔ ECCError-Correcting Code Memory
- نوعی حافظه که با نگهداشتن اطلاعات کنترلی اضافی میتواند خطاهای تکبیتی را حین کار تشخیص بدهد و اصلاح کند، و خطاهای بزرگتر را دستکم گزارش کند.
خطای حافظه پدیدهٔ نادری نیست. در سیستمی که ماهها بدون خاموشی کار میکند و حجم زیادی داده در حافظه دارد، احتمال بروز خطای تکبیتی وجود دارد. در حافظهٔ معمولی، این خطا میتواند بیسروصدا داده را خراب کند یا باعث توقف ناگهانی سرویس شود.
سازوکارش ساده است: در کنار هر مجموعه بیت داده، بیتهای کنترلی اضافه نگه داشته میشود. اگر یک بیت تغییر کرده باشد، از روی همین بیتها میشود فهمید کدام بیت و آن را سر جایش برگرداند — بدون اینکه برنامهای متوجه شود. اگر دو بیت همزمان خراب شده باشند، اصلاح ممکن نیست ولی تشخیص هست، و سیستم بهجای ادامهدادن با دادهٔ غلط متوقف میشود.
چرا در سرور مهم است؟
- خرابی خاموش داده — بدترین حالت این است که خطا رخ بدهد و کسی متوجه نشود تا وقتی دادهٔ نادرست در دیتابیس ذخیره شده باشد.
- پایداری سرویس — بسیاری از توقفهای غیرقابل توضیح ریشه در حافظه دارند. ECC این دسته را بهشدت کم میکند.
- قابلیت تشخیص — حتی وقتی خطا قابل اصلاح نیست، ECC آن را گزارش میکند و همین گزارش، ریشهیابی را ممکن میکند.
آن مورد سوم بیشتر از چیزی که به نظر میرسد ارزش دارد. سروری که هر چند هفته یکبار بدون دلیل ریاستارت میشود، میتواند ماهها وقت تیم را بگیرد. با ECC، همان مشکل یک خط در لاگ است که میگوید کدام ماژول حافظه دارد خراب میشود.
ECC فقط یک ماژول حافظه نیست
اشتباه رایج موقع خرید این است که فکر کنیم میشود رم ECC را روی هر سیستمی نصب کرد و کار میکند. سه چیز باید همزمان پشتیبانی کنند:
- خودِ ماژول حافظه که ECC باشد.
- پردازندهای که کنترلر حافظهاش ECC را پشتیبانی کند — این در خانوادهٔ سروری هست و در بیشتر پردازندههای رومیزی نیست.
- مادربرد یا پلتفرمی که آن را فعال کند.
اگر یکی از این سه نباشد، معمولاً یکی از دو اتفاق میافتد: یا سیستم اصلاً بالا نمیآید، یا حافظه بهصورت عادی و بدون ECC کار میکند — که بدتر است، چون فکر میکنی محافظت داری و نداری.
از کجا بفهمی سرورت واقعاً ECC دارد؟
چون ECC بیسروصدا کار میکند، نبودنش هم بیسروصداست. دو چیز ارزش بررسی دارد:
- اینکه سیستمعامل حافظه را بهعنوان ECC میشناسد — در لینوکس این را از زیرسیستم گزارش خطای حافظه میشود دید.
- اینکه شمارندهٔ خطاهای اصلاحشده صفر مانده یا دارد بالا میرود. خطای اصلاحشده مشکلی ایجاد نمیکند، ولی روند صعودیاش یعنی یک ماژول دارد از کار میافتد و بهتر است قبل از خرابی کامل تعویض شود.
اگر سرور را مدیریتشده گرفتهای، این دو در پایش دورهای دیده میشوند. اگر خودت مدیریت میکنی، ارزشش را دارد که شمارندهٔ خطا را به مانیتورینگ اضافه کنی.
مطالب مرتبط
این مطلب بخشی از راهنمای سرور اختصاصی است.
