آشنايي با SSDها


 






 
احتمالاً اولين بار پس از آنکه حافظه هاي فلش به اندازه کافي قابل اطمينان و ارزان شدند بوده که کسي به ذهنش رسيده است که تا جايي که مي تواند تراشه هاي حافظه فلش را درون محفظه يک ديسک سخت قرار دهد، يک کنترل کننده به آن بيافزايد و در يک چشم به هم زدن از دست تمامي مشکلات مکانيکي درايوهاي ديسک سخت خلاص شود.

نکته... يکنواخت سازي خرابي
 

سلول ها در يک درايو حالت جامد عمر کوتاهي دارند و پيش از آغاز فرسايشي که منجر به خرابي کامل آنها مي شود، تنها مي توانند حدودا 10000سيکل برنامه ريزي / پاک کردن داشته باشند. برخي از برنامه هاي خاص سيستم عامل، مکرراً داده هاي روي ديسک را به روز مي کنند و اگر SSD واقعاً دوباره از همان صفحه استفاده مي کرد يا به عبارت ديگر اگر يک LBA به طور دائم به يک صفحه SSD اختصاص مي يافت، حافظه NAND آن صفحه (کل آن بلوک) به سرعت خراب مي شد. بنابراين کنترل کننده هاي SSD از نوعي الگوريتم، يکنواخت سازي خرابي استفاده مي کنند. اين الگوريتم اول از همه پويايي اختصاص LBA به صفحات را تضمين مي کند. يک LBA مي تواند در اين زمان به يک صفحه اشاره کند و در زمان بعد به صفحه اي ديگر، همان طورکه در متن مقاله اصلي ديديم اين کار به سادگي و به کمک نوشتن بر روي صفحات جديد به جاي به روزرساني صفحات قبل، قابل انجام است.
کار ديگري که بايد انجام شود اين است که تضمين شود صفحات ايستا (صفحاتي که تنها يک بار نوشته و به دفعات خوانده مي شوند، مانند فايل هاي اجرايي EXE) نيز به طور منظم تغيير مکان دهند. به اين کار يکنواخت سازي خرابي ايستا مي گويند. اگر اين کار انجام نمي شد، SSD شامل صفحاتي مي بود که هرگز پاک نمي شدند و صفحاتي نيز وجود داشتند که مرتباً پاک و بازنويسي مي شدند. و درايو به صورت نامنظمي خراب مي شد. با حرکت داده هاي ايستا وضعيت کلي خرابي بهبود مي يابد. به خاطر داشته باشيد که درايوهاي USB از اين نوع يکنواخت سازي خرابي استفاده نمي کنند و صفحات ايستاي درون اين درايوها براي بهبود وضعيت خرابي، جابه جا نمي شوند. اين مسأله يکنواخت سازي خرابي پويا ناميده مي شود.
اگر فقط تبليغات را ديده باشيد، طبيعي است که فکر کنيد SSDها هيچ نقطه ضعفي ندارند. از درايوهاي سخت متداول سريع تر هستند، در مقابل ضربه مقاوم تراند، فوق العاده کم صدا هستند، و به نظر مي رسد تنها نکته منفي که مي توان در موردشان به آن اشاره کرد، قيمت آنها است. در واقع مسايلي نيز وجود دارد که بايد هنگام کار با SSDها از آنها آگاه باشيد. به خصوص که موقع استفاده از اين فناوري سيستم عامل مورد استفاده تان اهميتي مضاعف پيدا مي کند.
وقتي به طور روزمره با يک کامپيوتر شخصي کار مي کنيد به نحوه عملکرد آن در اجراي برنامه هاي خاصي که روي آن نصب اند، عادت مي کنيد. محدوديت برخي از اين برنامه ها قدرت محاسباتي است، يعني گلوگاه در اجراي اين برنامه ها کاملاً به سرعت پردازنده اي که آنها را اجرا مي کند وابسته است. يکي از بهترين مثال هاي چنين برنامه هايي تبديل ويديو از يک قالب به قالبي ديگر - مثلاً از DVD به MP4 براي اجرا بر روي iPod لمسي - است. هر کاري هم که بکنيد، سرعت تبديل کاملاً به سرعت پردازنده محدود است و زيرسيستم هاي ديسک به راحتي از پس عمليات خواندن و نوشتن برمي آيند.
اما محدوديت برخي ديگر از برنامه ها سرعت ورودي / خروجي (I/O) است. انتظار شما از سرعت اجراي برنامه به سرعت زيرسيستم هاي خواندن و نوشتن روي ديسک وابسته است. نمونه اي از اينگونه برنامه ها که شايد تصورش را نکنيد، بوت کردن کامپيوتر است. وقتي کامپيوتر را بوت مي کنيد، مدير بوت بايد درايورها (راه اندازها) و برنامه هاي مختلفي را از روي ديسک بوت بر روي حافظه بارگذاري و اجرا کند. سيستم هاي عامل مدرن صدها برنامه، درايور و سرويس اين چنيني دارند و برنامه هايي هم که سعي مي کنند سرعت بوت را افزايش دهند، معمولاً فقط بر به حداقل رساندن چيزهايي که بايد بار گذاري شوند، تمرکز مي کنند.

