آموزشآموزش‌های تکی

آموزش تکی، حدود ۲۸ دقیقه خواندن

NVMe چیه

جواب کوتاه

NVMe (کوتاه‌شده‌ی Non-Volatile Memory Express، یعنی «راه سریع برای حافظه‌ای که با رفتن برق پاک نمی‌شه») یه زبان و راه ارتباطیه که SSD رو مستقیم به جاده‌ی پرسرعت PCIe کامپیوتر وصل می‌کنه. از اول برای حافظه‌ی فلش ساخته شده، نه برای هارد چرخان؛ برای همین هزاران صف موازی داره و SSD با NVMe چند برابر سریع‌تر از SSD با SATA کار می‌کنه.

اسم

شاید توی تبلیغ یه سرور یا هاست دیدید «دیسک NVMe»، یا موقع خرید SSD پرسیدن «NVMe باشه یا SATA؟». NVMe کوتاه‌شده‌ی Non-Volatile Memory Express هست. «حافظه‌ی غیرفرار» یعنی حافظه‌ای که با رفتن برق پاک نمی‌شه، مثل همون فلش داخل SSD. «اکسپرس» هم یعنی سریع.

اول یه نکته‌ی مهم: NVMe یه جنس حافظه نیست؛ یه زبان و یه راه ارتباطه. سلول‌های داخلش همون سلول‌های فلش SSD هستن. فرق توی اینه که این سلول‌ها از چه راهی و با چه زبونی با کامپیوتر حرف می‌زنن.

چرا ساخته شد

SSDهای اول، برای اینکه راحت جای هارد دیسک بشینن، همون کابل و زبان هارد رو استفاده کردن: کابل SATA، و زبانی به اسم AHCI، کوتاه‌شده‌ی Advanced Host Controller Interface. این زبان سال‌ها پیش برای هارد دیسک چرخان طراحی شده بود؛ دستگاهی که هر کار پراکنده‌ش چند میلی‌ثانیه طول می‌کشید.

برای هارد چرخان، یه صف کوچیک کافی بود؛ هارد که نمی‌تونست سریع‌تر جواب بده. ولی SSD هزار برابر سریع‌تر بود، و این صف کوچیک و این کابل، خودشون شدن گلوگاه. مثل اینکه یه ماشین مسابقه رو توی یه کوچه‌ی باریک یه‌طرفه بندازید. پس یه زبان تازه لازم بود که از اول برای فلش ساخته بشه؛ نتیجه‌ش NVMe شد.

دو تا جاده

مثلا فرض کنید یه شهر دو تا راه ورودی داره. یکی یه جاده‌ی قدیمی یه‌خطه، با یه باجه‌ی عوارضی که ماشین‌ها جلوش صف می‌کشن. یکی یه اتوبان چندخطه، با هزاران باجه‌ی عوارضی که همه با هم کار می‌کنن.

جاده‌ی قدیمی، SATA با زبان AHCI‌ئه. اتوبان، PCIe با زبان NVMe. ماشین‌ها همون فرمان‌های خوندن و نوشتنن. روی جاده‌ی قدیمی، هر چقدر هم ماشین‌ها سریع باشن، صف باجه سرعت رو تعیین می‌کنه. روی اتوبان، ماشین‌ها دیگه منتظر هم نمی‌مونن.

PCIe و خط‌هاش

PCIe، کوتاه‌شده‌ی Peripheral Component Interconnect Express، جاده‌ی اصلی داخل کامپیوتره که قطعه‌های سریع رو به پردازنده وصل می‌کنه؛ کارت گرافیک، کارت شبکه، و حالا SSD. این جاده از «خط» (lane) ساخته شده. هر خط یه مسیر جدای رفت و برگشته.

دستگاه‌ها با یه تعداد خط وصل می‌شن: ۱، ۲، ۴، ۸ یا ۱۶. کارت گرافیک معمولا ۱۶ خط می‌گیره. SSDهای NVMe معمولا ۴ خط. پس وقتی می‌نویسن «PCIe x4»، یعنی چهار تا خط موازی؛ چهار برابر یه خط.

نسل‌ها

PCIe هم نسل داره، و هر نسل سرعت هر خط رو تقریبا دو برابر کرده:

