حافظه ECC چیست؟ ECC، مخفف عبارت "Error-Correcting Code" یا "کد تصحیح خطا" است، که در سیستمهای کامپیوتری و سرورها برای تشخیص و تصحیح خطاهای حافظه استفاده میشود. هدف اصلی حافظه ECC افزایش دقت و قابلیت اطمینان حافظهها در ذخیره و بازیابی دادهها است. این نوع حافظه برای کاهش خطاهای احتمالی که به دلیل تداخلهای الکتریکی یا خرابیهای سختافزاری ممکن است رخ دهند، طراحی شده است.
قبل از به وجود آمدن حافظه ecc، خطا در حافظه با استفاده از بیت های برابری زوج یا فرد تشخیص داده می شد. در سیستم های رایانه ای داده ها در بسته های اطلاعاتی 8 بیتی ذخیره می شدند.
در روش برابری یک بیت اضافی که بیت نهم است، به سیستم در تشخیص وقوع خطا کمک می کند. اگر سیستمی از روش parity استفاده می کند، بیت های 1 و 0 (به اضافه بیت اضافی) در نهایت باید یک عدد زوج تولید کنند.
ECC در واقع یک فرمت از نوع parity است. به دلیل اینکه برای تشخیص خطاهای تک بیتی از چند بیت برابری اختصاصی استفاده می کند و همچنین قابلیت تصحیح خودکار آنها را نیز دارد. به جای یک بیت برابری برای هر 8 بیت داده، ECC از یک کد 7 بیتی، به جای یک بیت برابری برای هر 8 بیت داده استفاده می کند. که به طور خودکار برای هر 64 بیت داده ذخیره شده در حافظه، تولید می شود.
هنگامی که سیستم 64 بیت داده را می خواند، یک کد 7 بیتی دیگر تولید می شود و سپس با کد 7 بیتی اصلی مقایسه می شود. اگر کدها مطابقت داشته باشند، به این معنی است که داده ها بدون خطا هستند. اما در صورت عدم تطابق کدها، سیستم می تواند خطا را پیدا کرده و با مقایسه دو کد 7 بیتی آن را اصلاح کند. (روش مقایسه دو کد معمولاً به روش Reed-Solomon انجام می شود.)
حافظه کد تصحیح خطا (ECC) بیشتر در ایستگاه های کاری و سرورها یافت می شود. همچنین از خرابی سرور/ایستگاه کاری جلوگیری می کند. این حافظه ها برای متخصصان فناوری اطلاعات و مشاغل، از جمله موسسات مالی و شرکتهای خدمات ابری ، که در آن خرابی و قطع اطلاعات فاجعهبار است، بسیار کاربردی است.
اما چرا خطا رخ میدهد؟
دو نوع اصلی خطا وجود دارد: خطاهای حافظه و خطاهای واحد (unit errors)، که خطاهای واحد رایج ترین آنها هستند.
خطاهای حافظه ناشی از اختلالات الکترومغناطیسی در داخل کامپیوتر است که باعث می شود DRAM خود به خود به حالت مخالف تغییر کند. خطای واحد زمانی رخ میدهد که یک بیت از هشت بیت داده (باینری 1 یا 0) ناخودآگاه به مقدار مخالف خود تغییر میکند. خطاهای سلولی به روشهای ظریفی رخ میدهند که تأثیر کمی بر دادهها دارند، اما همچنان بر سیستم عامل تأثیر میگذارند.
همچنین بخشی از خطاهای حافظه شامل خطاهای سخت و خطاهای نرم وجود دارد. خطاهای سخت بیشتر عوامل فیزیکی مانند تغییرات ولتاژ، شوک و دما هستند. اما خطاهای نرم به دلیل نوشتن دادههایی ایجاد میشوند که مطابق انتظار نیستند. همانطور که دادهها به داخل و خارج از رم سرور منتقل میشوند، ممکن است برخی خرابیها رخ دهند.
تفاوت حافظه ECC و غیر ECC
در ویدئو زیر به صورت کامل به تفاوت بین حافظه ECC و غیر ECC پرداخته شده است:
از نظر فیزیکی، حافظه ECC با حافظه غیر ECC (مانند آنچه رم لپتاپ / دسکتاپ مصرفکننده استفاده میکند) متفاوت است، زیرا به جای 8 تراشه، 9 تراشه حافظه دارد (تراشههای حافظه برای ذخیره دادههایی استفاده میشوند که به CPU ارسال میشوند). این تراشه حافظه اضافی ECC RAM برای تشخیص و تصحیح خطا در بین هشت تراشه حافظه دیگر استفاده می شود.
سیستمهایی که حافظه ECC را اجرا میکنند، کمتر خراب میشوند. در سال 2014، Puget Systems معیارهایی را اجرا کرد و متوجه شد که حافظه ECC دارای نرخ خرابی 0.09 است، در حالیکه نرخ خرابی حافظه بدون کد تصحیح خطا 0.6 است.
حافظه ECC بارهای کاری درجه یک سازمانی را هدف قرار می دهد، بنابراین اکثر مادربردهای رایانه های شخصی مصرف کننده یا از رم ECC پشتیبانی نمی کنند و یا بدون عملکرد ECC آن را اجرا می کنند. برای استفاده از مزایای حافظه ECC، به یک مادربرد در سطح ایستگاه کاری / سرور نیاز دارید. همچنین حافظه ECC به دلیل داشتن تراشه حافظه اضافی، گرانتر از رم غیر ECC است.
همانطور که گفته شد حافظه ECC برای ایستگاه های کاری و سرورها طراحی شده است. به این ترتیب، یک CPU قوی برای پشتیبانی از حافظه ECC مورد نیاز است. برای پردازندههای اینتل، تنها Xeon از ECC پشتیبانی میکند.
حافظه ECC بهتر است یا حافظه Non-ECC
برای پاسخ به این سوال که حافظه ECC بهتر است یا حافظه Non-ECC باید بگوییم که هیچ استاندارد مطلقی برای قضاوت بین حافظه ECC و حافظه غیر ECC وجود ندارد که بگوییم کدام بهتر است. نکته مورد توجه این است که استفاده از هرکدام باید مختص محیط باشد. اگر صنعت شما صنعت مالی یا پزشکی یا سایر صنایع مهم مرتبط با داده است، باید پیکربندی حافظه ECC را در سرورهای مرکز داده در نظر بگیرید. حال سوال پیش میآید چرا؟ زیرا میتواند آسیبپذیریهای امنیتی و خطاهای رونویسی دادهها را کاهش دهد، از خرابی اطلاعات و خرابی سیستم و غیره جلوگیری کند و به دقت بالاتری از دادهها و ثبات سیستم دست یابد. در چنین صنایعی، تأثیر خطاهای داده میتواند جبران ناپذیر باشد. این امر میتواند منجر به کدگذاری نادرست یا خراب شدن دادهها شود که مستقیما بر عملیات مالی شما تأثیر میگذارد.
اگر فقط یک کاربر معمولی رایانه شخصی هستید، یا قصد ندارید از تجهیزات حیاتی برای پروژه های بزرگ استفاده کنید، می توانید DRAM یا non-parity SDRAM را انتخاب کنید.
مزایا و معایب حافظه ECC
در ابتدا بررسی میکنیم که حافظه ECC چه مزایایی دارد و سپس به معایب آن میپردازیم. هنگامی که حافظه ECC را روی یک سرور اعمال میکنید، دادههای حافظه را کنترل و خطاها را به سرعت تصحیح میکند. اولا، این امر تا حدی تعداد خرابی ها را کاهش میدهد، به خصوص در دستگاههایی که نمیتوانند در برابر خرابی دادههای حافظه مقاومت کنند، مانند برنامههای کاربردی محاسباتی یا سرورها در صنایع علمی و مالی.
ثانیا، تصحیح خطای داده می تواند یکپارچگی داده ها را حفظ کرده و ثبات سیستم را افزایش دهد. در مرکز داده، حافظه ECC از حافظه غیر ECC قابل اعتمادتر است.
معایب حافظه ECC
با این حال، حافظه ECC نه تنها مزایایی را به همراه دارد، بلکه معایبی نیز دارد. شاید تعجب آور باشد که RAM ECC کندتر از رم غیر ECC است، زیرا بررسی خطاها زمان بیشتری می برد. در همان مطالعه سال 2014 که در بالا ذکر شد، Puget دریافت که RAM دارای کد تصحیح خطا، 0.25 درصد کندتر از RAM غیر ECC است. همچنین در مقایسه با حافظه های غیر ECC، حافظه ECC به دلیل تراشههای حافظه اضافی و پیچیدگی آنها گرانتر است.
حافظه ECC چگونه کار می کند؟
احتمالا شما هم این سوال را از خود پرسیدهاید که حافظه ECC چگونه کار میکند؟ حافظه ECC شامل بیت های حافظه اضافی و کنترل کننده های حافظه است که بیت های اضافی را در یک تراشه اضافی روی ماژول کنترل می کند. حافظه ECC از بیت های اضافی برای ذخیره یک کد رمزگذاری شده هنگام نوشتن داده ها در حافظه استفاده می کند و کد ECC در همان زمان ذخیره می شود. هنگامی که داده ها خوانده می شوند، کد ECC ذخیره شده با کد ECC که هنگام خواندن داده ها ایجاد شده است مقایسه می شود. اگر کد خوانده شده با کد ذخیره شده مطابقت نداشته باشد، توسط بیت های برابری رمزگشایی می شود تا مشخص شود کدام بیت اشتباه بوده است، سپس این بیت بلافاصله تصحیح می شود.
همانطور که داده ها پردازش می شوند، حافظه ECC دائما در حال اسکن کد با یک الگوریتم خاص برای شناسایی و تصحیح خطاهای حافظه تک بیتی است.
در واقع کد تصحیح خطا یک فرآیند ریاضی است که از صحت داده های ذخیره شده در حافظه اطمینان می دهد. در صورت بروز خطا، ECC همچنین به سیستم اجازه می دهد تا داده های صحیح را دوباره ایجاد کند.
در واقع میتوان گفت روشی که حافظه ECC خطاها را تشخیص می دهد، بررسی parity است.به عنوان مثال اگر parity بایت را به بیت فرد 7 اضافه کند، آنگاه برابری (parity) 1 و زوج برابر با 8 است. اگر بایت برابری (parity) 0 باشد و نتیجه فرد باشد، بایت در حالت خراب است.
سخن پایانی
دلیل اصلی استفاده از حافظه ECC این است که از خطاهای داده در حافظه سرور جلوگیری میکند و از ثبات عملکرد سیستم اطمینان حاصل میشود. یک مکان مهم برای جلوگیری از خطای دادهها در رم سرور است که به طور موقت دادهها را ذخیره میکند. بنابراین حافظه ECC را می توان رم ECC نیز نامید. به طور کلی، حافظه ECC با حافظه غیر ECC تفاوت دارد. زیرا حافظه ECC از کدهای تصحیح خطا برای تصحیح دادههای حافظه استفاده میکند.
منبع: www.tomshardware.com/reviews/ecc-memory-ram-glossary-definition,6013.html
https://community.fs.com/article/ecc-vs-non-ecc-memory-which-one-is-better.html
مترجم: محبوبه سردشتیان