تأخيرات ديسک
 

درايوهاي ديسک استاندارد در مورد برنامه هاي محدود به سرعت I/O عملکرد خيلي خوبي ندارند. اين وضعيت دو دليل اساسي دارد. نخست اينکه هد بايد بر روي مکان درستي از صفحه درست قرار گيرد و منتظر بماند تا سکتور درست بچرخد و زير هد قرار گيرد. به اين تأخير، زمان جستجو مي گويند. هد پس از قرار گرفتن در جاي درست بايد منتظر بماند تا سکتور درست ظاهر شود (تأخير چرخشي) و بتواند داده هاي درخواستي را بخواند.
يک دليل ديگر ممکن است اين باشد که ديسک بايد شروع به چرخش کند، زيرا بسياري از سيستم ها به ويژه لپ تاپ هايي که با باتري کار مي کنند، براي حفظ انرژي خود، پس از مدتي بلااستفاده ماندن ديسک، چرخش صفحه آن را متوقف مي کنند.
تأخير نخست در روزهاي ابتدايي عرضه درايوهاي ديسکي قابل توجه بود، زيرا نيم ثانيه يا بيشتر طول مي کشيد. اما با بهبود مداوم، اکنون زمان جستجو براي دستگاه هاي روميزي و همراه استاندارد به 10ميلي ثانيه کاهش يافته است.
تأخير دوم مستقيماً با سرعت چرخش صفحه ديسک نسبت دارد. در طول اين سال ها سرعت درايوها رشد کندي داشته اند و الان سرعت استاندارد دستگاه هاي قابل حمل 5400 و دستگاه هاي روميزي 7200 دور در دقيقه است.
البته امروزه لپ تاپ هاي پيشرفته تر (البته به غير از اپل) نيز به استفاده از درايوهاي 7200 دور در دقيقه به عنوان استاندارد گرايش پيدا کرده اند. مي توانيد براي کامپيوترهاي روميزي خود درايوهاي 10000 دور در دقيقه هم بخريد. برخي پيشنهاد مي کنند از اين درايوها براي بوت استفاده کنيد. براي مقايسه، مثلاً iPodهاي کلاسيک هاردهاي 4200 دور در دقيقه داشتند (ساير iPodهاي فعلي از حافظه فلش استفاده مي کنند).
عامل ديگري که بر سرعت کلي درايوهاي ديسکي مؤثر است، سرعت خواندن از روي صفحه ديسک و بارگذاري روي RAM مي باشد. در اين مورد علاوه بر تغيير رابط هاي قديمي تر PATA به رابط هاي SATA، سرعت به چگالي داده هايي که بر روي صفحه ديسک قرار دارند نيز وابسته است. اين چگالي با سرعت بسيار کمي هر سال اضافه مي شود.
با تمام اين صحبت ها، سرعت درايوهاي سخت از لحاظ فيزيکي و مکانيکي محدود است. درست است که داده هاي بيشتري در فضاي کمتر جاي مي گيرند ولي سرعت کلي درايو هنوز به سرعت چرخش صفحه آن وابسته است. سازندگان براي دستيابي به سرعت بيشتر به سراغ فناوري ديگري رفته اند: حافظه هاي فلش.