PCIeهر خط در ثانیهچهار خط (SSD معمولی) در ثانیه
نسل ۳حدود ۱ گیگابایتحدود ۳٫۵ گیگابایت
نسل ۴حدود ۲ گیگابایتحدود ۷ گیگابایت
نسل ۵حدود ۴ گیگابایتحدود ۱۴ گیگابایت

پس یه SSD NVMe نسل ۴ با چهار خط، می‌تونه حدود ۷ گیگابایت در ثانیه بخونه؛ بیش از دوازده برابر سقف SATA. نسل‌ها با هم جورن: یه SSD نسل ۴ روی یه کامپیوتر نسل ۳ کار می‌کنه، فقط با سرعت نسل ۳. نسل ۶ هم تعریف شده و کم‌کم میاد.

یه نکته: این عددها سقف جاده‌ست. اینکه خود SSD چقدر از این سقف رو پر کنه، به سلول‌ها و کنترلرش بستگی داره.

صف‌ها

مهم‌ترین فرق NVMe، صف‌هاشه. زبان قدیمی AHCI یه صف داشت با حداکثر ۳۲ فرمان. یعنی حداکثر ۳۲ تا خوندن یا نوشتن می‌تونستن هم‌زمان منتظر باشن.

AHCI (برای SATA): یه صف، حداکثر ۳۲ فرمان.
NVMe: تا ۶۵ هزار صف، هر کدوم تا ۶۵ هزار فرمان.

NVMe تا ۶۵ هزار صف داره، که هر کدوم تا ۶۵ هزار فرمان رو نگه می‌داره. توی عمل، کامپیوتر معمولا برای هر هسته‌ی پردازنده یه صف جدا می‌سازه. پس هسته‌ها مجبور نیستن برای فرستادن کارشون منتظر همدیگه بمونن؛ هر کدوم صف خودش رو داره. روی سروری که ده‌ها هسته و هزاران درخواست هم‌زمان داره، این فرق خیلی بزرگه.

سفر یه درخواست

بیاید یه خوندن رو از اول تا آخر دنبال کنیم، تا ببینیم این صف‌ها دقیقا چی کار می‌کنن. فرض کنید برنامه‌ای که سایت شما رو می‌سازه، یه تیکه از دیتابیس رو لازم داره.

  1. سیستم‌عامل یه فرمان کوچیک می‌نویسه، «از این‌جا این‌قدر بخون و بذار توی این تیکه از رم»، و می‌ذارتش ته صف فرستادن (Submission Queue، یعنی «صف فرستادن») همون هسته‌ای که کار رو خواسته.
  2. بعد یه زنگ کوچیک رو می‌زنه؛ یعنی توی یه خونه‌ی مخصوص روی SSD می‌نویسه که «یه فرمان تازه اومد». به این خونه می‌گن doorbell، یعنی «زنگ در».
  3. کنترلر SSD خودش فرمان رو از رم برمی‌داره، از سلول‌ها می‌خونه و داده رو مستقیم توی رم می‌ذاره، بی اینکه پردازنده دست به داده بزنه.
  4. بعد یه خط توی صف جواب (Completion Queue، یعنی «صف کار تموم‌شده») می‌نویسه و به پردازنده خبر می‌ده.
  5. سیستم‌عامل جواب رو برمی‌داره و به برنامه می‌گه داده آماده‌ست.

همه‌ی این کار برای هر هسته جدا انجام می‌شه، و هیچ هسته‌ای لازم نیست قفل یه صف مشترک رو بگیره. توی راه قدیمی، همه از یه صف رد می‌شدن و هر بار باید نوبت می‌گرفتن؛ مثل اینکه ده نفر بخوان با یه خودکار فرم پر کنن.

کار کمتر برای پردازنده

توی راه قدیمی، هر خوندن از دیسک از چند تا لایه‌ی واسطه رد می‌شد، و پردازنده برای هر کدوم یه کم کار می‌کرد. NVMe خیلی ساده‌تره: فرمان مستقیم توی صف می‌ره، SSD برش می‌داره، و وقتی تموم شد، توی یه صف جواب می‌ذاره.

