NVM Express

NVM Express (‏NVMe) הוא תקן המגדיר ממשק עבור התקן לוגי כדי לגשת לאחסון לא נדיף המחובר בדרך כלל באמצעות PCI Express (PCIe). הקיצור NVM מציין זיכרון לא נדיף (non-volatile memory) שהוא לרוב זיכרון הבזק מבוסס NAND שיכול לבוא בצורות שונות כגון Solid state drive ‏(SSD), כרטיסי PCIe ומתממשק בחיבור M.2.‏ NVMe כממשק להתקן לוגי תוכנן כדי לנצל השהיה נמוכה ומקביליות פנימית של התקני אחסון אלו. NVMe מאפשר לחומרה ולתוכנה לנצל את המקביליות הנתמכת ב-SSDs מודרניים, וכך לצמצם את התקורה של פעולות קלט/פלט (I/O) ולשפר את הביצועים ביחס לממשקים קודמים של התקנים לוגיים. פרוטוקולים קודמים כדוגמת AHCI פותחו כדי לתמוך בדיסקים קשיחים איטיים, שבהם היה עיכוב רב (ביחס למהירות המעבד) בין בקשת המידע לקבלתו, מהירות העברת הנתונים הייתה איטית בהרבה ביחס ל-RAM, וזמן החיפוש כתוצאה מסיבוב הדיסק, יכלו לשמש כדרישות לאופטימיזציה. התקני NVMe קיימים בצורות של כרטיסי הרחבה ל-PCIe וכהתקני 2.5 אינץ' המספקים ממשק של ארבעה אפיקי PCIe באמצעות חיבור U.2. היסטורית רוב כונני ה-SSD השתמשו באפיקי נתונים כדוגמת SATA,‏ SAS וערוצי סיבים (FC) כדי להתממשק עם יתר מערכת המחשב. מאז הפיכתם של כונני SSD לנפוצים בשוק, היה SATA הדרך הנפוצה לחיבור כונני SSD למחשבים אישיים; אולם SATA תוכנן בעיקר כדי לתקשר עם דיסקים קשיחים מכניים, ולא מתאים כל כך ל-SSDs, שהשתפרו במהירות לאורך הזמן. בין השנים 2005 ל-2010, חלק מכונני SSD הגיעו למיצוי התפוקה המקסימלית של SATA. כונני SSD יוקרתיים השתמשו באפיק PCI Express עוד לפני הגדרת NVMe, אך על בסיס ממשקים שאינם תקניים. באמצעות תקנון הממשק של כונני SSD, יכולות מערכות הפעלה להסתפק במנהל התקן (דרייבר) אחד שיתאים לכל כונני ה-SSD הפועלים בהתאם לתקן. כמו כן יצרני SSD לא נדרשים למשאבים נוספים לתכנון מנהלי התקן ייחודיים. התקן מגדיר את הממשק המאפשר גישה לאחסון לא נדיף. התקן מיועד לאפשר גישה לכונני SSD על גבי PCIe. הממשק של NVMe מספק ממשקים יעילים לשליחת משימה לביצוע ולמעקב אחרי השלמתה. התקן תומך בביצוע פעולות במקביל הודות לתמיכה בכ-65 אלף תורי משימות, כשכל תור יכול לטפל ב-64 אלף משימות. בנוסף כולל התקן יכולות מתקדמות המשמשות חברות כדוגמת הגנה מידע מהקצה לקצה, דיווח שגיאות מפורט ותמיכה בווירטואליזציה (כדוגמת SR-IOV). בין היתר מגדיר התקן תמיכה בפסיקות של MSI/MSI-X ובתורי עדיפויות. מרחב שם (Namespace) הוא זיכרון לא נדיף שיכול לארגן בלוקים לוגיים. בקר NVMe יכול לתמוך במספר מרחבי שם, כשלכל אחד מזהה ייחודי (namespace ID). קיימות פקודות לניהול מרחבי שם (כדוגמת יצירה ומחיקה שלהם). תור משימות (Submission Queue; ובקיצור SQ) מאפשר לתוכנה לכתוב פקודות לביצוע, שאותן קורא הבקר על פי סדר (אך עשוי לבצע בסדר שונה), וכשהן נשלמות כותב הבקר הודעת סיום לתור המשימות שהושלמו (Completion Queue; ובקיצור CQ). ניתן לשייך מספר תורי משימות לתור משימות שהושלמו. רשומה בתור המשימות (Submission queue entry) בנויה מ-64 בתים, ומציינת את כתובות הזיכרון הפיזי שישמשו להעברת הנתונים, המצוינות בצורה של Physical Region Page (ובקיצור PRP) או רשימת פיזור/איסוף (Scatter Gather List ובקיצור SGL). רשומה בתור המשימות מכילה מציין של התור הרלוונטי ושל המשימה. משימות ניהול (Admin Submission) מאפשרות לנהל את הבקר כדוגמת יצירה ומחיקה של תורי משימות, ביטול משימות וכולי. NVM Express over Fabrics (בקיצור NVMeOF) הוא תקן המרחיב את NVM Express כדי להשתמש בפרוטוקול תעבורה על גבי הרשת לגישה להתקנים מרוחקים, בשונה מ-NVMe בסיסי שבו הגישה להתקן נעשית בצורה ישירה על גבי אפיק PCIe. יש מספר סוגים של NVMeOF, הנבדלים על פי סוג פרוטוקול התעבורה המשמש אותם. התקן מגדיר מיפוי של NVMe על גבי גישה ישירה מרוחקת לזיכרון (RDMA) ובהמשך נוספה גם הגדרה ל–NVMe-oF/TCP כששכבת התעבורה היא TCP. התקן מגדיר קפסולה כיחידת בסיס להעברת מידע, וקיימות קפסולות פקודה (command capsule) וקפסולות תשובה (response capsule). הפרטים הראשונים על תקן חדש לגישה לזיכרון לא נדיף התפרסמו במסגרת אירוע המפתחים של אינטל ב-2007, שבהם הוצג בשם NVMHCI. תקן NVMHCI 1.0 הושלם ופורסם באפריל 2008. עבודה טכנית על NVMe החלה במחצית השנייה של 2009. התקן של NVMe הוגדר על ידי קבוצת עבודה שהורכבה מיותר מ-90 חברות; בראש הקבוצה עמדה אמבר הופמן מאינטל. גרסה 1.0 של התקן פורסמה ב-1 במרץ 2011, וגרסה 1.1 פורסמה באוקטובר 2012. גרסה 1.1 כללה הרחבה של גישה למסלולים מרובים (multi path; באמצעות שיתוף מרחבי שם) וגודל שרירותי לרשימת פיזור/איסוף. בשלביה הראשונים נקראה גרסה 1.1 בשם "NVMHCI לחברות". בינואר 2013 פורסם עדכון לגרסה הבסיסית של NVMe, עדכון 1.0e. ערכות שבבים ראשונות המבוססות על תקן NVMe החלו להימכר בצורה מסחרית באוגוסט 2012 על ידי החברה האמריקנית Integrated Device Technology. ביולי 2013 הכריזה סמסונג על התקן NVMe לחברות, דגם XS1715, שתמך על פי היצרן במהירות קריאה של 3GB לשנייה, פי שישה מהמהירות של אמצעי אחסון קודמים. בנובמבר 2013 השיקה SandForce משפחת בקרים SF3700 שגם תמכה ב-NVMe. ביוני 2014 הודיעה אינטל על מוצרי NVMe ראשונים מתוצרתה במסגרת משפחת מוצרי אחסון למרכזי נתונים, שכללה את סדרות DC P3700, DC P3600 ו-DC P3500. בספטמבר 2014 הוצע תקן FC-NVMe, המאפשר NVMe על גבי Fibre Channel. ב-2016 פורסמה גרסה 1.0 של NVM Express over Fabrics. מדיה וקבצים בנושא NVM Express בוויקישיתוף אתר האינטרנט הרשמי של NVM Express (באנגלית) nvm EXPRESS NVM Express, ברשת החברתית אקס (טוויטר) NVM Express, סרטונים בערוץ היוטיוב https://nvmexpress.org/resources/specifications/ "NVM Express over Fabrics Revision 1.0" (PDF). NVM Express, Inc. 5 ביוני 2016. {{cite web}}: (עזרה) N. V. M. Express, Welcome NVMe™/TCP to the NVMe-oF™ Family of Transports, NVM Express (באנגלית) Peter Onufryk, What’s New in NVMe 1.1 and Future Directions "New Promoter Group Formed to Advance NVM Express" (PDF). Press release. 1 ביוני 2011. נבדק ב-18 בספטמבר 2013. {{cite news}}: (עזרה) "IDT releases two NVMe PCI-Express SSD controllers". The Inquirer. 2012-08-21. נבדק ב-2014-01-11. "IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update". The SSD Review. 2012-08-24. נבדק ב-2014-01-11. "Samsung Announces Industry's First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews". StorageReview.com. 2013-07-18. אורכב מ-המקור ב-2014-01-10. נבדק ב-2014-01-11. "LSI SF3700 SandForce Flash Controller Line Unveiled | StorageReview.com - Storage Reviews". StorageReview.com. 2013-11-18. אורכב מ-המקור ב-2014-01-11. נבדק ב-2014-01-11. "Intel® Solid-State Drive Data Center Family for PCIe*". Intel. נבדק ב-21 במרץ 2015. {{cite web}}: (עזרה) "Fibre Channel Industry Association Collaborating with NVM Express, Inc. to Define New Standard for Fabric-Based Solid-State Storage Devices" (הודעה לעיתונות).