NVM Express

לוגו 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 ובתורי עדיפויות.

תרשים של תורים ב-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.

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

* 
* [https://nvmexpress.org nvm EXPRESS]

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

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