“Wear Leveling” یا “تراز بندی پوشش” در دستگاه‌های فلش NAND

“Wear Leveling ” فرآیندی است که به کمک آن فرسایش زودرس فلش‌های NAND به تعویق می‌افتد. نکات فنی این مقاله روی اهمیت یکسان‌سازی و توزیع متوازن داده ها متمرکز می‌شود و دو تکنیک wear leveling به نام‌های استاتیک و داینامیک را توضیح می‌دهد.

پیاده سازی Wear Leveling

پیاده سازی Wear Leveling در کنترلر فلش‌های NAND اتفاق می‌افتد. جایی که این فرآیند دسترسی به حافظه دستگاه را مدیریت می‌کند و چگونگی استفاده از بلوک‌های فلش توسط آن تعیین می‌شود. اکثر اوقات کنترلر برای ترجمه آدرس بلاک فیزیکی آرایش حافظه (PBA) به آدرس بلاک منطقی (LBA)، که توسط سیستم میزبان استفاده می‌شود، یک جدول جستجو همراه خود دارد. ( به تصویر 1 رجوع کنید) الگوریتم یکسان‌سازی مشخص می‌کند که هر بار که اطلاعات برنامه‌نویسی می‌شود از چه بلاک فیزیکی استفاده شود. با این کار ارتباط موقعیت فیزیکی اطلاعات و ذخیره شدن اطلاعات در هر نقطه آرایش حافظه از بین می‌رود.

پیاده سازی Wear Leveling

تصویر 1 : مدیریت آدرس بلوک در کنترلر فلش NAND

بسته به روش wear-leveling  که استفاده می‌شود کنترلر عموماً یا روی بلاکی که پاک‌شده و کمترین عدد پاک شدن را دارد می‌نویسد یا بلاکی را انتخاب می‌کند که کمترین عدد کلی پاک شدن را داشته باشد؛ که در این حالت اگر نیاز باشد بلاک را پاک می‌کند، اطلاعات جدید را روی آن ثبت می‌کند و مطمئن می‌شود که بلاک‌های اطلاعات استاتیک وقتی جابجا شوند که عدد پاک شدنی کمتر از حدی مشخص داشته باشند. ( wear leveling استاتیک)

اهمیت Wear Leveling

نیاز به Wear Leveling از قابلیت سیکل پاک کردن/ نوشتنِ محدود در فلش‌های NAND می‌آید. استفاده زیاد از تعداد محدودی از بلاک‌ها منجر به فرسوده‌شدن دائم دستگاه یا فراتر رفتن از حد پاک کردن/ نوشتن ( program/erase) می‌شود. فرآیند Wear Leveling میزان استفاده از سلول‌های NAND فلش مموری را در آرایش حافظه توزیع می‌کند تا از تمام سلول‌ها به یک اندازه استفاده شود و به افزایش عمر دستگاه نیز کمک شود.

اکنون به مثالی بدون یکسان‌سازی یا همان wear leveling فکر کنید. یک دستگاه فلش NAND با 4،096 بلاک و 2.5 درصد بلاک‌های بد در دستگاهی که یک فایل از  3 فایل متشکل از 50 بلاک را در هر 10 دقیقه بروز می‌کند ( برای چنین به‌روزرسانی میزبان NAND همان 200 بلاک را دوباره استفاده می‌کند) بدون اینکه از 95 درصد آرایش حافظه‌اش استفاده شود در کمتر از یک سال فرسوده می‌شود.  به‌عنوان‌مثال:

اهمیت Wear Leveling

این در حالی است که در شرایطی که از تمام بلاک‌ها به‌طور یکسان استفاده شود و فرآیند نوشتن/پاک کردن روی 4096 بلاک با نرخ 50 بلاک در هر 10 دقیقه انجام شود، پخش شدن فرسایش بین تمامی بلاک‌ها باعث افزایش عمر مفید دستگاه می‌شود. به‌عنوان‌مثال:

اهمیت Wear Leveling

Wear Leveling نه‌تنها عمر دستگاه را افزایش می‌دهد بلکه این اختیار را به حافظه می‌دهد که با کارایی بیشتری مورداستفاده قرار گیرد.  استفاده مجدد از 200 بلاک منجر به نوشتن/پاک کردن 2 میلیون بلاک مؤثر در طول عمر دستگاه می‌شود درحالی‌که استفاده یکسان از 4096 بلاک منجر به نوشتن/پاک کردن 40 میلیون بلاک موثر می‌شود.

انواع Wear Leveling

Wear Leveling به چند روش گوناگون بکار گرفته می‌شود که هرکدام از آن‌ها در کنار پیچیده کردن این فرآیند به عمر فلش NAND هم می‌افزایند. درست است که افزایش عمر دستگاه به میزان حافظه یکسان سازی شده بستگی دارد ( نسبت به‌کل حافظه در دسترس) ولی بااین‌وجود فقدان یکسان‌سازی از عمر مفید دستگاه فلش NAND می‌کاهد.