تولد SSD
 

احتمالاً اولين بار پس از آنکه حافظه هاي فلش به اندازه کافي قابل اطمينان و ارزان شدند بوده که کسي به ذهنش رسيده است که تا جايي که مي تواند تراشه هاي حافظه فلش را درون محفظه يک ديسک سخت قرار دهد، يک کنترل کننده به آن بيافزايد و در يک چشم به هم زدن از دست تمامي مشکلات مکانيکي درايوهاي ديسک سخت خلاص شود.
حافظه هاي فلش مورد استفاده در SSDها فلش هاي NAND نام دارند و بر دو گونه اند: سلول هاي تک سطحي (SLC) و سلول هاي چندسطحي (MLC). در SLC در هر سلول حافظه 1 بيت ذخيره مي شود و در MLC معمولاً 2 بيت. هزينه ساخت MLC به طور کلي از SLC کمتر است (در هر سلول دو برابر اطلاعات جاي مي گيرد، در نتيجه مي توان در همان تعداد سلول اطلاعات بيشتري ذخيره کرد). بيشتر SSDهاي موجود در بازار نيز از همين نوع هستند. مقدار هر سلول با آزمايش آن با ولتاژهاي مختلف بدست مي آيد. سلول SLC به ولتاژهاي خاصي واکنش نشان مي دهد.
براي يک سطح از اين ولتاژها مقدار 0 و براي سطح ديگر مقدار 1 در نظر گرفته مي شود. MLC به چهار سطح ولتاژ واکنش نشان مي دهد که به ترتيب نمايان گر00، 10، 01 و 11 هستند. به خاطر داشته باشيد که براي خواندن هرسلول MLC به تعداد چهار برابر آزمايش ولتاژ نياز داريد و اين مسأله زمان خواندن را افزايش مي دهد. با اين حال همين سرعت هم بسيار بيشتر از بالاترين سرعتي است که يک ديسک سخت مي تواند به آن دست يابد.
مسأله اينجاست که براي مقداردهي به سلول ها نيز به دو ولتاژ مختلف احتياج داريم. يک ولتاژ برنامه ريزي که مقدار سلول را صفر مي کند و يک ولتاژ پاک کننده که مقدار آن را به 1 تغيير مي دهد. اين دو ولتاژ بايد بالاتر از ولتاژهاي خواندن باشند زيرا بايد بتوانند الکترون ها را وادار کنند تا از يک گيت به گيت ديگر بروند. براي درک بهتر عملکرد گيت ها، سناريوي زير را تصور کنيد. فرض کنيد دو ظرف آب داريم که با يک لوله به هم متصل اند.
لوله داراي يک شير است و يکي از ظرف ها بالاتر از ديگري قرار دارد. ظرف بالاتر را از آب پر کنيد. فرض سيستم بر اين است که پر بودن ظرف بالايي به معني ذخيره 1 است. حال اگر شير را باز کنيد (که اصلاً کار سختي نيست)، آب از ظرف بالايي به ظرف پاييني مي ريزد (در اصطلاحات SLC اين کار را برنامه ريزي سيستم مي نامند). وضعيت جديد سيستم را صفر در نظر مي گيريم. اما براي بازگرداندن مقدار سيستم به 1 بايد چه کنيم: بايد کاري کنيم که آب به سمت بالا به ظرف بالايي سرازير شود و سپس شير را ببنديم که کار بسيار مشکلي است (در اصطلاحات SLC به اين کار پاک کردن مي گويند).
به طور خلاصه وقتي صحبت از سلول هاي NADA است. برنامه ريزي ساده و پاک کردن مشکل است.