نتیجه اینه که برای هر خوندن، پردازنده کار خیلی کمتری می‌کنه. یعنی پردازنده وقت بیشتری برای کار اصلی، مثلا ساختن صفحه‌ی سایت، داره. مثل اینکه به‌جای پر کردن سه تا فرم برای هر نامه، یه نامه رو مستقیم توی صندوق بندازید.

تاخیر و IOPS

دو تا عدد NVMe رو از SATA جدا می‌کنه. اولی تاخیر: زمان بین خواستن یه تیکه‌ی کوچیک و رسیدنش. روی NVMe این زمان معمولا چند ده میکروثانیه‌ست، از SSDهای SATA کمتر.

دومی IOPS، یعنی تعداد خوندن و نوشتن کوچیک در هر ثانیه. یه SSD با SATA معمولا حدود ده‌ها هزار IOPS داره و سقفش رو صف ۳۲تایی می‌بنده. یه SSD خوب با NVMe صدها هزار، و SSDهای سرور حتی بیش از یه میلیون. برای دیتابیس، که هزاران سوال کوچیک با هم می‌پرسه، این عدد از هر عدد دیگه‌ای مهم‌تره.

عمق صف

یه کلمه‌ی دیگه که توی هر تست SSD می‌بینید، عمق صف‌ئه؛ Queue Depth، یعنی «چند تا فرمان هم‌زمان توی صف منتظرن». وقتی می‌نویسن QD1، یعنی فقط یه فرمان، و برنامه منتظره جوابش بیاد تا بعدی رو بفرسته. QD32 یعنی ۳۲ تا فرمان با هم.

اینجا یه نکته‌ی مهم هست که خیلی‌ها نمی‌دونن. NVMe وقتی صف پره، معجزه می‌کنه؛ چون کنترلر می‌تونه هم‌زمان از ده‌ها تراشه‌ی فلش بخونه. ولی توی کار روزمره‌ی یه کامپیوتر، بیشتر وقت‌ها صف کوتاهه، یکی دو تا. با صف کوتاه، فرق NVMe و SATA خیلی کمتر از عددهای تبلیغه، چون اونجا تاخیر خود سلول فلش تعیین‌کننده‌ست، نه پهنای جاده.

روی سرور شلوغ قضیه برعکسه. صدها کاربر هم‌زمان صفحه می‌خوان و دیتابیس ده‌ها سوال با هم می‌پرسه، پس صف‌ها پر می‌شن. برای همین NVMe روی سرور خیلی بیشتر از کامپیوتر خونه به چشم میاد.

عددهای روی جعبه

روی جعبه‌ی یه SSD NVMe معمولا دو تا عدد بزرگ می‌بینید، مثلا «خوندن ۷۰۰۰ مگابایت در ثانیه، نوشتن ۶۵۰۰». این عددها برای خوندن و نوشتن پشت سر هم فایل‌های بزرگ‌ان، با صف خیلی پر. یعنی بهترین حالت ممکن.

عددی که بیشترین ربط رو به حس سرعت داره، معمولا روی جعبه نیست؛ خوندن تیکه‌های ۴ کیلوبایتی پراکنده با صف یک. این عدد برای SSDهای خوب هم معمولا چند ده مگابایت در ثانیه‌ست، نه چند هزار. فرقش بین SSDهای مختلف هم کمتر از عددهای جعبه‌ست.

پس وقتی دو تا SSD رو مقایسه می‌کنید، یه نگاه هم به تست‌هایی بندازید که خوندن پراکنده و تاخیر رو اندازه گرفتن، و یه نگاه به اینکه بعد از پر شدن کش SLC (همونی که توی درس SSD دیدید) سرعت نوشتن به چند می‌رسه. یه SSD با عدد جعبه‌ی کمتر ولی نوشتن پایدارتر، برای سرور خیلی وقت‌ها بهتره.

NVMe بی رم

خیلی از SSDهای NVMe ارزون یه تراشه‌ی رم کوچیک کنار کنترلر ندارن. این رم جای نقشه‌ایه که می‌گه هر تیکه از داده الان کجای فلش نشسته. SSD بی رم یه راه حل داره به اسم HMB، کوتاه‌شده‌ی Host Memory Buffer، یعنی «یه تیکه از رم کامپیوتر که SSD قرض می‌گیره». این قرض گرفتن فقط با NVMe ممکنه، چون از روی PCIe مستقیم به رم کامپیوتر دسترسی داره.

