NVM Express

ממוזער|180x180 פיקסלים|לוגו NVM Express
**NVM Express** (**NVMe**) הוא תקן המגדיר ממשק עבור התקן לוגי כדי לגשת לאחסון לא נדיף המחובר בדרך כלל באמצעות  (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 ובתורי עדיפויות.

מרכז|ממוזער|650x650 פיקסלים|תרשים של תורים ב-NVMe. לכל תור משויך תור (ירוק) משימות שהושלמו (בכתום). יש תור ניהול אחד, ותור משימות אחד או יותר שמשויך לכל ליבה במערכת. בקר ה-NVMe מתקשר עם התורים על גבי PCIe.

### מושגים
* **מרחב שם** (Namespace) הוא זיכרון לא נדיף שיכול לארגן בלוקים לוגיים. בקר NVMe יכול לתמוך במספר מרחבי שם, כשלכל אחד מזהה ייחודי (namespace ID). קיימות פקודות לניהול מרחבי שם (כדוגמת יצירה ומחיקה שלהם).
* **תור משימות** (Submission Queue; ובקיצור SQ) מאפשר לתוכנה לכתוב פקודות לביצוע, שאותן קורא הבקר על פי סדר (אך עשוי לבצע בסדר שונה), וכשהן נשלמות כותב הבקר הודעת סיום ל**תור המשימות שהושלמו** (Completion Queue; ובקיצור CQ). ניתן לשייך מספר תורי משימות לתור משימות שהושלמו.
** רשומה בתור המשימות (Submission queue entry) בנויה מ-64 בתים, ומציינת את כתובות הזיכרון הפיזי שישמשו להעברת הנתונים, המצוינות בצורה של Physical Region Page (ובקיצור PRP) או רשימת פיזור/איסוף (Scatter Gather List ובקיצור SGL).
** רשומה בתור המשימות מכילה מציין של התור הרלוונטי ושל המשימה.
* **משימות ניהול** (Admin Submission) מאפשרות לנהל את הבקר כדוגמת יצירה ומחיקה של תורי משימות, ביטול משימות וכולי.

### NVMeOF
ממוזער|תרשים המתאר NVMeOF המאפשר גישה להתקן NVMe מרוחק באמצעות פרוטוקול תעבורה ברשת
**NVM Express over Fabrics** (בקיצור NVMeOF) הוא תקן המרחיב את NVM Express כדי להשתמש בפרוטוקול תעבורה על גבי הרשת לגישה להתקנים מרוחקים, בשונה מ-NVMe בסיסי שבו הגישה להתקן נעשית בצורה ישירה על גבי אפיק PCIe. יש מספר סוגים של NVMeOF, הנבדלים על פי סוג פרוטוקול התעבורה המשמש אותם. התקן מגדיר מיפוי של NVMe על גבי גישה ישירה מרוחקת לזיכרון (RDMA) ובהמשך נוספה גם הגדרה ל–NVMe-oF/TCP כששכבת התעבורה היא TCP.

התקן מגדיר **קפסולה** כיחידת בסיס להעברת מידע, וקיימות קפסולות פקודה (command capsule) וקפסולות תשובה (response capsule).

## היסטוריה
[ממוזער|סדרת SSD 750 של אינטל, אשר משתמש ב-NVM Express ככרטיס הרחבה של [PCI Express 3.0 בארבעה אפיקים]]
הפרטים הראשונים על תקן חדש לגישה לזיכרון לא נדיף התפרסמו במסגרת אירוע המפתחים של אינטל ב-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 ראשונים מתוצרתה במסגרת משפחת מוצרי אחסון למרכזי נתונים, שכללה את סדרות ,  ו-.

בספטמבר 2014 הוצע תקן FC-NVMe, המאפשר NVMe על גבי Fibre Channel. ב-2016 פורסמה גרסה 1.0 של NVM Express over Fabrics.

## קישורים חיצוניים

* 
* nvm EXPRESS

## הערות שוליים

קטגוריה:אחסון נתונים