این قسمت را به این موضوع اختصاص میدهیم که وقتی صفحات SSD شما برای ذخیره کردن در حال اتمام است باید چه کنید؟ پس شما را دعوت میکنیم که بخوانید و یاد بگیرید!
Garbage Collection
تغییر دادن دادههایی که بر روی SSDها ذخیره شدهاند از تغییر این دادهها در صورتی که بر روی هارد درایو ذخیره هستند، سختتر است. در هارد درایو به سادگی میتوان دادهها را Overwrite کرد. اساسا وقتی میخواهیم دیتای یک صفحه را در SSD تغییر دهیم، دیتای آن صفحه تغییر نمیکند، چون باید ابتدا آن را پاک کنیم. این کار هم فقط با پاک کردن کل Block ممکن است. برای حل این مشکل، صفحهای که تغییر یافته است، بر روی صفحه دیگری که خالی است ذخیره میشود، و صفحهای که باید تغییر یابد، به عنوان “قدیمی” علامت گذاری میشود. تا زمانی که SSD صفحهای خالی دارد این روش نوشتن و علامت گذاری یک صفحه به عنوان قدیمی ممکن است. ولی زمانی خواهد رسید که این صفحات خالی تمام میشوند. برای اجتناب از این وضعیت، فرآیندی به نام Garbage Collection در SSD انجام میشود. این کار سختی است که توسط SSD controller انجام میشود که خود به تنهایی یک کامپیوتر با CPU و حافظه مستقل است. این Controller مدیریت کل دیتای ذخیره شده بر روی SSD را بر عهده دارد.
سیستم عامل از این که در بطن ماجرا چه میگذرد کاملا بی خبر است و فقط دستور میدهد که دیتایی بر روی یک قسمت logical خاص از دیسک نوشته شود. قرار دادن دیتا بر روی دیسک به صورت فیزیکی توسط SSD controller انجام میشود. تنها کاری که سیستم عاملهای مدرن انجام میدهند این است که یک دستور TRIM به SSD میفرستند که به آن بگویند بخشی از دیتا حذف شد. این کار، فرآیند Garbage Collection را قدری سادهتر میکند چون SSD بیشتر در جریان این مساله قرار میگیرد که کدام صفحهها دیگر معتبر نیستند. در طول فرآیند SSD Controller Block ،Garbage Collectionها را پاک میکند تا صفحهها را خالی کند. ولی نمیتوان هر Blockی را پاک کرد، چون برخی صفحات دیتای معتبری دارند که روی آنها ذخیره شده است. همچنین این امکان وجود ندارد که Blockهایی را که فقط صفحات قدیمی دارند یافته و آنها را پاک کنیم. چون ممکن است تعداد این Blockها تمام شود، مثلا در صورتی که هر Block روی دیسک حداقل یک صفحه معتبر داشته باشد.
کاری که SSD در طول فرآیند Carbage Collection انجام میدهد این است که تمام صفحات معتبر را از یک Block خاص به یک Block جدید بازنویسی میکند. Block بعدی که صفحات از روی آن کپی شدند میتواند پاک شده باشد. SSD معمولا Blockهایی را برای Garbage Collection انتخاب میکند که هیچ صفحه آزادی ندارند. می توان زمان معینی برای انجام Garbage Collection پیش بینی کرد چون این فرآیند بعضا فقط در زمان تغییر دیتا صورت میگیرد. در بعضی مواقع که از SSD استفاده نمیشود این فرآیند در پس زمینه انجام میشود. زمان انجام Carbage Collection به Controller بستگی دارد و این زمان را فقط سازنده Controller میداند. معمولا Enterprise SSDها Garbage Collection را فقط در زمان نوشتن انجام میدهند و Garbage Collection پس زمینه فقط برای SSDهای معمولی استفاده میشود. Enterprise SSDها از Garbage Collection پس زمینه پشتیبانی نمیکنند تا از نوشتنهای غیر ضروری جلوگیری کنند (وقتی Blockها کپی میشوند) که باعث افزایش طول عمر دیسک میشود. طراحی به این صورت انجام شد چون حافظه فلش تعداد نوشتن محدودی دارد و بعد از آن دیگر قابل استفاده نیست. Garbage Collection پس زمینه در یک محیط Enterprise اصلا مناسب نیست چون دستگاه وقتی برای انجام این کار ندارد. اما SSDهای معمولی چنین بار کاری بالایی ندارند و معمولا سازندگان تصمیم میگیرند Garbage Collection پس زمینه را در این نوع SSDها تعبیه کنند تا دستگاه با سرعت بیشتری کار کند.
فرآیند Garbage Collection در SSDها به اختصار توضیح داده شد چون تاثیر قابل ملاحظهای بر عملکرد دارد. وقتی SSD فرآیند Garbage Collection را در طول نوشتن انجام میدهد سرعت آن به طور قابل ملاحظهای کاهش مییابد مخصوصا زمانی که برای تکمیل نوشتن، Blockهای زیادی باید بازنویسی شوند. در بسیاری از موارد، دیسک باید دیتای بسیار زیادی نسبت به آنچه سیستم عامل برایش فرستاده است بنویسد چون Blockهای زیادی باید در طول Garbage Collection بازآرایی شوند.
این پایان کار نیست! منتظر بخشهای بعدی این مقاله باشید.