دو نوع اطلاعات در دستگاه‌های فلش NAND  وجود دارد: استاتیک و داینامیک. اطلاعات استاتیک آن‌هایی هستند که به‌ندرت به روز می‌شوند. ممکن است این اطلاعات گاهی خوانده شوند اما به‌ندرت تغییر می‌کند و به‌صورت تئوریک در طول کل عمر دستگاه در یک موقعیت فیزیکی قرار می‌گیرند. در سمت دیگر،  اطلاعات داینامیک مدام در حال تغییر هستند و به برنامه‌نویسی مکرر نیاز دارند.

پیاده‌سازی Wear Leveling داینامیک

Wear Leveling داینامیک روشی است که به کمک آن بلاک‌هایی که خالی از اطلاعات هستند، جمع‌آوری می‌شوند و بلاک‌هایی که کمترین تعداد پاک شدن را دارند برای ثبت اطلاعاتی بعدی انتخاب می‌شوند. این روش بیشتر برای اطلاعات داینامیک مفید است چراکه فقط قسمت غیر استاتیک دستگاه فلش NAND به‌صورت یکنواخت پوشش داده می‌شود. دستگاهی که از Wear Leveling داینامیک بهره می‌برد در مقایسه با دستگاهی که این فرآیند را نادیده می‌گیرد از طول عمر بیشتری برخوردار است.

به‌عنوان‌مثال در یک دستگاه با 25 درصد اطلاعات داینامیک و 75 درصد اطلاعات استاتیک، یکسان‌سازی داینامیک فقط روی 25 درصد از حافظه تأثیر می‌گذارد و 75 درصد دیگر بلاک‌ها که شامل اطلاعات استاتیک  هستند بدون فعالیت باقی می‌مانند. در چنین حالتی این 25 درصد از بلاک‌ها بیشترین سیکل نوشتن/پاک کردن را به خود اختصاص می‌دهند. ( به تصویر 2 مراجعه کنید)

پیاده‌سازی Wear Leveling داینامیک

تصویر2: پراکندگی اطلاعات در فلش‌های NAND

به کمک Wear Leveling داینامیک در یک دستگاه MLC و 4096 بلاکه با ده هزار سیکل ، 75 درصد اطلاعات استاتیک و نرخ  نوشتن/پاک کردن 50 بلاک در هر 10 دقیقه (یا 6 فایل در هر ساعت) دستگاه بعد از 4 سال فرسوده می شود در حالیکه در این حالت %75 از بلاک‌ها بدون استفاده باقی می‌مانند. ( تصویر 3 )

Wear Leveling داینامیک در یک دستگاه MLC

پیاده سازی Wear Leveling استاتیک

Wear Leveling برای اینکه فرسودگی به‌طور یکسان بین سلول‌ها پخش شود و عمر دستگاه افزایش یابد از تمامی بلاک‌های سالم به یک اندازه استفاده می‌کند. در این روش تعداد سیکل بلاک‌های سالم ردیابی می‌شود و هر بار که برنامه‌ای اجرا شود با انتخاب بلاک‌هایی که فرسودگی کمتری دارند فرسودگی بین تمامی بلاک‌ها به‌طور یکسان پخش می‌شود. نحوه مدیریت اطلاعات استاتیک به این شکل است که تعداد پاک شدن تمامی این بلاک‌ها از حد مشخصی فراتر نمی‌روند. بلاک‌های اطلاعاتی استاتیک که تعداد پاک شدنشان از سایرین کمتر است در دسته بلاک‌های Wear Leveling قرار می‌گیرند و اطلاعات استاتیک به بلاک‌های با تعداد پاک شدن بیشتر منتقل می‌شوند.

اگرچه مرحله اضافی انتقال اطلاعات استاتیک به فضاهای با تعداد پاک شدن کمتر موجب کاهش سرعت ثبت اطلاعات روی فلش می‌شود (چراکه به یک کنترل اضافی نیاز دارد) و عمر بعضی از بلاک‌ها را هدر می‌دهد، به‌طورکلی، Wear Leveling استاتیک بهترین روش برای بهبود حداکثری عمر دستگاه‌های NAND است.

با به‌کارگیری یکسان‌سازی استاتیک برای یک دستگاه  MLC با 4096 بلاک، ده هزار سیکل ، 75 درصد اطلاعات استاتیک و نرخ نوشتن/ پاک کردن 50 بلاک در هر 10 دقیقه عمر دستگاه تا بیش از 15 سال افزایش می یابد.

پیاده سازی Wear Leveling استاتیک

تفاوت فاحش در استفاده از بلاک، بین Wear Leveling استاتیک و داینامیک در تصویر 3 نشان داده‌شده است.

انتخاب روش‌های Wear Leveling