برای کامپیوتر خونه و لپ‌تاپ، SSD بی رم با HMB معمولا خوب کار می‌کنه. ولی زیر کار سنگین و طولانی، مثل دیتابیس یه فروشگاه شلوغ، SSD با رم خودش پایدارتره. SSDهای سرور تقریبا همیشه رم خودشون رو دارن.

M.2 و شکاف‌هاش

بیشترین گیجی سر NVMe از اینجا میاد: خیلی‌ها فکر می‌کنن M.2 یعنی NVMe. نه. M.2 فقط یه شکله، یه تیکه‌ی باریک که روی برد پیچ می‌شه. همین شکل می‌تونه از راه SATA حرف بزنه یا از راه NVMe.

یه سرنخ، شکاف‌های سر تیکه‌ست که بهشون می‌گن «کلید». SSDهای M.2 با SATA معمولا دو تا شکاف دارن (کلید B و M)، و SSDهای NVMe معمولا یه شکاف (فقط کلید M). ولی این قانون همیشگی نیست؛ مطمئن‌ترین راه، خوندن مشخصات خود SSD و برد اصلیه. اگه یه SSD NVMe روی یه شیار M.2 بذارید که فقط SATA بلده، اصلا شناخته نمی‌شه.

طول هم مهمه. روی هر SSD M.2 یه عدد چهاررقمی هست، مثل ۲۲۸۰؛ دو رقم اول پهناست و دو رقم بعد طول، به میلی‌متر. ۲۲۸۰، یعنی ۲۲ در ۸۰، رایج‌ترینه. ۲۲۳۰ و ۲۲۴۲ کوتاه‌ترن و توی لپ‌تاپ‌های کوچیک و دستگاه‌های دستی می‌شینن، و ۲۲۱۱۰ بلندتره و بیشتر توی سرورها، چون جا برای تراشه‌های بیشتر و خازن‌های محافظ برق داره. پیش از خرید ببینید پیچ نگه‌دارنده‌ی برد شما برای کدوم طول جا داره.

شکل‌های دیگه

NVMe فقط M.2 نیست. توی سرورها شکلی به اسم U.2 رایجه: هم‌اندازه‌ی یه هارد ۲٫۵ اینچی ولی ضخیم‌تر، که از جلوی سرور، بی خاموش کردن، بیرون کشیده و عوض می‌شه. شکل‌های تازه‌تر سرور هم هست، به اسم کلی EDSFF، که باریک و بلندن تا تعداد بیشتری توی یه سرور جا بشن و بهتر خنک بشن.

یه شکل دیگه هم کارت‌های NVMe‌ئه، که مثل کارت گرافیک توی شیار PCIe روی برد می‌رن؛ برای کامپیوترهایی که شیار M.2 ندارن.

گرما

سرعت زیاد، گرمای زیاد. کنترلر یه SSD NVMe پرسرعت، زیر کار سنگین داغ می‌شه. اگه بیش از حد داغ بشه، خودش رو کند می‌کنه تا آسیب نبینه؛ همون افت سرعت از گرما که توی درس پردازنده دیدید.

برای همین خیلی از بردها و SSDهای سریع، یه خنک‌کننده‌ی فلزی کوچیک روی SSD دارن. اگه SSD نسل ۴ یا ۵ دارید و موقع کپی‌های بزرگ کند می‌شه، یکی از دلیل‌ها می‌تونه همین گرما باشه.

برق و خواب

NVMe چند تا «حالت برق» داره؛ از کار با تمام قدرت تا خواب عمیق که تقریبا هیچ برقی نمی‌کشه. روی لپ‌تاپ، سیستم‌عامل وقتی دیسک بیکاره، خودکار SSD رو به خواب می‌بره تا باتری بیشتر دووم بیاره. به این خوابوندن خودکار می‌گن APST، کوتاه‌شده‌ی Autonomous Power State Transition، یعنی «رفتن خودکار بین حالت‌های برق».

