شاید بدانید که هارددیسک کندترین قطعه در کامپیوترهای امروزیست. در جهانی که پردازنده ها، حافظه های رم و کارتهای گرافیکی به سرعت پیشرفت می کنند و داده ها را با سرعتهای نجومی پردازش و منتقل می کنند، هارددیسک های مکانیکی را که با چرخش دیسکهای مغناطیسی داده ها را می خوانند، باید یک فاجعه به حساب آورد.
به گفته شرکت اینتل راندمان CPU ها (پردازنده های اصلی کامپیوتر) نسبت به 13 سال پیش 175 برابر افزایش پیدا کرده در صورتی که سرعت هارددیسک ها در همین مدت تنها 1.3 برابر بیشتر شده است. آقای کیشر راو مدیر خط تولید SSD های شرکت اینتل می گوید:” این امر موجب می شود که گلوگاه عظیمی برای PC و کاربر ایجاد شود. شما می توانید کندی آن را با ساعت شنی مقایسه کنید و همچنان منتظر باشید تا کارش به اتمام برسد، گلوگاه I/O (ورود و خرج داده ها) در حال کند کردن سیستمهاست.”
البته سازندگان سیستم عامل راهکارهایی را برای کم کردن تاثیر کندی سرعت هارددیسک ها بر راندمان کلی سیستم پیاده سازی کرده اند که احتمال دارد با آنها آشنایی داشته باشید.تکنیک هایی مثل Prefetch که با ویندوز XP تکامل پیدا کرد و ReadyBoost و Superfetch که با ویندوز ویستا و 7 معرفی شدند برای غلبه بر محدودیتهای گفته شده طراحی شدند اما هیچ کدام راهکار نهایی محسوب نمی شوند.
با ذخیره کردن داده ها بر روی تراشه های حافظه بجای دیسک های مغناطیسی، این درایوها پتانسیل ارایه دادن سرعتهای خیلی بیشتری هنگام عملیات خواندن و نوشتن فایل ها را دارند در عین اینکه مصرف کمتر و طول عمر طولانی تری هم نسبت به دیسکهای مکانیکی دارند.
در بخش اول این مقاله سعی می کنیم نحوه کارکرد و خصوصیات فن آوری نوظهور SSD ها را با هم بررسی کنیم. در بخش دوم به سیر تکامل آنها، انواع مدلها، لزوم خرید آن برای کاربران مختلف و ملاکهایی که در هنگام خرید باید در نظر بگیریم می پردازیم.
مشکلات ساختاری HDD ها,هارددیسک ها داده ها را روی پلاترها (دیسک های گردان مغناطیسی) ذخیره می کنند; پلاترها می چرخند در حالی که یک بازوی هد برای عملیات خواندن/نوشتن بر روی سطح پلاترها جابجا می شود و داده ها را درحالی که پلاتر با سرعت در حال چرخش است می خواند یا می نویسد. قطر پلاتر هم در سطح بیرونی آن (اگر پلاتر را یک دایره فرض کنیم) بیشتر است بنابراین در سرعت چرخشی یکسان، هدها می توانند محدوده بیشتری را در سطح بیرونی (یا همان محیط دایره) نسبت به بخشهای نزدیک به محور پلاتر پوشش دهند.
نتیجه این می شود که سرعت انتقال داده ها در سکتورهای (بخش ها) بیرونی پلاتر بیشتر از بخشهای درونیست.بهمین خاطر سیستم های عامل سعی می کنند تا جای ممکن داده ها را ابتدا در بخش های بیرونی پلاتر بنویسند،اما بهرحال ظرفیت محدود هست و هر چه ظرفیت بیشتری از هارد پر می شود داده ها در قسمتهای درونی هم نوشته می شوند که سرعت خواندن و نوشتنشان خیلی کمتر از داده هایی است که بلافاصله بعد از خرید هارد به آن منتقل کرده اید. (برنامه ی Defrag هم از همین واقعیت برای تسریع و تقدم دادن فایلهایی که بیشتر خوانده می شوند استفاده می کند و داده های با اولویت بیشتر را به قسمتهای بیرونی پلاتر منتقل می کند تا سریعتر خوانده شوند و فایلهای با پراکندگی زیاد و تکه تکه شده را هم به یکدیگر می چسباند)
اگر هارددیسکتان را با برنامه HD Tach آزمایش کرده باشید نموداری مثل این را می بینید:
مشخص است که سرعت خواندن اطلاعات همزمان با پر شدن ظرفیت (یا نوشتن فایلها در سطح درونی دیسک) تا حدود 50 درصد کاهش پیدا می کند.
همچنین Fragmentation (گسیختگی و پراکندگی قسمتهای مختلف یک فایل روی دیسک) هم عامل دیگریست که راندمان هارددیسک ها را تضعیف می کند.
بهرحال SSD ها مشکلات اینچنینی ندارند.داده ها در Flash (نوعی حافظه براساس تراشه هایی با قابلیت نگه داری اطلاعات بصورت الکتریکی و غیر مکانیکی) ذخیره می شوند، پس مهم نیست که داده ها کجا ذخیره می شوند، هر کجا که باشند بطور مستقیم و با سرعت یکسان خوانده می شوند و برای دسترسی تصادفی هم مشکلی ندارند.
ساختار یک هارد SSD
SSD ها (Solid State Drive) بر اساس حافظه های NAND-Flash ساخته می شوند:
این عکس ساختار یک NAND-Flash را نشان می دهد; یک ترانزیستور به ازای هر سلول(واحد ذخیره کننده اطلاعات در تراشه های Flash) لازم است.هر سلول هم می تواند یک یا دو بیت از داده ها را ذخیره کند.اگر یک بیت را ذخیره کند به آن (SLC (Single-Level Cell یا فلش با سلول تک مرحله ای و اگر دو بیت اطلاعات را ذخیره کند به آن (MLC (Multi-Level Cell یا فلش با سلول چند مرحله ای می گویند:
البته هر دو نوع این فلش ها به روش یکسانی تولید می شوند; در واقع چیزی وجود ندارد که MLC را ازSLC متمایز کند، فقط شیوه چگونگی ذخیره داده ها و خوانده شدنشان از سلولهای فلش تفاوت می کند. بخاطر نحوه خوانده شدن اطلاعات از سلولهای نوع MLC ، خواندن اطلاعات از آنها 3 برابر طولانی تر از عملیات خواندن از سلولهای SLC طول می کشد. همانطور که در نمودار بالا می توان دید در سلول 2 بیتی می توان 2 به توان 2 یعنی 4 حالت (01,11,10,00) اطلاعات را ذخیره کرد. از طرف دیگر بهمین خاطر هم می توان دو برابر اطلاعات بیشتر را در سلولهای MLC در همان ظرفیت و با همان هزینه ذخیره کرد. بهرحال با وجود سرعت خواندن کمتر در MLC ها،سرعت آنها در مقایسه با هارددیسک های معمولی بسیار بالاتر است و برای ساختن SSD های سیستم های PC معمولی از آنها استفاده می کنند و SLC ها را هم در ساخت SSD برای سرورهای قدرتمند و سطح بالا بکار می برند.
از طرفی این نوع حافظه ها چرخه های نوشتن (Write Cycles) محدودی دارند، این مقدار برای SLC ها از 100،000 تا حدود یک میلیون بار و برای MLC ها بین 10،000 تا 100،000 متغیر است. برای همین این درایوها طوری طراحی می شوند که نوشتن فایلها رو بر روی کل سلولهای فلش توزیع کند.
همچنین دوره عمر یک SSD معمولی با MTBF (Mean Time Before Failure) مشخص می شود که معمولا بین 1،500،000 تا 2،000،000 ساعت می باشد که البته عددی تخمینی محسوب می شود و بیشتر از طرف سازنده برای محصول تبلیغ می شود.این رقم با پیشرفت و بهبود کیفیت پروسه تولید حافظه های فلش بطور مداوم افزایش می یابد.
بنا بر تعریف گروهی از سلولها را یک Page یا صفحه می نامند،کوچکترین واحدی که در SSD ها قابل خواندن/نوشتن هستند، 4KB ظرفیت دارند و استاندارد تمام SSD ها هم محسوب می شوند.
Page ها در کنار هم یک Block را تشکیل می دهند و شامل 128 عدد Page می شوند،یک بلاک کوچکترین واحدیست که می توان از روی یک NAND Flash پاک کرد، در واقع در عین این که می توان یک Page را خواند یا نوشت فقط می توان یک بلاک (شامل 128 عدد Page) را در واحد زمان از روی آنها پاک کرد و با محاسبه ظرفیت Page ها می توان گفت که حداقل اندازه عملیات نوشتن 4 کیلوبایت و حداقل اندازه عملیات پاک کردن 512 کیلوبایت هست، این مطلب مهمی هست که هم باعث کندتر شدن عمل پاک کردن نسبت به عمل نوشتن در SSD ها می شود و هم باعث ایجاد محدودیتی می شود که در ادامه مقاله به تفضیل به آن خواهیم پرداخت.
,خواندن داده ها,خواندن داده ها,از بررسی آنچه که ساختار تراشه های Nand-Flash را تشکیل می دهد یک ایده ممکن است به ذهن خطور کند:Parallelism (یا موازی سازی)
در واقع شما می توانید با قراردادن تعدادی از تراشه های Flash در یک بسته بصورت موازی از آنها بخوانید و روی آنها بنویسید (همان ایده ای که در تکنیک های Raid برای هاردهای معمولی استفاده می شود) . به همین خاطر هم بیشتر SSD های امروزی از کنترل کننده های 4 تا 10 کاناله برخوردار هستند (هر کانال برای یک تراشه یا IC) درنتیجه حداقل در تئوری سرعت خواندن داده ها به تناسب کانالها چند برابر می شود.,نوشتن داده ها,نوشتن داده ها,سیستم عامل های امروزی از طریق Logical Block Addressing (آدرس دهی بلاک منطقی) یا به اختصار LBA با هارددیسکها ارتباط برقرار می کنند. وقتی شما فایلی را ذخیره می کنید، ویندوز خیلی ساده یک دستور نوشتن را برای فایل شما در یک LBA خاص صادر می کند، مثل LBA 15 .
سیستم عامل شما می داند که کدام LBA ها آزادند و کدامیک اشغال شده اند. وقتی یک فایل را پاک می کنید، LBA هایی که به آن فایل روی هارددیسک اشاره می کنند در لیست LBA های آزاد قرار می گیرند. داده هایی که شما پاک کرده اید واقعا پاک نشده اند و تا زمانی که یک داده جدید روی آنها نوشته نشود از بین نمی روند.
باور داشته باشید یا نه، SSD ها هم همینطور کار می کنند. بخش ترجمه ای در کنترل کننده فلش وجود دارد که LBA ها را به Page ها در درایو تبدیل می کند. (همانطور که گفته شد کوچکترین واحد خواندن و نوشتن در SSD ها یک Page هست) جدول زیر توضیح می دهد که بسته به عملیات سیستم عامل چه اتفاقی برای داده ها در SSD رخ می دهد:
وقتی یک فایل را در ویندوز پاک می کنید، هیچ واکنشی از هارددیسک یا SSD نمی بینید. مگر تا زمانی گه بخواهید یک سکتور (روی هارددیسک) یا یک Page (روی SSD) را که داده هایش از بین رفته بازنویسی کنید . در واقع برنامه های بازیابی اطلاعات هم از همین واقعیت برای کمک به برگرداندن فایلهای پاک شده استفاده می کنند.
وجه تمایز بین HDD و SSD زمانیست که عملیات بازنویسی فایل رخ می دهد. در حالی که HDD بسادگی می تواند داده های جدید را روی همان سکتور قبلی بنویسد، یک SSD سعی می کند یک Page جدید را به داده های جدید اختصاص دهد و در صورت عدم وجود یک Page خالی آزاد، همان Page استفاده شده قبلی را باید بازنویسی کند.
,شناخت مشکل کم شدن تدریجی راندمان SSD ها,شناخت مشکل کم شدن تدریجی راندمان SSD ها,اجازه بدهید به مشکلی در عمل رخ میدهد نگاه کنیم. یک سناریوی خیالی را تصور کنید; فرض کنید که تصمیم گرفته ایم که یک SSD بسازیم. ما تعدادی NAND-Flash تهیه می کنیم و یک کنترلر هم برای آنها می سازیم. جدول زیر مشخصات درایو ما را نشان می دهد:
تبلیغات می کنیم و سرانجام SSD خود را به مشتری می فروشیم. مشتری ما ابتدا یک فایل متنی Text را روی SSD جدیدش می نویسد. درخواست نوشتن به کنترلر می رسد، جایی که مشخص می شود تمام Page ها خالی هستند، بنابراین اولین Page را به این فایل متنی اختصاص می دهد.
این SSD ماست.مربع های زرد همان صفحات خالی هستند
کاربر ما می رود و یک فایل عکس 8 کیلوبایتی JPEG را ذخیره می کند. درخواست دوباره به کنترلر SSD می رسد و دو تا Page بعدی را پر می کند.
عکس 8 کیلوبایتی دو Page دیگر را اشغال می کند
ویندوز گزارش می دهد که حالا 60 درصد از ظرفیت SSD ما پر شده است. سه تا از پنج عدد Page ما گرفته شده و تنها دو تای دیگر باقی مانده است.
حالا کاربر ما می رود و فایل متنی Text را که اول نوشته بود پاک می کند، اما درخواست حتی به کنترلر هم ارسال نمی شود (همانطور که گفته شد برای عملیات پاک کردن هیچ کاری در هارددیسک ها و SSD ها انجام نمی شود)
، تا آنجایی که به کنترلر مربوط هست ما الان 3 تا Page معتبر داریم. (یکی بخاطر پاک شدن فایل متنی و دو تا هم Page خالی)
و سرانجام کاربر تصمیم می گیرد یک فایل 12 کیلوبایتی JPEG ذخیره کند، که در اصل به سه تا Page 4 کیلوبایتی احتیاج دارد. ویندوز می داند که اولین LBA، که فایل متنی 4 کیلوبایتی ما روی آن نوشته شده بود و الان در لیست آزاد یا معتبر قرار دارد، می تواند بازنویسی شود و بنابراین به کنترلر SSD می گوید که اولین LBA را بازنویسی کند و 8 کیلوبایت باقیمانده از فایل را هم در دوتا Page خالی باقیمانده ذخیره کند.
حالا وقتی که این درخواست به کنترلر SSD ما می رسد مشکلی پیش می آید. درخواست نوشتن فایل جدید به 3 تا Page احتیاج دارد اما فقط 2 تا Page خالی داریم . بخاطر بیاورید که ویندوز می داند که ما 12 کیلوبایت خالی داریم (با احتساب Page اولی که قبلا فایل Text در آن بود) ، اما درایو ما در واقع 8 کیلوبایت خالی و 4 کیلوبایت غیر معتبر و آماده برای بازنویسی دارد که باید آن Page را پاک کنیم تا عملیات نوشتن با موفقیت انجام شود.
یک مشکل، ما تعداد کافی Page خالی نداریم
همانطور که از تعاریف ابتدایی فلش ها بخاطر دارید، ما نمی توانیم فقط یک Page را پاک کنیم، چون کوچکترین واحد قابل پاک کردن یک Block (که در SSD فرضی ما برابر 20 کیلوبایت یا 5 تا Page هست) هست. بنابراین برای خلاص شدن از شر Page نامعتبر که باید پاک شود باید تمام داده ها را پاک کنیم و دوباره آنها را بنویسیم.
برای انجام اینکار ابتدا باید کل Block را به جایی در حافظه اصلی بخوانیم; اگر کنترلر خوبی داشته باشیم این داده ها به حافظه Cache خود کنترلر منتقل می شوند (مرحله 1 و 2 )، بعد از خواندن کل داده ها می توانیم آنها را در حافظه ویرایش کنیم و صفحه ی نامعتبر (مربوط به فایل متنی سابق) را با داده های عکس جدید جایگزین کنیم (مرحله 3 و 4 ). حالا ما احتیاج داریم دوباره داده ها را از حافظه Cache روی فلش بنویسیم، بنابراین حالا می توانیم کل یک Block را پاک کنیم و داده های جدید را روی فلش منتقل کنیم (مرحله 5 ).
حالا کل عملیات رخ داده را مرور می کنیم. برای نوشتن عکس 12 کیلوبایتی آخری باید ابتدا 12 کیلوبایت را بخوانیم و دوباره 20 کیلوبایت را بنویسیم.
با احتساب سرعتهای SSD فرضی، نوشتن 12 کیلوبایت باید 12 ثانیه طول می کشید اما با لحاظ کردن آنچه که در عمل صورت گرفت و 12 کیلوبایت خوانده و 20 کیلوبایت نوشته شد، در اصل کل عملیات 26 ثانیه طول کشید.
از دید کاربر نهایی عملیات نوشتن بجای سرعت 1KB/s به سرعت 0.46KB/s تنزل پیدا کرده است. این مشکلی هست که بمرور زمان گریبان گیر تمام SSD ها می شود و البته راه حل مهمی بنام TRIM برای رفع مشکل پیشنهاد شده که در ادامه به آن هم می پردازیم.
TRIM: دستوری که به نجات SSD ها آمد,TRIM: دستوری که به نجات SSD ها آمد,همانطور که دیدید ما به مشکلاتی برخورد کردیم که در مرحله اول بخاطر این بود که درایو SSD ما از پاک شدن فایلها خبردار نمی شد و فقط موقع عملیات بازنویسی متوجه بی ارزش شدن داده های قبلی می شد. بنابراین وقتی می خواستیم یک فایل جدید را جایگزین فایل پاک شده بکنیم، راندمان مورد انتظار از درایو مان را از دست می دادیم.
حالا فکر می کنید که چه اتفاقی می افتد اگر سیستم عامل به SSD بگوید که Page های غیر معتبر (پاک شده) را از بین ببرد قبل از اینکه بخواهد آنها را بازنویسی کند؟
دستور TRIM در وهله اول به سیستم عامل و درایو مناسب برای اجرا شدن نیاز دارد. (ویندوز 7 و Firmware درایو که حتما باید از این دستور پشتیبانی کند) ،ابتدا دستور TRIM از سیستم عامل به درایو ارسال می شود، اگر درایو در جواب ارسال دستور TRIM مقدار صفر را برگرداند، سیستم عامل می فهمد که درایو یک SSD هست و امکاناتی مثل Defrag را که برای SSD ها ضرورتی ندارند را از کار می اندازد.
وقتی شما یک فایل را پاک می کنید، سیستم عامل یک دستور TRIM را بهمراه LBA هایی که شامل فایل پاک شده می شوند به کنترلر SSD می فرستد. سپس کنترلر Block مورد نظر را به داخل حافظه Cache کپی می کند، Page های پاک شده را از بین می برد و سرانجام Block جدید را با Page های تازه خالی شده روی درایو می نویسد.
حالا وقتی شما می خواهید یک فایل جدید را روی Block یی که از قبل Page هایش خالی شده بنویسید همان سرعتی را می بینید که باید داشته باشد. حالا مثال قبلی ما را در وضعیتی ببینید که سیستم عامل و درایو از TRIM پشتیبانی می کنند:
دستور TRIM این Block را مجبور می کند که قبل از نوشته شدن نهایی پاک شود. این کار مقداری OverHead ایجاد می کند اما این امر بعد از عمل پاک کردن فایل و نه در هنگام نوشتن های ضروری انجام می شود.
حالا وقتی می خواهیم آن فایل عکس 12 کیلوبایتی را بنویسیم، عمل نوشتن با تمام سرعت انجام می شود، دقیقا مثل زمانی که هنوز هیچ داده ای روی آنها نوشته نشده بود.
ابزارهای جانبی برای بازگرداندن سقف سرعت درایو SSD,ابزارهای جانبی برای بازگرداندن سقف سرعت درایو SSD,برای رفع مشکل افت سرعت در درایوها یا ویندوزهایی که از TRIM پشتیبانی نمی کنند هم راههایی وجود دارد. برای مثال اینتل برنامه ای بنام HDD ERASE برای درایوهای X25-M نسل اول ارائه کرده بود. این برنامه تمام Page ها را به حالت اولیه بر می گرداند، البته همزمان شما تمام اطلاعات روی درایو را هم از دست خواهید داد اما سرعت درایو شما به حالت طبیعی باز خواهد گشت،این برنامه بر خلاف TRIM بصورت خودکار نیست و کاربر خودش باید آن را هر چند وقت یکبار اجرا کند.
در اینجا ما ساختار، نحوه ی کار و راههای بهبود سرعت SSD ها را با هم مرور کردیم.در بخش بعدی جزییات بیشتری راجع به نسل جدید SSD ها، انواع کنترلرها، مدلها و همچنین مشخصاتی که هنگام خرید باید بدنبال آنها باشیم را مرور می کنیم.
نکات مهم:
*سرعت SSD ها بسیار بیشتر از سریعترین HDD های امروزیست.
*سرعت HDD ها همزمان با پرشدن درایو کمتر می شود.
*سرعت دسترسی به تمام بخشهای SSD یکسان است.
*درایوهای SSD معمول از مدل MLC تبعیت می کنند.
*دستور TRIM برای جلوگیری از کند شدن SSD ها ضروریست.