خرابي ماده حالت جامد
 

علاوه بر اين وادار کردن الکترون ها به رفت و آمد مکرر در ماده زيرآيند، باعث خرابي ماده مي شود. در نهايت اين خرابي به حدي مي رسد که الکترون ها تقريباً به هر جايي که خودشان بخواهند رفت و آمد مي کنند، سلول خراب مي شود و ديگر نمي تواند يک وضعيت تعريف شده را ذخيره نمايد. اين فرآيند براي 100000SLC سيکل برنامه ريزي/پاک کردن طول مي کشد، اما باز هم يادآوري مي کنيم که SLC فقط دو وضعيت را ذخيره مي کند. در مورد MLC که چهار وضعيت ممکن را ذخيره مي کند اين ميزان به 10000 سيکل کاهش مي يابد.
در واقعيت برنامه ريزي و پاک کردن سلول ها به طور منفرد انجام نمي شود. برنامه ريزي و خواندن معمولاً در صفحات 4 کيلوبايتي و پاک کردن در بلوک هاي 128 صفحه اي (512 کيلوبايتي) صورت مي گيرد. اين شيوه کار مدار و کنترل کننده را بسيار آسان مي کند. عمل خواندن و نوشتن در سيستم هاي فايل نيز عموماً در بلوک هاي 4 کيلوبايتي انجام مي گيرد. با علم به اينکه پاک کردن بيش ا زبرنامه ريزي به سلول صدمه مي زند، در اين شيوه تعداد دفعات پاک کردن نسبت به برنامه ريزي کمتر است.
اما هنوز هم نکته اي وجود دارد. اگر خوب فکر کنيد متوجه خواهيد شد که تفاوت در تعداد خواندن و نوشتن به اين معني است که يک صفحه تنها يک بار قابل نوشتن خواهد بود. نوشتن يک صفحه مقدار تعدادي از بيت هاي آن را صفر مي کند و تنها راه براي بازگرداندن آنها به 1، پاک کردن آنها است.
بنابراين پيش از آنکه بتوانيد يک صفحه را دوباره بنويسيد بايد کل بلوک حاوي آن صفحه را پاک کنيد. در واقع اگر بخواهيم به طور مشخص تر بگوييم، بايد تمامي صفحات فعال درون بلوک (به غير صفحه اي که مي خواهيد آن را بازنويسي کنيد) را بخوانيد، کل بلوک را پاک کنيد و دوباره تمامي آنها در جاي خودشان بنويسيد و سپس نسخه جديد صفحه اي را که مي خواستيد بازنويسي کنيد، بنويسيد.
همانطور که مي توانيد تصور کنيد، اين فرآيند خواندن - پاک کردن - نوشتن از نوشتن اوليه يک صفحه بسيار زمان برتر است و از اين لحاظ با ديسک هاي سخت متداول قابل مقايسه است.

بازنويسي داده ها
 