بیدار شدن از خواب عمیق یه کم طول می‌کشه، چند میلی‌ثانیه. روی لپ‌تاپ این چیزی نیست، ولی روی سرور که هر میلی‌ثانیه مهمه، معمولا این خواب‌ها رو خاموش می‌کنن یا فقط حالت‌های سبک رو نگه می‌دارن. گاهی هم یه SSD با یه سیستم‌عامل خاص سر بیدار شدن گیر می‌کنه و از دسترس خارج می‌شه؛ اولین کاری که برای این مشکل می‌کنن، خاموش کردن همین خواب عمیقه.

یه دیسک، چند تا دیسک

NVMe یه امکان جالب داره به اسم «فضای نام» (namespace): یه SSD فیزیکی می‌تونه خودش رو به چند تا دیسک جدا تقسیم کنه، که کامپیوتر هر کدوم رو یه دیسک مستقل می‌بینه. شبیه پارتیشن، ولی یه لایه پایین‌تر، توی خود SSD.

برای کامپیوتر خونه، معمولا فقط یکی هست. توی سرورها و دیتاسنترها، با این امکان یه SSD بزرگ رو بین چند تا سرور مجازی تقسیم می‌کنن، که هر کدوم دیسک خودش رو داشته باشه.

یه نوع خاص‌تر هم هست به اسم ZNS، کوتاه‌شده‌ی Zoned Namespaces، یعنی «فضای نام منطقه‌بندی‌شده». اینجا SSD به برنامه می‌گه «این منطقه رو فقط پشت سر هم بنویس، و هر وقت خواستی پاکش کنی، کل منطقه رو پاک کن». این‌جوری خود برنامه کار تمیزکاری رو مرتب‌تر انجام می‌ده، SSD کمتر داده رو این‌ور اون‌ور می‌بره و دیرتر خسته می‌شه. این بیشتر برای دیتاسنترهای خیلی بزرگه، و روی سرور یه سایت معمولی سراغش نمی‌رید.

NVMe توی لینوکس

روی یه سرور لینوکس، NVMe رو از اسمش می‌شناسید. دستور lsblk فهرست دیسک‌ها رو نشون می‌ده:

  1. دیسک‌های NVMe اسمی مثل nvme0n1 دارن: کنترلر شماره‌ی صفر، فضای نام شماره‌ی یک.
  2. پارتیشن‌هاش می‌شن nvme0n1p1، nvme0n1p2 و بقیه.
  3. دیسک‌های SATA اسمی مثل sda و sdb دارن.

پس اگه روی سرور مجازی که «NVMe» خریدید، دیسک با اسم sda یا vda می‌بینید، تعجب نکنید؛ توی سرور مجازی، دیسک از لایه‌ی مجازی‌سازی رد می‌شه و اسمش عوض می‌شه، حتی اگه زیرش NVMe باشه.

سلامت NVMe

NVMe گزارش سلامت خودش رو داره، و ابزار nvme-cli روی لینوکس با دستوری مثل nvme smart-log نشونش می‌ده. عددهای مهمش همونایی‌ان که توی درس SSD دیدید: دما، درصد عمر مصرف‌شده، چقدر داده نوشته شده، و جای ذخیره‌ی باقی‌مونده.

یه عدد دیگه هم هست که ارزش دیدن داره: چند بار دما از حد هشدار رد شده. اگه زیاده، یعنی SSD جای خنکی نیست و خنک‌کننده لازم داره.

بالا اومدن از NVMe

برای اینکه کامپیوتر از روی NVMe بالا بیاد، یعنی سیستم‌عامل از روی اون شروع بشه، خود برد اصلی هم باید NVMe رو بشناسه. بردهای جدید همه بلدن. ولی بعضی کامپیوترها و سرورهای قدیمی‌تر، از حدود پیش از ۲۰۱۵، می‌تونن NVMe رو به‌عنوان یه دیسک اضافه ببینن ولی ازش بالا نمیان.

سیستم‌عامل‌ها هم باید NVMe رو بلد باشن. لینوکس از سال ۲۰۱۲ درایورش رو داره و ویندوز از نسخه‌هایی که حدود ۲۰۱۳ اومدن. پس امروز روی هر سیستم‌عامل به‌روزی، NVMe بی هیچ نصب اضافه‌ای کار می‌کنه.

