حافظه NVMe چیست؟
حافظه NVMe سرنام (Non-Volatile Memory Express) یک رابط بسیار سریع برای درایوهای حالت جامد (SSD) است که به طور قابل توجهی سرعت انتقال دادهها را افزایش میدهد. برخلاف رابطهای قدیمیتر مانند SATA، NVMe به طور مستقیم با پردازنده ارتباط برقرار میکند و از قابلیتهای موازیسازی و کاهش تاخیر بهره میبرد. این ویژگیها باعث شدهاند تا NVMe به گزینهای ایدهآل برای کاربردهایی تبدیل شود که به سرعت بسیار بالا نیاز دارند که از آن جمله باید به ویرایش ویدئوهای 4K، اجرای بازیهای سنگین، ذخیرهسازی کلان دادهها در سیستمهای ذخیرهسازی بزرگ اشاره کرد. حافظه NVMe با استفاده از پروتکل PCIe، پهنای باند بسیار بالاتری نسبت به SATA فراهم میکند و میتواند هزاران دستورالعمل ورودی/خروجی در ثانیه را پردازش کند. علاوه بر سرعت، NVMe مصرف انرژی کمتری دارد و در مقایسه با درایوهای HDD و SSDهای مبتنی بر اینترفیس SATA بسیار کمصدا است.
فرایند تکامل NVMe
در ابتدا، حافظههای حالت جامد از رابطهای ساتا استفاده میکردند که برای هارد دیسکها طراحی شده بودند. این رابطها با محدودیتهایی در سرعت و کارایی مواجه بودند و نمیتوانستند پتانسیل کامل حافظههای حالت جامد را به نمایش بگذارند. با افزایش تقاضا برای سرعت و کارایی بالاتر، نیاز به یک رابط جدید و کارآمدتر احساس شد. NVMe به عنوان پاسخی به این نیاز به وجود آمد. همانگونه که ابتدای مطلب اشاره کردیم، حافظه NVMe به طور مستقیم با پردازنده ارتباط برقرار میکند و از قابلیتهای موازیسازی و کاهش تاخیر بهره میبرد. با گذشت زمان، NVMe به سرعت تکامل یافته است. نسلهای جدید NVMe از سرعتهای بالاتر، قابلیتهای بیشتر و پشتیبانی از استانداردهای جدید بهره بردند. همچنین، با کاهش قیمت حافظههای حالت جامد NVMe، این فناوری به تدریج در حال فراگیر شدن در رایانههای شخصی، سرورها و دستگاههای ذخیرهسازی است. انتظار میرود NVMe به عنوان استاندارد اصلی برای ذخیرهسازی در دستگاههای مختلف مورد استفاده قرار گیرد.
منظور از NVMe چیست؟
برای درک بهتر این موضوع، NVMe را شبیه به یک بزرگراه پرسرعت و چندبانده تصور کنید که دادهها را با سرعت بسیار بالایی جابجا میکند. در مقابل، ساتا مانند یک جاده قدیمی و یکطرفه است که ظرفیت انتقال دادههای کمتری دارد. این تفاوت سرعت در کاربردهایی که به سرعت بسیار بالا نیاز دارند، همچون دسترسی سریع به مجموعههای بزرگی از دادهها یا تراکنشهای خواندنی و نوشتنی همزمان، بسیار مشهود است.
مزایای حافظه NVMe
این فناوری با ارائه مزایای مختلفی به استاندارد پایدار در صنعت ذخیرهسازی تبدیل شده است. اولین مورد سرعت فوقالعاده است. یکی از مهمترین مزایای حافظه NVMe، سرعت بسیار بالای آن است. این فناوری با استفاده از رابط PCIe و قابلیتهای موازیسازی، سرعت خواندن و نوشتن دادهها را به طور چشمگیری افزایش میدهد. مورد بعد کاهش تاخیر است. NVMe با کاهش زمان پاسخگویی به درخواستهای ورودی/خروجی، تاخیر را به حداقل میرساند. این ویژگی باعث میشود تا سیستم سریعتر و روانتر عمل کند. به طور مثال، هنگام بوت سیستم یا باز کردن برنامهها، تفاوت سرعت NVMe به وضوح احساس میشود. این در حالی است که NVMe به دلیل طراحی بهینه و عدم وجود قطعات متحرک، مصرف انرژی کمتری نسبت به درایوهای سنتی دارد که باعث کاهش گرما و افزایش طول عمر سیستم میشود. همچنین، به دلیل نداشتن قطعات مکانیکی، از قابلیت اطمینان بسیار بالایی برخوردار است. این درایوها در برابر ضربه و لرزش مقاومتر هستند و احتمال خرابی آنها کمتر است. یکی دیگر از ویژگیها و مزایای منحصر بهفرد NVMe قابلیت آن در رسیدگی به طیف گستردهای از عملیات ورودی/خروجی در ثانیه (IOPS) است. این ویژگی در کاربردهایی که به پردازش همزمان تعداد زیادی درخواست نیاز است، مانند پایگاههای داده و سرورها، بسیار مهم است. همچنین، NVMe از صفهای طولانیتری نسبت به ساتا پشتیبانی میکند که به معنای توانایی پردازش تعداد بیشتری درخواست به طور همزمان است. این ویژگی باعث میشود تا سیستم بتواند به شکل موثرتر به درخواستهای مختلف پاسخ دهد.
ساختار حافظه NVMe
در قلب NVMe، یک کنترلر قدرتمند قرار دارد که وظیفه مدیریت و پردازش درخواستهای ورودی/خروجی را بر عهده دارد. این کنترلر با استفاده از رابط PCIe به پردازنده متصل میشود و به این ترتیب پهنای باند بسیار بالایی برای انتقال دادهها فراهم میکند. برخلاف رابطهای قدیمیتر مانند ساتا که از یک صف فرمان خطی استفاده میکنند، NVMe از چند صف فرمان موازی پشتیبانی میکند. این صفها به کنترلر اجازه میدهند چند درخواست را به طور همزمان پردازش کند و تاخیر را به حداقل برساند. یکی دیگر از ویژگیهای مهم ساختار NVMe، استفاده از دستورات سبکوزن و کارآمد است. این دستورات به طور مستقیم با سختافزار SSD ارتباط برقرار میکنند و از پیچیدگیهای اضافی که در رابطهای قدیمیتر وجود داشت، جلوگیری میکنند. همچنین، NVMe از قابلیتهای پیشرفتهای مانند مدیریت انرژی، رمزنگاری و تصحیح خطا پشتیبانی میکند که باعث افزایش قابلیت اطمینان و امنیت دادهها میشود.
به طور کلی، ساختار NVMe به گونهای طراحی شده است که بتواند با نسلهای جدید SSDها و پردازندهها سازگاری داشته باشد. به طور مثال، NVMe قادر است از چند صف ورودی و خورجی تا 64K پشتیبانی کند. به این صورت که هر صف 64K ورودی دارد. این درست در نقطه مقابل پروتکلهای SAS و SATA قرار دارد که قادر به پشتیبانی از صفهای تکی هستند که هر یک به ترتیب دارای 254 amp و 32 ورودی هستند. در سویی دیگر، نرمافزار NVMe host قادر است از طریق NVMe controller تعداد صفهای مجاز را برای هر سیستم و حجم کاری ایجاد و پیکربندی کند. در نهایت، NVMe مشکلی از بابت پراکندگی و جمعآوری ورودیها و خروجی و به حداقل رساندن بار مضاعف پردازنده مرکزی در فرآیند انتقال دادهها و قابلیت تغییر اولویتبندی هماهنگ با نیازهای کاری ندارد.
عملکرد NVMe Commands به چه صورتی است؟
حافظه NVMe برای برقراری ارتباط با درایوها و کنترل آنها، دستورات خاصی را مورد استفاده قرار میدهد که مشهور به دستورات NVMe هستند. این دستورات به صورت بستههایی از اطلاعات شامل مانند نوع عملیات مورد نظر (خواندن، نوشتن، پاک کردن و غیره)، آدرس دادهها در درایو و سایر پارامترهای مربوطه هستند. این بستهها از طریق رابط PCIe به کنترلر NVMe ارسال میشوند و کنترلر نیز با انجام عملیات مورد نظر و ارسال پاسخ، به این دستورات پاسخ میدهد. مهمترین ویژگی دستورات NVMe، موازیسازی آنها است. به بیان دقیقتر، میتوان چند دستور را به طور همزمان به کنترلر ارسال کرد. این ویژگی به NVMe اجازه میدهد کارایی بسیار بالایی داشته باشد و بتواند حجم زیادی از دادهها را به سرعت پردازش کند. از دیگر ویژگیهای مهم دستورات NVMe میتوان به موارد زیر اشاره کرد:
- انعطافپذیری بالا: دستورات NVMe بسیار انعطافپذیر هستند و میتوان از آنها برای انجام طیف وسیعی از عملیات بر روی درایو استفاده کرد.
- کاهش سربار: دستورات NVMe نسبت به دستورات ساتا سبکتر و کارآمدتر هستند که باعث کاهش سربار پردازنده میشود.
- پشتیبانی از صفهای طولانی: NVMe از صفهای طولانیتری نسبت به ساتا پشتیبانی میکند که به معنای توانایی پردازش تعداد بیشتری درخواست به طور همزمان است.
به طور کلی، روش کار فناوری فوق به این شکل است که ابتدا میزبانی دستورات ورودی و خروجی صف (command queue) را مینویسد و مولفه doorbell سیگنال دستورات ورودی و خروجی را ثبت میکند. در ادامه، کنترلرگر NVMe صف دستورات ورودی و خروجی را انتخاب و اجرا میکند. هنگامی که صفها تکمیل شدند، با ایجاد یک وقفه برای میزبان ارسال میکند. میزبان، صفهای آماده ورودی و خروجی را ثبت و اجرا میکند. هنگامی که عملیات به اتمام رسید، ثبت door را حذف میکند به این معنا که کار تکمیل شده است. همانگونه که مشاهده میکنید، الگوی فوق در مقایسه با پروتکلهای SAS و SATA سرباره بسیار کمتری دارد.
تفاوت NVMe با SATA
NVMe و SATA دو فناوری هستند که برای اتصال درایوهای حالت جامد به مادربرد استفاده میشوند. هرچند هر دو اجازه میدهند تا اطلاعات را ذخیره و بازیابی کنید، اما تفاوتهای اساسی در عملکرد، سرعت و ساختار آنها وجود دارد که حافظه NVMe را به گزینهای بسیار سریعتر و کارآمدتر تبدیل کرده است.
NVMe یک رابط مدرن و پرسرعت است که به طور مستقیم با پردازنده ارتباط برقرار میکند و از اینترفیس PCIe برای تبادل اطلاعات استفاده میکند که پهنای باند بسیار بالاتری نسبت به ساتا فراهم میکند. NVMe با طراحی موازی خود میتواند هزاران دستورالعمل ورودی/خروجی در ثانیه را پردازش کند، در حالی که SATA به دلیل طراحی سریال و محدودیتهای پروتکل، سرعت کمتری دارد. SATA سرنام Serial ATA یک رابط قدیمیتر است که برای اتصال هارد دیسکها طراحی شده است. اگرچه ساتا برای حافظههای حالت جامد نیز قابل استفاده است، اما محدودیتهای آن باعث میشود تا نتواند از پتانسیل کامل حافظههای حالت جامد استفاده کند. SATA از یک صف فرمان خطی استفاده میکند که به این معنی است که دستورات به صورت ترتیبی پردازش میشوند. این طراحی باعث ایجاد تاخیر و کاهش کارایی میشود، خصوصا در هنگام پردازش تعداد زیادی درخواست به طور همزمان.
چرا حافظه NVMe بالاترین عملکرد را هنگام استفاده از چند پردازنده ارائه میدهد؟
یکی از دلایل اصلی عملکرد بالای NVMe در سیستمهای چند هستهای، قابلیت موازیسازی آن است. در حالی که SATA از یک صف فرمان خطی استفاده میکند، NVMe از چند صف فرمان موازی پشتیبانی میکند. بنابراین، پردازنده میتواند چند دستور را به طور همزمان به کنترلر NVMe ارسال کند و در نتیجه، عملیات ورودی/خروجی به صورت موازی انجام شوند. این ویژگی به ویژه در مواردی که پردازنده هستههای زیادی دارد، بسیار مفید است، زیرا هر هسته میتواند به طور مستقل به پردازش دستورات NVMe بپردازد. علاوه بر این، NVMe از دستورات سبکوزن و کارآمدی استفاده میکند که به طور مستقیم با سختافزار SSD ارتباط برقرار میکنند. این امر باعث کاهش سربار پردازنده و افزایش کارایی سیستم میشود. همچنین، NVMe از قابلیتهای پیشرفتهای مانند مدیریت انرژی، رمزنگاری و تصحیح خطا پشتیبانی میکند که باعث افزایش قابلیت اطمینان و امنیت دادهها میشود. از سوی دیگر، پردازندههای چند هستهای نیز به لطف معماری خود، توانایی پردازش همزمان چند کار را دارند. این ویژگی به همراه قابلیتهای موازیسازی NVMe، یک ترکیب قدرتمند ایجاد میکند که به سیستم اجازه میدهد به سرعت و همزمان به حجم عظیمی از دادهها دسترسی پیدا کند.
استانداردها و فرم فاکتور در NVMe
استاندارد NVMe یک پروتکل ارتباطی است که نحوه تعامل بین درایو NVMe و سیستم را تعریف میکند. این استاندارد به طور مداوم در حال توسعه است و نسخههای جدید آن از ویژگیها و قابلیتهای بیشتری پشتیبانی میکنند. استاندارد NVMe به دو بخش اصلی تقسیم میشود:
فیزیکی: این بخش به نحوه اتصال فیزیکی درایو NVMe به سیستم و انتقال دادهها میپردازد. رایجترین رابط فیزیکی برای NVMe، PCIe است که پهنای باند بسیار بالایی را فراهم میکند.
لایه پروتکل: این بخش به نحوه تعامل نرمافزاری بین سیستم و درایو NVMe میپردازد و دستورات و پاسخهای مورد استفاده در این ارتباط را تعریف میکند.
فرم فاکتور NVMe به شکل فیزیکی درایو NVMe اشاره دارد. فرم فاکتورهای مختلفی برای درایوهای NVMe وجود دارد که هر کدام برای کاربردهای خاصی مناسب هستند. برخی از رایجترین فرم فاکتورهای NVMe به شرح زیر هستند:
M.2: این فرم فاکتور کوچک و باریک است و به صورت مستقیم بر روی مادربرد نصب میشود. M.2 یکی از پر استفادهترین حافظههای حالت جامد است که در بسیاری از لپتاپها، کامپیوترهای رومیزی و سرورها استفاده میشود.
Add-in Card: این فرم فاکتور شبیه به کارتهای گرافیک است و به صورت جداگانه در اسلات PCIe مادربرد نصب میشود. درایوهای NVMe با فرم فاکتور Add-in Card معمولا ظرفیت و عملکرد بالاتری نسبت به مدلهای M.2 دارند.
U.2: این فرم فاکتور برای درایوهای NVMe با عملکرد بسیار بالا طراحی شده است و در سرورها و ایستگاههای کاری استفاده میشود. درایوهای U.2 از پهنای باند بالاتری نسبت به M.2 پشتیبانی میکنند.
انتخاب استاندارد و فرم فاکتور مناسب برای درایو NVMe به عوامل مختلفی مانند نوع سیستم، کاربرد مورد نظر، بودجه و نیازهای عملکردی بستگی دارد. برای مثال، اگر به دنبال یک درایو NVMe برای لپتاپ خود هستید، فرم فاکتور M.2 مناسبترین گزینه خواهد بود، اما اگر به دنبال یک درایو NVMe با عملکرد بسیار بالا برای سرور هستید، فرم فاکتور U.2 انتخاب بهتری خواهد بود.
در سالهای آتی، استانداردهای بیشتری در این زمینه منتشر شدهاند که از آن جمله باید به Zoned Standard و ZNS SSDها اشاره کرد. ZNS سرنام NVMe Zoned Namespace یک طرح فنی اولیه ارائه شده از سوی سازمان NVM Express است. این طرح اولیه، اجازه میدهد فرآیند انتقال دادهها از درایو برای میزبان با حجم بسیار زیادی انجام شود و زیرساختهای ذخیرهسازی بدون مشکل قادر به تبادل اطلاعات در مقیاسهای بالا باشند. در این حال، فضای نگهداری دادهها به نواحی (zone) مختلف تقسیم میشود. نوع پیشرفتهتر درایوهای NVMe مزایایی همچون افزایش راندمان با کاهش نوشتن دوار، ارتقا ظرفیت، کاهش هزینهها به دلیل کاهش اندازه SSD controller DRAM و افزایش سرعت را به همراه دارند.
همچنین، ذکر این نکته ضروری است که پروتکل NVMe تنها محدود به اتصال درایوهای فلش نیست و توسط پروتکل NVMe over Fabric نیز استفاده میشود. پروتکل مذکور اجازه میدهد، شبکهای با عملکرد بهینه را برای انتقال طیف گسترده و متنوعی از دادهها پیادهسازی کنید.
نویسنده: حمیدرضا تائبی