پس زمان بازنويسي چه اتفاقي مي افتد؟ پاسخ اين است که صفحه اصلي برچسب نامعتبر مي خورد و نسخه جديد در صفحه ديگري ذخيره مي شود (و از به روزرساني تمامي پيوندها به محل داده نيز اطمينان حاصل مي شود).
براي به روزرساني مجدد نيز، صفحه برچسب نامعتبر مي خورد و داده جديد در يک صفحه خالي نوشته مي شود. مي توانيد اينگونه در نظر بگيريد که صفحه سه وضعيت دارد: خالي (پاک شده)، پر (حاوي داده) و نامعتبر (داده آن از رده خارج است و در دفعه بعدي که بلوک حاوي آن پاک مي شود، خالي خواهد شد).
شايد فکر کنيد اين روش از لحاظ کارآيي ذخيره داده ها، مضحک است ولي از اين جنبه به آن نگاه کنيد که يک بلوک در طول عمر خود مي تواند 10000 بار پاک شود. مشخص شده است که مزاياي استفاده از فلش NAND (سرعت، استحکام و بي صدايي) بر محدوديت 10000 بار نوشتن/ پاک کردن غلبه دارد. اين مسأله را در سطح کل درايو نگاه کنيد. بسياري از مردم هرگز کل فضاي درايوشان را مصرف نمي کنند و هميشه فضاي خالي بسياري بر روي آن وجود دارد. کنترل کننده مي تواند با بهره گيري از اين واقعيت، پيش از اقدام اساسي پاک کردن اولين بلوک، ابتدا تمامي فضاهاي خالي را پر کند.
اتفاقاً همين مسأله دليل سرعت بيشتر يک SSD نو در روزهاي اول استفاده نسبت به SSDهايي است که براي مدتي مورد استفاده قرار گرفته اند. درايو جديد صفحات خالي بسياري دارد و در نتيجه عمل نوشتن با سرعت کامل انجام مي شود. پس از مدتي که تمامي صفحات مورد استفاده قرار گرفت، برخي از نوشتن ها از طريق سيکل خواندن - پاک کردن - نوشتن انجام مي شود و سرعت کلي درايو به طور قابل توجهي کاهش مي يابد.
اما نکته ديگري هم در مورد کل داستان SSDها وجود دارد. کنترل کننده درايو چيزي از سيستم فايل نمي داند و اين کار وظيفه سيستم عامل است. سيستم عامل درايو را به صورت آرايه اي خطي از صفحات مي بيند که با انديس هاي صفحه يا LBA (آدرس بلوک منطقي) مشخص مي شوند. سپس بر اساس اين آرايه يک سيستم فايل سلسله مراتبي مي سازد که در آن هر فايل دنباله اي از صفحات (مثلاً آدرس 17، سپس 42 و پس از آن به ترتيب 167 و 23) و هر پوشه آرايه اي از محتويات فايل ها است که هر يک شامل نام فايل و اولين LBA مربوطه هستند. کنترل کننده مسئول حفظ رابطه درست ميان LBA و صفحه واقعي حافظه فلش در SSD است. به نظر فرآيند ساده اي است به جز اينکه سيستم عامل موقع پاک کردن، تنها يک برچسب پاک شده به صفحه مي زند و به همين دليل است که عمل پاک کردن برگشت پذير مي باشد، زيرا داده به لحاظ فيزيکي پاک نشده و هنوز روي درايو قرار دارد. اگر فايل فقط شامل 1 صفحه باشد برچسب نامعتبر نمي خورد و تا آنجا که به کنترل کننده مربوط مي شود، صفحه هنوز مورد استفاده است.
مدتي بعد سيستم عامل مي خواهد از صفحه اي که پاک کرده مجدداً استفاده کند. در اين مرحله است که کنترل کننده کار معمول خود را انجام داده، به صفحه برچسب نامعتبر مي زند و از يک صفحه خالي ديگر استفاده مي کند. اينجاست که TRIM وارد مي شود. سازندگان درايوهاي حالت جامد، مشکل فايل هاي پاک شده و وجود صفحات پاک شده و وجود صفحات پاک شده را تشخيص داده اند.
آنها يک API به نام TRIM ساختند که به درايو مي گويد فايلي پاک شده است و فلان و فلان LBA نامعتبراند و مي توان آنها را مجدداً استفاده کرد. سپس درايو مي تواند موقع عمليات پاک کردن به تمامي صفحات تحت تأثير برچسب نامعتبر بزند و در بلوک هاي مورد نظر عمليات خواندن - پاک کردن - بازنويسي را انجام دهد.
البته اين کار را نه هر مرتبه، بلکه تنها زماني که تعداد صفحات نامعتبر يک بلوک از يک آستانه بحراني گذشت، انجام خواهد داد.
نتيجه اين کار طولاني تر شدن عمليات پاک کردن است ولي کارهاي اضافه اي که اينجا انجام مي شوند، به افزايش سرعت نوشتن که براي کاربر مهم تر است، مي انجامند. در حال حاضر ويندوز 7 از TRIM پشتيباني مي کند اما Mac OS X تنها در مورد برخي از درايوهاي خود اينکار را انجام مي دهد.