برای انتخاب روش مناسب Wear Leveling باید نقاط مثبت و منفی هرکدام از این روش‌ها را ارزیابی کرد.

انتخاب روش‌های Wear Leveling

جدول 1 : روش‌های استاتیک و داینامیک Wear Leveling

ملاحظات Wear Leveling در آرایش حافظه چندوجهی

تأثیر منطقه بندی

برخی از کنترلرها با رویکرد منطقه بندی عمل می‌کنند که در این روش یکسان‌سازی در زیرمجموعه‌هایی از آرایش حافظه انجام می‌شود. ازآنجایی‌که یکسان‌سازی در هرکدام از این قسمت‌ها در حال انجام است اگر یک منطقه زودتر از بقیه فرسوده شود تمام بلاک‌ها، حتی آن‌هایی که به بیشینه سیکل هم نرسیده‌اند، از بین می‌روند. به‌عبارت‌دیگر، حتی وقتی‌که یکسان‌سازی هم انجام می‌شود این رویکرد می‌تواند موجب کاهش عمر دستگاه شود.

اگر یکسان‌سازی داینامیک در منطقه 1 که 25 درصد اطلاعات داینامیک و 75 درصد اطلاعات استاتیک دارد انجام شود، تنها  از 25 درصد بلاک‌ها برای یکسان‌سازی استفاده می‌شود. احتمالاً هم منطقه 1 زودتر از 3 منطقه دیگر از بین برود و باعث شود سایر مناطق نیز حتی قبل از اینکه به بیشینه سیکل خود برسند نابود شوند.

ملاحظات Wear Leveling در آرایش حافظه چندوجهی

اگرچه Wear Leveling استاتیک ما را از استفاده یکسان از بلاک‌ها در هر منطقه (اگر کنترلر با هر منطقه به‌طور جداگانه رفتار کند) مطمئن  می‌کند اما باید توجه داشت در یک دستگاه میزان استفاده از مناطق یکسان نیست و اگر یک منطقه زودتر از سایر مناطق از بین برود به‌این‌ترتیب کل حافظه دچار نابودی زودرس می‌شود.

بهترین روش این است که تمام بلاک‌های موجود در آرایش حافظه را در یک منطقه قرار دهید تا از یکسان‌سازی همسان تمام دستگاه خیالتان راحت شود. پیشنهاد میکرون به شما این است که برای بهبود عمر دستگاهتان از یک منطقه استفاده کنید.

ملاحظات Wear Leveling در آرایش حافظه چندوجهی

             تصویر 5 : توزیع اطلاعات با استفاده از یک منطقه

Wear Leveling در دستگاه‌هایی با چند وجه

در دستگاه‌های با چند وجه برای اینکه از استفاده یکسان از تمامی بلاک‌ها و جلوگیری از نابودی زودرس اطمینان حاصل شود یکسان‌سازی باید در تمام مناطق انجام شود. در دستگاه‌هایی که چنین شرایطی دارند بهترین روش یکسان‌سازی این است که دسته یکسان‌سازی، همه بلاک‌های خوب را در خود جای دهد. در چنین صورتی یک منطقه زودتر از منطقه دیگر از بین نمی‌رود و دستگاه بیشترین عمر ممکن را تجربه می‌کند.

به‌عنوان‌مثال در اپلیکیشن یک هارد SSD با دستگاه‌های NAND  بسیار، اگر یکسان‌سازی در کل دستگاه انجام نشود احتمال این وجود دارد که برخی از دستگاه‌ها پوشش بیشتری داشته باشند و زودتر از بین بروند. این فرسودگی زودرس بلاک‌ها باعث می‌شود که قبل از اینکه تمام بلاک‌های دستگاه مورداستفاده قرار بگیرد،  SSD فقط به‌صورت Read-only اجرا شود. به‌کارگیری درست فرآیند Wear Leveling به ما این اطمینان را می‌دهد که دستگاه تا حداکثر عمر مفیدش کار کند.

نتیجه‌گیری

Wear Leveling یا توزیع بار متناسب  به افزایش عمر مفید دستگاه‌های فلش NAND کمک می‌کند و برای حصول اطمینان از اینکه دستگاه، به کمک یکسان‌سازی بلاک‌های خوب، به حد قابل قبولی از دوام رسیده لازم است. بدون توجه به امتیاز طول عمر دستگاه، استفاده از روش‌های یکسان‌سازی در فلش‌های NAND امری ضروری است.

ازآنجایی‌که بلاک‌های استاتیک بیشتر مورداستفاده قرار می‌گیرند، یکسان‌سازی استاتیک در مقایسه با یکسان‌سازی داینامیک مؤثرتر است. اگرچه یکسان‌سازی استاتیک نسبت به داینامیک ارجحیت دارد ولی یکسان‌سازی داینامیک هم هنوز یکسان‌سازی مورد انتظار بسیاری از اپلیکیشن‌ها را ارائه می‌دهد.