خط‌های مشترک

خط‌های PCIe بی‌نهایت نیستن. پردازنده یه تعداد خط داره که مستقیم به خودش وصله، و بقیه از یه تراشه‌ی کمکی روی برد به اسم «چیپست» رد می‌شن، که خودش با یه جاده‌ی محدود به پردازنده وصله. معمولا اولین شیار M.2 مستقیم به پردازنده وصله و سریع‌ترینه، و شیارهای بعدی از چیپست رد می‌شن.

یه چیز دیگه که خیلی‌ها رو غافلگیر می‌کنه: روی خیلی از بردها، وقتی یه شیار M.2 رو پر می‌کنید، یکی دو تا از درگاه‌های SATA یا یه شیار PCIe خاموش می‌شه، چون خط‌هاشون مشترکه. این توی دفترچه‌ی برد نوشته شده؛ پیش از اضافه کردن NVMe دوم، یه نگاه بهش بندازید.

چند تا NVMe با هم

روی سرور معمولا دو یا چند تا NVMe رو با هم توی RAID می‌ذارن. RAID، کوتاه‌شده‌ی Redundant Array of Independent Disks، یعنی «چند تا دیسک کنار هم که برای هم پشتیبان‌ان». ساده‌ترینش RAID 1‌ئه؛ هر چیزی روی دو تا دیسک هم‌زمان نوشته می‌شه، و اگه یکی خراب بشه، سرور با اون یکی ادامه می‌ده.

برای NVMe، RAID معمولا با نرم‌افزار خود سیستم‌عامل ساخته می‌شه، نه با کارت RAID جدا؛ چون کارت‌های RAID قدیمی خودشون گلوگاه NVMe می‌شن. روی لینوکس این کار با ابزاری به اسم mdadm انجام می‌شه.

یه اسم دیگه هم ممکنه بشنوید، bifurcation، یعنی «دوشاخه کردن». با این امکان، یه شیار PCIe شونزده‌خطه به چهار تا تیکه‌ی چهارخطه تقسیم می‌شه، و یه کارت ساده می‌تونه چهار تا NVMe رو روی یه شیار نگه داره. برد باید این امکان رو داشته باشه و توی تنظیماتش روشن بشه.

رمز و پاک کردن

خیلی از SSDهای NVMe همه‌ی داده رو خودشون، توی سخت‌افزار، رمز می‌کنن؛ حتی وقتی شما کاری نکردید. کلید این رمز توی خود SSD نگه داشته می‌شه. فایده‌ش موقع پاک کردنه.

پاک کردن کامل یه SSD با پر کردنش با صفر کار نمی‌کنه، چون کنترلر نوشته‌ها رو هر جا خودش بخواد می‌بره و تیکه‌هایی از داده‌ی قدیمی ممکنه یه گوشه بمونه. NVMe برای این کار دستورهای خودش رو داره؛ یکی کل سلول‌ها رو پاک می‌کنه، یکی فقط کلید رمز رو عوض می‌کنه. با عوض شدن کلید، همه‌ی داده‌ی قبلی یه مشت عدد بی‌معنی می‌شه، و این کار چند ثانیه بیشتر طول نمی‌کشه.

روی لینوکس، ابزار nvme-cli این دستورها رو داره. اگه یه سرور یا SSD رو می‌فروشید یا پس می‌دید، از همین دستورها استفاده کنید، نه از فرمت ساده.

سنجیدن درست

اگه می‌خواید بدونید NVMe سرور شما واقعا چقدر سریعه، کپی کردن یه فایل بزرگ و نگاه کردن به عدد کافی نیست؛ اون فقط خوندن پشت سر هم رو می‌سنجه، و بخشیش رو هم کش رم جواب می‌ده. ابزار رایج برای این کار روی لینوکس fio‌ئه، کوتاه‌شده‌ی Flexible I/O Tester، یعنی «آزمایشگر انعطاف‌پذیر خوندن و نوشتن».