جمع آوري زباله در زمان هاي بي کاري
 

گزينه ديگري که برخي از درايوهاي SSD از آن پشتياني مي کنند، جمع آوري زباله در زمان هاي بي کاري است. اين ويژگي به طور خلاصه به اين صورت عمل مي کند که وقتي درايو بي کار است يا فعاليت کمي دارد، بر روي بلوک هاي کثيف (بلوک هايي که صفحات نامعتبر آنها از حد معيني گذشته است). سيکل خواندن - پاک کردن - بازنويسي اجرا مي شود. خلاصه اينکه در زمان هاي بي کاري درايو تميز مي شود تا براي زماني که به صفحات خالي متعددي نياز داريد، آماده باشد.
گفته مي شود که MacBookهاي شرکت اپل (به غير از آنهايي که رسماً از TRIM پشتيباني مي کنند) به نوعي از اين سيستم بهره مي گيرند.
همان طور که ديديد SSDها به همان اندازه که سريع اند، جذاب هم هستند. قطعاً SSD بخريد ولي قبل از خريد مطمئن شويد که سيستم عامل تان ويندوز 7 است. در اين صورت مي توانيد مطمئن باشيد که بهترين استفاده را از درايوتان خواهيد کرد.

نوشته هاي موازي
 

حافظه فلش NAND مورد استفاده درSSDها در واقع نسبتاً کند هستند. درايوهاي USB هم از همين حافظه ها استفاده مي کنند و همه مي دانيم که مي توانند تا چه حد کند و سنگين شوند. پس چگونه است که توان عملياتي SSDها اينقدر بيشتر است.
پاسخ در موازي کاري است: درايوهاي حالت جامد داده ها را به کانال هاي مختلفي تقسيم مي کنند. سپس هر بار خواندن و نوشتن به طور همزمان در تمامي کانال ها صورت مي گيرد. فرضاً اگر SSD چهار کنترل کننده کانال داشته باشد، کنترل کننده ها يک صفحه چهار کيلوبايتي را به طور هم زمان و در تکه هاي 1 کيلوبايتي مي نويسند. در نتيجه توان عملياتي چهار برابر مي شود. توان عملياتي با 8 کنترل کننده، 8 برابر حالت ابتدايي خواهد بود.

يکپارچه سازي
 

درايوهاي ديسک سخت براي اينکه به حداکثر کارآيي ممکن برسند، به يکپارچه سازي نياز دارند. فرض کنيد داده اي را مي خوانيد که در سکتورهاي مجاور هم ذخيره شده است. در اين صورت هد بايد تنها يک بار در جاي خود قرار گيرد و سپس داده ها را به صورت يک جريان مستمر بخواند. اما اگر داده ها در صفحات متعددي پخش باشند، هد بايد براي خواندن هر صفحه تغيير مکان دهد. بنابراين براي هر صفحه زمان جستجو و تأخير چرخش نيز خواهيم داشت.
اين مسأله در مورد SSDها وجود ندارد. خواندن از صفحات مختلف دقيقاً به يک ميزان زمان مي برد. و زمان جستجو و تأخير چرخشي وجود ندارد. تکه تکه بودن فايل اهميتي ندارد و نيازي به يکپارچه سازي نيست.
به علاوه در صورت انجام يکپارچه سازي با تعداد باورنکردني از سيکل هاي خواندن - پاک کردن - بازنويسي مواجه خواهيد شد. در حقيقت عمر درايو SSDتان را نيز کوتاه خواهيد کرد. به همين دليل است که ويندوز 7 در صورت شناخت درايوهاي SSD به طور خودکار يکپارچه سازي را غير فعال مي کند.
منبع: نشريه بزرگراه رايانه، شماره ي 142