این روزها روی خیلی از محصولات دیجیتال نام SSD را میبینید. SSDها با هدف رفع محدودیتهای هارددیسکها عرضه شدند تا جایگزین یکی از آخرین قطعات مکانیکی باقیمانده در کامپیوترها باشند و با رفع این محدودیت، افزایش سرعت و پایداری بیشتری را فراهم آورند. در این مقاله به صورت خلاصه و تخصصی و البته به زبان ساده سعی شده ضمن معرفی SSD و مقایسه آن با هارددیسکها به معرفی تکنولوژیهای استفاده شده در آن و بررسی حافظههای فلش NAND بپردازیم.
SSD مخفف عبارت Solid State Drive بوده که به معنای درایو حالت جامد میباشد. اما چرا حالت جامد؟ جواب این سوال در ساختار یک SSD نهفته است که در ادامه مطلب به آن میپردازیم، اما برای فهم بهتر مطالب بعدی ابتدا نگاهی مختصر به ساختار یک دیسک سخت متداول امروزی میاندازیم:
هارد دیسکها به طور معمول متشکل شدهاند از یک یا چند دیسک صلب چرخنده (پلاتر) که با مادهای مغناطیسی پوشیده شده است و همچنین تعدادی هد خواندن/نوشتن با خاصیت مغناطیسی که بالا و پایین هر پلاتر با فاصلهای بسیار کم در حد چند نانومتر قرار میگیرند و وظیفه خواندن و نوشتن اطلاعات را بر/از روی سطح پلاترها بر عهده دارند. نکته قابل توجه اینجاست که هدها نیز بر روی سطح پلاترها حرکت میکنند تا به تمام سطح و در نتیجه اطلاعات دسترسی پیدا کنند.
بدین ترتیب مشاهده میکنید که یک دیسک سخت دارای قسمتهای مکانیکی است که موجب محدودیتهای فراوانی میشود که از جمله مهمترین آنها میتوان به موارد زیر اشاره کرد:
۱- دسترسی به دادههای مورد نظر نیازمند حرکت پلاترها و قرار گرفتن هدهای خواندن/ نوشتن بالای آن میباشد که مدت زمانی به طول میانجامد. (Seek Time)
۲- به مرور زمان و با پر و خالی شدن دیسکها کم کم دادهها در نقاط غیرهم جوار دیسک پخش شده و بدین ترتیب هد برای خواندن/نوشتن یک داده باید به سرعت به نقاط مختلف دیسک حرکت کند که منجر به افزایش تاخیر و افت سرعت میشود. (Fragmented Data) به همین علت Defrag کردن دورهای برای جلوگیری از افت کارایی امریست ضروری.
۳- ماهیت مکانیکی هارد دیسکها منجر به ایجاد نویز، مصرف و وزنی نسبتاً بالا (البته در مقایسه با SSDها) میشود و همچنین با گذشت زمان کارایی آن افت کرده و درصد وقوع خرابیها بالا میرود.
۴- وجود هدها با فاصله بسیار کم از سطح پلاترها، و همچنین دیگر ظرافتهای مکانیکی، هارد دیسکها را تا حد زیادی به ضربه مخصوصاً در زمان فعالیت آسیب پذیر میکند.
این محدودیتها مدتها بود که کاربران تشنه سرعت را آزار میداد تا اینکه سرانجام بعد از گذشت سالها و پیشرفت حافظههای Flash زمینه برای ایجاد یک تغییر بزرگ یعنی ورود SSDها فراهم شد. SSDهای رایج برای ذخیره اطلاعات از حافظههای فلش NAND استفاده میکنند که از ساختاری کاملاً دیجیتال بهره میبرند و در نتیجه آن دیگر خبری از قطعات مکانیکی و محدودیتهای ذکر شده در بالا نیست. اما آیا این بدین معنی است که SSDها هیچ محدودیت و عیبی ندارند؟! جواب این سوال در ساختار و نحوه عملکرد SSDها نهفته است که در ادامه به طور کامل با آن آشنا میشویم.
حافظههای NAND Flash و انواع آن:
حافظههای NAND Flash یکی از انواع دوگانه حافظههای Flash هستند که پس از قطع برق نیز قادر به حفظ و نگه داری اطلاعات به صورت دائمی میباشند (به اصطلاح Non Volatile). این نوع از حافظه که اولین بار در سال ۱۹۸۹ توسط شرکت توشیبا معرفی شد در عصر حاضر به شکل گستردهای در گوشیهای موبایل، دوربینهای دیجیتال، MP۳ Playerها و از همه آشناتر USB Driveها که حتماً تا به حال بارها و بارها از آنها استفاده کردهاید، به کار میرود.
حافظههای NAND دادهها را در آرایهای از سلولها که هر یک خود متشکل از تعدادی ترانزیستور از نوع Floating Gate هستند ذخیره میکنند. این سلولها بسته به مقدار دادهای که میتوانند ذخیره کنند به نوع SLC و MLC تقسیم بندی میشوند:
۱- SLC: مخفف عبارت Single Level Cell بوده که در آن هر سلول حافظه تنها قادر به نگه داری یک بیت داده میباشد و از آنجا که هر بیت تنها دو مقدار ۰ و ۱ را میپذیرد این مقادیر میتوانند ۰ و یا ۱ باشند. این نوع از حافظهها به دلیل محدودیت ذکر شده دارای ظرفیت ذخیره سازی پایینی هستند اما ویژگیهایی دیگری چون طول عمر، سرعت بالا و همچنین مصرف کمتر به این نوع از حافظه برتری میبخشد.
۲- MLC: مخفف عبارت Multi Level Cell بوده که میتواند بیش از یک بیت را در هر سلول حافظه ذخیره کند. به طور مثال ذخیره ۲ بیت به ازای هرسلول که در نتیجه آنچهار حالت پدیدار میشود: ۰۰، ۰۱، ۱۰، ۱۱. (البته استفاده از حافظههایی با ظرفیت بیش از ۲ بیت به ازای هر سلول به دلیل افت چشمگیر کارایی و طول عمر حافظه، در SSDها رایج نیست و تنها در قطعات ارزان قیمتی چون USB Driveها استفاده میشود.)
حافظههای نوع MLC نسبت به SLC دارای قدمت کمتری بوده و تنها مزیت آنها قیمت پایینتر در حجمهای یکسان بوده که علت آن هم تراکم بیشتر داده به ازای هر سلول میباشد، هرچند که این مورد در نهایت باعث کاهش سرعت و طول عمر این نوع از حافظه نیز میشود.
در نهایت جدول زیر به خوبی گویای تفاوتهای SLC و MLC میباشد:
تقسیمات حافظههای NAND:
از اجتماع تعدادی از سلولهای حافظه واحدی به نام صفحه (Page) تشکیل میشود که کوچکترین واحد قابل خواندن/نوشتن در یک SSD میباشد. (این واحد تقریباً هم ارز با Sector در هارد دیسکها میباشد) حجم صفحات در محصولات مختلف بوده و میتواند ۵۱۲، ۲۰۴۸ و یا ۴۰۹۶ بایت باشد.
در سطوح بالاتر، از اجتماع تعدادی صفحه هم یک بلاک (Block) تشکیل میشود که بسته به حجم هر صفحه ممکن است حجمهایی مانند ۱۶، ۱۲۸، ۲۵۶ و یا ۵۱۲ کیلوبایت را در برگیرد. مجموعهای از این بلاکها سرانجام تشکیل یک Die یا به اصطلاح چیپ را میدهد و نهایتا ۱ تا ۸ عدد از این چیپها در یک بسته (Package) قرار میگیرد. افزایش تعداد چیپها به ازای هر بستهٔ حافظه، باعث بالا رفتن سرعت خواندن و نوشتن میشود.
در تصویر زیر یک عدد چیپ حافظه NAND ساخته شرکت اینتل را مشاهده می کنید که به کمک تکنولوژی ساخت ۲۵nm تولید شده است:
ویژگیها و محدودیتهای اصلی حافظههای NAND:
یکی از مهمترین محدودیتهای حافظههای NAND تعداد دفعاتی است که میتوان اطلاعات آن را پاک کرد و مجدداً اطلاعات جدیدی بر روی آن نوشت) به اصطلاح Program/Erase cycles یا P/E cycles) بعد از اتمام این مقدار، سلولهای حافظه شروع به فرسوده شدن میکنند و دیگر تضمینی برای عملکرد صحیح آنها نیست. این مقدار برای حافظههای نوع SLC بین ۵۰۰۰۰ تا ۱۰۰۰۰۰ میباشد و در حال حاضر برای نوع MLC بین ۳۰۰۰ تا ۵۰۰۰ متغیر میباشد که متاسفانه با کوچکتر شدن تکنولوژی ساخت حافظههای Flash و افزایش تراکم ترانزیستور در واحد سطح این مقدار کمتر هم میشود! البته نگران نباشید چون آزمایشات نشان دادهاند که یک SSD مبتنی بر حافظه MLC تحت استفاده شدید هم تا چندین سال بدون مشکل خواهد بود.
محدودیت دیگر این حافظهها این بوده که بر خلاف اینکه دادهها میتوانند بر/از روی یک صفحه نوشته/خوانده شوند نمیتوان فقط دادهٔ یک صفحه را پاک کرد و این عملیات تنها با پاک کردن مجموعهای از صفحات که تشکیل یک بلاک را میدهند امکان پذیر است.
پیش از ادامه مطلب توجه به این نکته ضروریست که هم در هارد دیسکها و هم در SSDها وقتی شما دستور پاک کردن یک فایل را صادر میکنید تنها سیستم عامل از آن مطلع میشود و بلاکهای مورد نظر تنها به صورت نرم افزاری (به عبارت دیگر منطقی) پاک میشوند (در واقع سیستم عامل در لیست بلاکهای خود آن را خالی شده تلقی میکند) این در صورتیست که در سطح سخت افزاری هیچ اتفاقی نمیافتد تا زمانی که شما نیاز به نوشتن بر روی همان بلاک را پیدا کنید. در این حالت هارد دیسک میتواند به صورت مستقیم و بدون نیاز به هیچ گونه عملیات اضافهای دادههای جدید را بر روی دادههای قبلی بازنویسی کند.
اما SSDها در این بخش به مشکل بزرگی برخورد میکنند. بر خلاف دیسکهای سخت حافظههای فلش قابلیت بازنویسی مستقیم را ندارند و پیش از نوشتن دادههای جدید نیاز به پاک شدن دارند. در نتیجه در این حالت باید ابتدا کل بلاکی که حاوی صفحات غیر معتبر (صفحاتی که از دید سیستم عامل قبلاً پاک شدهاند) است خوانده شود، اطلاعات معتبر آن بر روی بلاک آزاد دیگری کپی شود تا بدین ترتیب صفحات حاوی اطلاعات نامعتبر آزاد شوند و بتوان اطلاعات جدید را بر روی آنها نوشت. (این فرآیند که در واقع به احیای صفحات حاوی دادههای نامعتبر میپردازد Garbage Collection نامیده میشود) در همین راستا بلاک اولیه نیز به طور کامل پاک شده و برای استفادههای بعدی تجدید میشود.
برای فهم بهتر این مطلب به تصویر و مثال زیر توجه کنید:
در ابتدا صفحات A تا D که حاوی اطلاعات معتبر هستند بر روی بلاک X نوشته شدهاند. (تصویر اول از سمت چپ) بعد از گذشت زمان اطلاعات جدیدی نیز در قالب صفحات E تا H بر روی بلاک X نوشته میشوند. همچنین با انجام تغییراتی بر روی محتوای صفحات A تا D (مثلا ویرایش یک فایل Word) دادههای جایگزین تحت نامهای A´ تا D´ بر روی همان بلاک X ذخیره میشوند و محتوای صفحات A تا D دیگر معتبر نیست و باید در اولین فرصت تخلیه شوند که این امر ممکن نیست مگر آنکه کل بلاک X پاک شود. (تصویر دوم از سمت چپ) در نهایت برای استفاده مجدد از صفحات A تا D کل صفحات معتبر از روی بلاک X خوانده شده و بر روی بلاک Y نوشته میشود تا در آخر بتوان هم بلاک X را تخلیه کرد و هم صفحات A تا D را مجددا آماده دریافت اطلاعات جدید کرد.
این عملیاتهای اضافی نوشتن با عبارت Write Amplification شناخته میشود و نسبت آن از تقسیم مقدار حجمی که در عمل و به صورت فیزیکی نوشته میشود به مقداری که توسط کاربر درخواست شده است به دست میآید.
چیزی که مسلم است این مقدار همواره بزرگتر و یا مساوی یک میباشد. در اینجا به طور مثال شما قصد نوشتن ۱مگابایت را داشتید اما به واسطه Write Amplification علاوه بر نوشته شدن حجم در خواستی شما چندین مگابایت اضافه هم خوانده و نوشته میشود که در نهایت هم سرعت نوشتن را کاهش چشمگیری میدهد و هم از طول عمر سلولهای حافظه میکاهد.
وجود این پدیدههای ناخوشایند در حافظههای NAND، طراحان را به فکر راه حل انداخت که در ادامه با مهمترین آنها به صورت خلاصه آشنا میشویم:
دستور TRIM: اجرا شدن این دستور نیاز به پشتیبانی همزمان سیستم عاملهای چون ویندوز ۷ یا MAC OS X ۱۰. ۶. ۸ و Firmware به کار رفته در SSD را دارد. نحوه عملکرد آن هم بدین صورت است که همزمان با پاک کردن یک داده توسط کاربر اینبار علاوه بر اطلاع سیستم عامل، به کمک فرستاده شدن دستور TRIM به کنترلر SSD، صفحات مورد نظر فوراً غیر معتبر شناخته شده و عملیات احیای صفحات (که قبلاً توضیح داده شد) بر روی آنها انجام میشود و در آینده در صورت نیاز به نوشتن مجدد به دلیل عدم نیاز به پاک کردن صفحات و به طبع آن کل بلاک، عملیات نوشتن با حداکثر سرعت انجام میشود.
تصویر زیر به خوبی گویای مراحل انجام این دستور میباشد:
مربع سبز رنگ = صفحات خالی
مرع آبی رنگ = صفحات حاوی دادههای معتبر
مربع قرمز رنگ = صفحات حاوی دادههای غیر معتبر
بدین ترتیب مشکل افت سرعت نوشتن دادهها به دلیل پر شدن SSD، تا حد زیادی برطرف میشود.
Wear Leveling: این مورد الگوریتمی است که به کمک آن کنترلر SSD تا آنجا که ممکن است نوشتن دادهها را بر روی بلاکهای مختلف به صورت مساوی پخش میکند به طوریکه هیچ بلاکی بیشتر از سایرین پاک و مجدداً نوشته نشود، زیرا در غیر اینصورت به مرور زمان بلاکهایی که بیشتر مورد اسفاده قرار میگیرد زودتر از سایرین به پایان عمر خود میرسند و ایجاد مشکل میکنند.
Over Provisioning: کلیه کمپانیهای تولیده کننده SSD بسته به صلاح دید خود باید مقداری از حافظه NAND به کار رفته در محصول خود را به انجام عملیات پشت پردهای همچون Wear Leveling و Garbage Collection اختصاص دهند که همواره نیاز به یک فضای خالی دارند. این فضا که از دید کاربر مخفیست تقریباً حکم یک چرک نویس! را دارد که نهایتا باعث کاهش Write Amplification و افزایش طول عمر سلولهای حافظه میشود.
مقدار Over Provisioning از رابطه زیر محاسبه میشود:
یکی دیگر از محدودیت های حافظه های NAND قیمت بالا به ازای هر گیگابایت می باشد به طوریکه خرید SSD هایی با حجم بالا را مشکل می کند. البته با گذر زمان و کوچک تر شدن تکنولوژی ساخت چیپ های حافظه می توان انتظار کاهش قیمت را داشت کما اینکه در حال حاضر هم این قیمت به نسبت سال های قبل تا حد زیادی کاهش داشته است و این روال همچنان ادامه خواهد داشت.
کنترلر و ارتباط آن با حافظههای NAND:
تا اینجای کار با حافظههای NAND و ویژگیهای آنکه یکی از اصلیترین بخشهای یک SSD میباشد آشنا شدیم. در این قسمت نوبت به معرفی کنترلر میرسد که یکی دیگر از مهمترین اجزای SSD میباشد. یک کنترلر در حالت کلی پردازندهای است که وظیفه اجرای دستورات Firmware را بر عهده دارد که شامل مدیریت و کنترل حافظههای NAND و اجرای دستورات ورودی و خروجی میباشد که در نتیجه اهمیت بسیار زیادی در عملکرد یک SSD ایفا میکند.
در حال حاضر کمپانیهای همچون JMicron، Marvell، SandForce، Intel و Indilinx در ساخت کنترلر فعالیت دارند. مهمترین وظایف یک کنترلر به صورت تیتروار به شرح زیر میباشد:
– انجام و مدیریت عملیاتی مهمی چون Wear Leveling و Garbage Collection
– تصحیح خطاهای احتمالی به وجود آمده در دادهها
– مدیریت و اجرای دستورات ورودی و خروجی (دستورات ورودی شامل نوشتن و دستورات خروجی شامل خواندن داده از حافظههای NAND میشوند)
– انجام عملیات رمز گذاری بر روی دادهها بر ارتقای سطح امنیت اطلاعات
علاوه بر موارد بالا نوع حافظههای NAND و نوع رابط ورودی/خروجی نیز توسط کنترلر تعیین میشوند.
در تمام SSDها یک کنترلر از طریق تعدادی کانال ارتباطی به طور همزمان به چندین چیپ حافظه NAND متصل میباشد که همین ویژگی کلیدی سرعت بالای SSD را در انجام عملیات خواندن و نوشتن رقم میزند. در اینجا باید به این نکته توجه داشت که هر چیپ حافظه NAND به تنهایی دارای سرعت خواندن و نوشتن پایینی است ولی این مشکل زمانی که به طور مثال از ۸ و یا ۱۶ چیپ به طور همزمان برای خواندن و نوشتن یک یا چند داده استفاده میشود به طور کامل برطرف میشود. اجازه دهید با چند تصویر و مثال ساده این عملکرد را توضیح دهیم:
مطابق تصویر فرض کنید میخواهید دو داده هریک با حجم ۶۴ کیلوبایت را بر روی SSD بنویسید. ما در اینجا ۴ چیپ حافظه هریک با حجم ۳۲ کیلوبایت (متشکل از ۸ صفحه ۴ کیلوبایتی) در اختیار داریم که از طریق ۴ کاناله جداگانه به کنترلر متصل میباشند. در اینجا هر داده ۶۴ کیلوبایتی به دلیل حجم زیاد قابلیت تقسیم به ۴ قسمت را داشته و توسط کنترلر به طور همزمان بر روی ۴ چیپ حافظه نوشته میشود، بدین ترتیب اگر تصور کنیم که هر چیپ به تنهایی دارای حداکثر سرعتی معادل ۴۰ مگابایت بر ثانیه است میتوان انتظار داشت در این حالت دادهها با حداکثر سرعت ۱۶۰ مگابایت بر ثانیه نوشته شوند.
این حالت بیشتر در نوشتن و خواندن فایلهای حجیم اتفاق میافتد.
در تصویر بعدی این بار تنها یک داده ۴ کیلوبایتی در انتظار نوشته شدن میباشد که به دلیل حجم کم دیگر نمیتوان آن را به ۴ قسمت تقسیم کرد و به طور همزمان بر روی چیپهای حافظه نوشت. در اینجا این داده تنها بر روی یکی از چیپها با سرعت پایین نوشته میشود.
در تصویر دیگر اینبار ۴ دستور ورودی هر یک با حجم ۴ کیلوبایت به طور همزمان در صف نوشتن قرار گرفتهاند که اینبار کنترلر میتواند به جای اینکه این دستورات را پشت سرهم اجرا کند هر ۴ دستور را به طور همزمان بر روی چیپهای حافظه بنویسد که باز هم شاهد افزایش چشمگیر کارایی خواهیم بود.
این دو حالت اخیر در استفادههای معمول، زیاد اتفاق میافتد و کنترلر SSD همواره سعی میکند تا با جمع آوری چندین دستورالعمل کم حجم آنها را به طور همزمان اجرا کند تا شاهد افت کارایی نباشیم.
توجه داشته باشید که در هر سه حالت بالا هنگام خواندن دادهها هم حالتی مشابه رخ میدهد.
نکتهای که میتوان از توضیح بالا استنباط کرد این است که به صورت تئوری با افزایش تعداد چیپهای حافظه و تعداد کانالها امکان موازی سازی بیشتر عملیات خواندن و نوشتن و به دنبال آن افزایش سرعت فراهم میشود. به همین علت معمولاً SSDهای با حجمهای بالا از سرعت بیشتری برخوردار میباشند.