با fio می‌شه گفت «تیکه‌های ۴ کیلوبایتی، پراکنده، با صف یک بخون» یا «با صف ۳۲ بنویس» و نتیجه رو هم به IOPS دید، هم به تاخیر. برای یه سایت، دو تا عدد از همه مهم‌تره؛ خوندن پراکنده‌ی ۴ کیلوبایتی با صف یک، که حس سرعت یه درخواست تنها رو نشون می‌ده، و همون با صف بالا، که نشون می‌ده زیر بار چقدر تاب میاره.

روی هاست اشتراکی معمولا اجازه‌ی اجرای fio رو ندارید، و اگه داشته باشید هم عددش بسته به اینکه همسایه‌ها اون لحظه چی کار می‌کنن، هر بار عوض می‌شه. این خودش یه نشونه‌ست که اون NVMe کامل مال شما نیست.

NVMe از راه شبکه

توی دیتاسنترهای بزرگ، گاهی SSDها توی سرور نیستن؛ توی یه قفسه‌ی جدا، اتاق بغل‌ان. سرورها با یه شبکه‌ی خیلی سریع بهشون وصل می‌شن، و باز هم با همون زبان NVMe حرف می‌زنن. بهش می‌گن NVMe over Fabrics، یعنی «NVMe از روی شبکه».

این‌جوری هر سرور می‌تونه به اندازه‌ای که لازم داره از یه انبار بزرگ SSD سهم بگیره، با سرعتی نزدیک به SSD داخل خودش. خیلی از دیسک‌های سرورهای ابری پشت صحنه همین‌طوری کار می‌کنن.

SATA و NVMe کنار هم

SSD با SATASSD با NVMe
جادهکابل SATAPCIe، معمولا چهار خط
زبانAHCI، ساخته‌شده برای هارد چرخانNVMe، ساخته‌شده برای فلش
صفیه صف، ۳۲ فرمانتا ۶۵ هزار صف
خوندن پشت سر همحدود ۵۵۰ مگابایت در ثانیهچند گیگابایت در ثانیه
IOPSده‌ها هزارصدها هزار تا بیش از یه میلیون
شکل۲٫۵ اینچی یا M.2M.2، U.2، کارت PCIe

قیمت این دو تا امروز خیلی به هم نزدیکه، و برای کامپیوتر یا سرور تازه، دلیل کمی برای انتخاب SATA مونده. SATA هنوز به درد کامپیوترهای قدیمی می‌خوره که شیار M.2 ندارن، و جاهایی که فقط ظرفیت زیاد و ارزون مهمه.

NVMe روی سرور

برای سرور سایت، NVMe امروز بهترین انتخابه. قیمتش هم دیگه با SSD SATA خیلی فرقی نداره. سرورهای جدی معمولا چند تا NVMe دارن، توی RAID، تا اگه یکی خراب شد، داده از دست نره.

یه نکته‌ی سرور: NVMe سرور معمولا «محافظت در برابر قطع برق» داره، همون خازن‌هایی که توی درس SSD دیدید. برای دیتابیس این خیلی مهمه؛ نوشته‌ای که دیتابیس فکر می‌کنه انجام شده، نباید با قطع برق از دست بره.

«هاست NVMe»

خیلی از هاست‌ها حالا می‌نویسن «هاست NVMe». یعنی دیسک سروری که سایت شما روشه NVMe‌ئه. خوبه، ولی همه‌ی داستان نیست. اون NVMe بین صدها سایت شریکه؛ اگه همسایه‌ها شلوغ باشن، صف‌های اون NVMe هم شلوغه و سهم شما کمتر.

مثل یه اتوبان خوب که هزار تا ماشین با هم ازش رد می‌شن؛ ساعت شلوغی، اتوبان هم کند می‌شه. روی سرور مجازی خودتون، NVMe کمتر کسی با شما شریکه، و روی سرور اختصاصی، کامل مال خودتونه.

برای سایت چقدر مهمه؟

اگه سایت شما الان روی هارد چرخانه، رفتن به هر SSDای فرق بزرگی می‌سازه. اگه روی SSD SATA هست، رفتن به NVMe هم کمک می‌کنه، مخصوصا برای دیتابیس و فروشگاه‌هایی که صفحه‌هاشون کش نمی‌شه.

ولی یه چیز رو فراموش نکنید: سایتی که خوب کش شده، خیلی وقت‌ها اصلا سراغ دیسک نمی‌ره؛ صفحه از رم یا کش داده می‌شه. پس NVMe یکی از تیکه‌های سرعته، نه همه‌ش. سرور خوب‌تنظیم‌شده با SSD معمولی، ممکنه از سرور بی تنظیم با NVMe سریع‌تر باشه.

انتخاب

اگه دارید NVMe می‌خرید، برای کامپیوتر یا سرور، این‌ها رو به ترتیب ببینید:

  1. اول ببینید برد شما شیار M.2 با NVMe داره یا نه، و چه نسلی از PCIe.
  2. بعد نسل SSD رو هم‌اندازه‌ی برد بگیرید؛ نسل بالاتر روی برد پایین‌تر، فقط پول اضافه‌ست.
  3. بعد عدد IOPS و TBW رو ببینید، نه فقط عدد بزرگ «مگابایت در ثانیه».
  4. برای سرور، SSD با محافظت در برابر قطع برق و رم داخلی بگیرید.
  5. و اگه SSD خیلی سریعه، به خنک‌کننده فکر کنید.

کمی تاریخ

زبان قدیمی AHCI حدود سال ۲۰۰۴ برای هارد چرخان استاندارد شد. با اومدن SSD، اواخر دهه‌ی ۲۰۰۰ چند تا سازنده هر کدوم SSDهایی ساختن که مستقیم روی PCIe می‌نشستن، ولی هر کدوم با زبان خودشون و درایور خودشون؛ یعنی هر کدوم برای خودش.

برای اینکه همه با یه زبان حرف بزنن، یه گروه از ده‌ها شرکت با هم NVMe رو ساختن، و نسخه‌ی ۱٫۰ش مارس ۲۰۱۱ منتشر شد. چند سال بعد سیستم‌عامل‌ها خودشون NVMe رو بلد شدن، و از اواسط دهه‌ی ۲۰۱۰، NVMe کم‌کم استاندارد لپ‌تاپ‌ها، کامپیوترها و سرورها شد. سال ۲۰۲۱ نسخه‌ی ۲٫۰ اومد، که استاندارد رو به چند تیکه‌ی جدا شکست تا هر نوع دستگاه، از SSD معمولی تا انبارهای شبکه‌ای، فقط تیکه‌ی خودش رو پیاده کنه.

تمرین

  1. ببینید SSD کامپیوترتون NVMe‌ئه یا SATA، و برد اصلی چه نسلی از PCIe داره.
  2. اگه سرور لینوکس دارید، lsblk رو بزنید و اسم دیسک‌ها رو ببینید.
  3. اگه هاستتون می‌گه «NVMe»، بپرسید اون دیسک بین چند تا سایت شریکه.

اشتباه‌های رایج

  • «NVMe یه جور حافظه‌ی تازه‌ست.» نه؛ سلول‌هاش همون فلش SSD‌ئه. NVMe زبان و راه ارتباطه.
  • «M.2 یعنی NVMe.» M.2 شکله؛ ممکنه SATA باشه.
  • «نسل ۵ همه‌جا سریع‌تره.» روی برد نسل ۳، با سرعت نسل ۳ کار می‌کنه.
  • «هاست NVMe یعنی سرعت NVMe کامل.» اون NVMe بین صدها سایت شریکه.
  • «با NVMe دیگه کش لازم نیست.» رم و کش هنوز هزاران بار سریع‌تر از هر دیسکی‌ان.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • NVMe یه زبان و راه ارتباطه، نه یه جنس حافظه؛ SSD رو مستقیم به PCIe وصل می‌کنه.
  • SATA و زبانش (AHCI) برای هارد چرخان ساخته شده بودن: یه صف ۳۲تایی. NVMe تا ۶۵ هزار صف داره.
  • سرعت NVMe به نسل PCIe و تعداد خط‌ها بستگی داره؛ معمولا چهار خط.
  • M.2 یه شکله؛ یه SSD M.2 ممکنه SATA باشه یا NVMe.
  • «هاست NVMe» یعنی دیسک سرور NVMe‌ئه، ولی بین صدها سایت شریکه.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس