Storage Developer Conference - #169: Completing the Picture for NVMe and NVMe-oF Management: Guidelines for Implementations

Episode Date: June 7, 2022

...

Transcript
Discussion (0)
Starting point is 00:00:00 Hello, everybody. Mark Carlson here, SNEA Technical Council Co-Chair. Welcome to the SDC Podcast. Every week, the SDC Podcast presents important technical topics to the storage developer community. Each episode is hand-selected by the SNEA Technical Council from the presentations at our annual Storage Developer Conference. The link to the slides is available in the show notes at snea.org slash podcasts. You are listening to SDC Podcast, Episode 169. Hello, I'm Curtis Ballard with Hewlett-Packard Enterprise, also a member of the SNEA Technical Council. Coming to you today, representing the SNEA Scalable Storage Management Technical Working Group, specifically the Swordfish for NVMe Task Force from that technical working group.
Starting point is 00:00:57 We've been working on creating Swordfish for NVMe requirements and implementation guidelines, and we'd like to share with you some highlights and tips for Swordfish for NVMe implementations. This presentation is a snapshot of work in progress within SNEA, but I would like to point out that SNEA Swordfish is a public specification that you could implement to today. We'll be continually developing Swordfish for some time to come yet as we create new profiles and guidance for different device types and define new properties as people come up with new features that they'd like to have implemented.
Starting point is 00:01:33 If you're not familiar with SNEA Swordfish, it's an extension of the DMTF Redfish specification, using all the same models, constructs, as the Redfish specification does, but extending that and developed by the Storage Networking Industry Association to provide a unified approach for the management of storage equipment and services. In this presentation we're going to give you an introduction to some of the most recent work where we've been adding implementation requirements for specific configurations. We're working to make sure that
Starting point is 00:02:03 NVMe and NVMe OF environments can be represented accurately entirely with Swordfish. So what's been going on in Swordfish in 2021? 2021 has been a lot of filling out the NVMe story. We've been working on NVMe and more NVMe. In Stories Developers Conference in 2020, we introduced the NVMe mappings for Swordfish. Basic objects were mapped at that point in time, and many of the properties were mapped. A lot of the guidance was available then. We didn't have the requirements defined, the profiles defined, but now we have the most common NVMe and NVMe-OF models fully
Starting point is 00:02:41 mapped and documented. There are new profiles since last year for NVMe drives with standard features. These are your typical NVMe express drives you might find in a laptop, workstation, something in a data center. All the basic features that NVMe drives implement are describable with the Swordfish NVMeDrive.json profile. There are some NVMe drives that support advanced features such as nvm sets and endurance groups if you are familiar with those NVMe express capabilities. Those are described in NVMe drives with advanced features which use the Swordfish NVMe Drive advanced
Starting point is 00:03:20 features.json profile. Another profile has been published for an emerging technology space of native Ethernet-attached NVMe drives in the SwordFish NVMe Ethernet-attached.json profile. This is a technology space that SNEA has been actively involved in for some time, with the SNEA Object Drive Technical Working Group working on a native Ethernet-attached drive specification, describing many of the enabling technologies to enable this emerging technology space. One of the most recent things that's been published is a profile for arrays that expose NVMe-OF host interfaces.
Starting point is 00:03:56 This is called the Swordfish NVMe Frontend.json profile. We have an array example in the mapping guide called the opaque array that uses this NVMeOF host interface in this profile, but the backend is an opaque, hidden backend. Only the frontend is described and the resources on the backend that are used to make the logical devices are not described. Kind of like a typical array often hides the exact back-end implementation. There are future profiles under development. We're actively working on a profile for NVMe over Fabric JBobs, just a bunch of Flash, the follow-on to the SAS JBODs that you may be
Starting point is 00:04:38 familiar with. Also working on a profile for a native Ethernet NVMe OF JBov. This would be a NVMe OF JBov that is composed of the Ethernet drives that we described in the previous page. Yet another profile that's under development is a profile for logical subsystems that are composed from underlying resources. That profile is not final named yet. We'll have a name for that one soon. That's intended to align with a technical proposal called TP-6011 that's under development in NVM Express, also looking at logical subsystems composed from underlying resources. Please come join NVM Express if you'd like to get more information about that work. Now all of the things that we're continuing to try and describe in these future profiles could be implemented today using the Swordfish specification and some of the mapping guidance in the SNEA Swordfish NVMe model overview and mapping guide,
Starting point is 00:05:38 and using some of the other resources that are available to you. We just don't have the final profiles and all of the requirements specified, and we're working on creating the rest of the material to make it easier for you in the future. If you're interested in what else is new, there's more details on all the new Swordfish features in an SDC presentation from Rochelle Albers called What's New in SNEA Swordfish in 2021. And if you're just watching the video of this, I've copied the entire link there that you could copy out of a video. If you download this slide, all of the links in here are clickable. We said we talked about Swordfish requirements. Where do we get these Swordfish requirements? That ties right into the question of what are Swordfish profiles? Swordfish profiles are where you go to look for your requirements.
Starting point is 00:06:27 If you're like me, I came to Swordfish from the NVMe side. I've been working on host interfaces for over 20 years, worked on storage arrays for a great number of years, been a member of the NVMe technical working group, helping to find NVMe expression specifications for several years. I have not been a Redfish developer or a Swordfish developer so when I started working with this Swordfish for NVMe group and got a copy of the Swordfish bundle as I downloaded it and zipped it there's all these profile files. What am I supposed to do with those? Well, I'll try
Starting point is 00:07:06 and give you some tips. These profiles are a template for a category of device. Now I can describe every device out there. We've tried to segment devices into common categories. Ideally your devices will fit pretty closely into one of these categories. If you've got a completely new category of device we haven't thought of, give us a shout. We could probably describe it as well. These profiles specify the Redfish, Swordfish implementation requirements. And of course, as usual, your underlying architecture is going to be open as long as requirements are met. There are some tips in the NVM Express mapping guide
Starting point is 00:07:42 that we're going to be talking about a little bit later those are places that you can go to get the information to fill in exact properties that that's guidance but your implementation is open as long as you fill in the correct information these profiles provide a common baseline for clients clients know what to expect minimum set of features and targets have a, minimum set of features, and targets have a reasonable minimal set of features to implement. There's lots of optional additional features that could be implemented, and you can take a look at the different properties available in all of the different objects and see things that could be interesting for your implementation. These profiles are published in a human readable JSON format.
Starting point is 00:08:26 As with anything like this, it can be a little bit cryptic, but it's all human readable with a few tips. Now for the purposes of this presentation today, I just used your simple Vim text editor with built-in Vim highlighting to create the screenshots that you're going to see. There's a lot of more capable tools for implementing JSON based code, implementing Redfish, Swordfish. I went simple for this presentation. The full profile specification is defined in a document from DMTF called DSP-0272 and here's a link to all the published versions of that DMTF document. A quick start on how to read profiles. The header describes the file and where it came from. I've
Starting point is 00:09:12 grabbed the header out here. We've got a schema definition that says what schema this profile is compliant with. We don't have to worry about those for the level of detail we need today. The profile name that I've grabbed out here is the Swordfish NVMe Front End. This is the profile that we talked about a few minutes ago that is for NVMe over Fabric front end host interfaces. And you'll see one of the field entries in the header is the purpose that describes exactly that. We use this for an NVMe front end interface such as a storage array. There's also your typical profile version and then a owning entity and a contact info. In this case both of Mercenia.org. At the top of profiles there may be requirements for other required profiles. This particular profile has a conditional requirement
Starting point is 00:10:01 that you have to support either the Swordfish discovery or the Swordfish co-Discovery profiles and so they have a requirement any of these additional profiles must also be supported. Some of the key concepts beyond the header, empty properties by default are mandatory. These are some of the most interesting ones. All of the properties that just have simple parentheses or brackets after them are mandatory. I've copied a couple out here from a category called identifiers. It has property requirements of durable name and durable forming. Those properties are fully specified in other specifications, but there's no special requirements on exactly how you implement as long as you comply with the specifications. The requirements may have some property requirements embedded inside of them. For example, I pulled out one here called the NVMe version.
Starting point is 00:10:58 The NVMe version is required when the underlying NVMe implementation is revision 1.2 or higher. So there's a conditional that you only implement it in these scenarios. So it has a read requirement that if implemented, it must be readable. Properties may also be included simply to restrict or advise against implementation. There's a number of properties that don't make sense for NVMe devices. And those are called out in profile as well. I've called out an example here for asset tag. The asset tag in this case has no requirement, and the purpose tells you that this requirement is recommended
Starting point is 00:11:35 as a do not implement for this device and protocol type. I went beyond that and gave you a little bit more information that this information is available in the drive resource if needed. So an implementer seeing this can see, well, I'm not supposed to implement this because I'm implementing it over here. And it's more useful in another place. If I'm remembering correctly, I grabbed this asset tag out of the volume. And the volume tag in NVMe terms maps to a namespace. And there are multiple namespaces in a drive. The asset tag is much more interesting on a drive that can have multiple namespaces
Starting point is 00:12:10 than the namespaces themselves. Some other key concepts. Your requirements can be an if-then conditional. If there is an if-then conditional, there will be a comparison that specifies the test. In this case, I've grabbed out a requirement for attached volumes. It has a conditional requirement of attached volumes must be implemented when the controller type is IO. Do not implement when controller type is discovery or admin. And this purpose statement is a descriptive text purpose to make it easy for the reader to understand the purpose. In this case, an I.O. controller for NVM Express is the controller
Starting point is 00:12:53 that can have namespaces where data is stored, and those namespaces are just presented in Swordfish as volumes. NVM Express controller types, discovery or admin, don't have namespaces. They're not going to have Swordfish volumes. It doesn't make any sense to implement attached volumes if you're a controller that doesn't have any volumes. So the exact comparison that you should run is described in detail following the purpose.
Starting point is 00:13:22 In this case, the property that you need to look at is the controller type property. The comparison type that you need to run is an equals and the compare value is IO. If the controller type equals IO, then you have a mandatory read and mandatory write requirement. So what about optional properties? I don't have any screen grabs here for optional properties. We haven't talked about optional properties. Well that's because all of the properties not listed are optional and have no special requirements. So the profile guide kind of goes to both ends of the spectrum. It lists the things that are required and lists the things that says do not
Starting point is 00:14:02 implement. Everything in the middle is an optional property that you can see in the specs or in the case of Swordfish for NVMe the mapping guide lists out all of the optional profiles and gives you a good good document you can go look for for additional things you might want to support for more information on profiles, there's a helpful DMTF presentation on reading profiles linked here and the full link described there as well. This is a few years old, however I did confirm with the author of that presentation that that is still an accurate presentation for the current version of profiles. There's the full specification for DMTF interoperability profiles.
Starting point is 00:14:50 We've mentioned this one previously, and there's that full link called out for you. And there's also a DMTF presentation posted on YouTube giving a talk on understanding reading profiles that was given at an OCP summit using a variant of the slides from the first bullet up above and there's the clickable link in that full YouTube link there if you want to look at that. So another helpful resource is the Swordfish NVMe mapping guide for short. We always call it the mapping guide. Full name, Swordfish NVMe Model Overview and Mapping Guide. What are we supposed to do with that?
Starting point is 00:15:29 Well, the NVMe mapping guide is a guide intended to help explain the mapping between redfish, swordfish objects, and NVMe concepts. It's kind of intended to be something to help bridge the gap from NVMe to swordfish or swordfish to NVMe. Help somebody come in from either direction to understand the material. Starts out by introducing the basic NVMe mapping model. We'll take a look at how that's introduced here in a few slides. Then it gives some examples of mapping for some common NVMe subsystem types, so you can look through those for some interesting examples.
Starting point is 00:16:03 And then there's lots of pages and pages and pages and even a few more pages of Redfish and Swordfish to NVMe concept mappings. Lots and lots of hours of work representing those mapping details. All of those properties were reviewed and documented and intended to make it easy for the NVMe developer, the Redfish Swordfish developer, to go from the thing you understand to the thing from the other domain. So let's take a look at how some of these things in the mapping guide are described.
Starting point is 00:16:39 So the basic model, there's a number of documents in that mapping guide that use this basic model. It can be a little bit overwhelming at first, but it's really helpful once you're familiar with it I've had a number of people ask me how they're supposed to interpret this this model so we'll take a couple look at some slides and dig into a little bit further zooming in on just part of that mapping model I try to make it bigger here so you can read it and zoom the legend even larger yet. All of these figures are set up with the redfish swordfish objects on the left and the Nvimi objects on the right and lines between them to show how they all tie together. If you look at the legend here you'll see that the green lines between objects says these are equivalent objects. The
Starting point is 00:17:29 blue or purple lines show a relationship and the dashed line indicates that there's a link between the objects. So if you're an NVMe developer you want to find your NVMe object on the right use those relationships lines and you can map that to the Redfish Swordfish objects on the left. Conversely, if you're a Redfish Swordfish developer, you want to go to the other direction and start with the figures on the left. The major model objects are shown in the figures, and here's an example that I pulled out from the simple SSD model. The figure here looks a little bit different than in the document because I've scrunched it a little bit to fit on the page.
Starting point is 00:18:09 And, of course, zoomed the legend for readability again. So if we take a look at a couple of examples here, the NVMe namespace, roughly bottom center, it has the green line that is connecting over to volume, indicating that the NVMe namespace is equivalent to Redfish Swordfish volume. It has a relationship line showing that it is part of the NVMe subsystem, and it is linked to an I.O. controller. In NVMe Express terms, we would say that it has been attached to an I-O controller. Going and looking at the I-O controller, we see that the NVMe I-O controller has a green line over indicating it is equivalent to a Redfish or a fish controller.
Starting point is 00:18:52 It is part of an NVMe subsystem and it is linked or attached to a namespace and it has the additional linkage of being a physical element. The relationships that you see here for the NVMe side are of course copied over and very similar on the Redfish Swordfish side where you see the controller it has a relationship being part of storage and it is linked to the attached volumes. Digging deeper, the lower level properties can't be shown in a graphic or at least one you can't read without a really big screen. We can't fit them into the mapping guide. So the mapping guide has a lot of descriptive text to make it easy for you. It's been written from the Redfish Swordfish perspective.
Starting point is 00:19:44 So it's important to remember you're coming into written from the Redfish Swordfish perspective, so it's important to remember you're coming into it from the Redfish Swordfish perspective. If you're an NVMe developer, that's a little getting used to, but it's usable. So you want to find the Redfish Swordfish object or property that you want to describe. Most of these objects are existing objects that are just properties that we just mapped to. Most of these objects are existing objects that are just properties that we just mapped to. There are a few things where we had to create some new NVMe specific properties for new NVMe concepts. Once you've found the object or property you want to describe, you look it up in the mapping
Starting point is 00:20:18 guide and most of the objects or properties have a mapping to NVMe with pointers to the specification location for where to get the information you need from the NVMe Express specifications. These current mappings refer to NVMe Express 1.4, specifically I believe they refer to 1.4a, which has some edits from an engineering chain notice. If you're an NVMe Express developer or been reading the latest news, NVM Express has released the NVM Express 2.0 specification bundles. This document has not yet been updated to refer to the NVM Express 2.0 specifications. We do plan to get that in a future
Starting point is 00:21:00 revision. I find the list of tables on page five a good way to get an overview. All of the properties are available, have a table that describes the property, so they show up really nicely in the list of tables on page 5. We've been thinking about some ways to make the document a little bit more easily navigated and there may be some improvements in the future that provides some navigation aids in the document. So from examples in this document, going back to the JSON profiles and looking at the Sorteficie and Bimifreni in JSON profile, I grabbed the volume and the volume has two property requirements for allocated bytes and consumed bytes. I've
Starting point is 00:21:45 highlighted the consumed bytes here and we're going to look at how to fill out the consumed bytes. If we look at the way that these properties are stacked, we're in the property, the property requirements underneath the property are capacity, then data, then consumed bytes. So we call that property, or capacity.data.consumedbytes. So how do I number them? How do I map the number of bytes used? We found our property, capacity.data.consumedbytes. Looking up in table 5, we see that that shows up on page 211 table 127. And looking at other index information inside the document, we can see that that is in section 6522, which is part of the namespace. We grab volume,
Starting point is 00:22:34 volumes, map to namespaces, and so we've got the right information. I did put an asterisk on this because there are multiple NVMe objects that have the concept of capacity, so this consume bytes thing shows up in several places. We're specifically interested in the one that's part of the Swordfish volume or the NVMe Express namespace. Pulling out just a couple of the key values from that section, the description, the number of bytes consumed in this data store for this data to type, and mandatory, yes, which matches the profile which had a list that is mandatory by nature of being included with the brackets. So how do we fill that out? The top there, I've grabbed a screenshot
Starting point is 00:23:21 from the table showing the property capacity..data.consumeBytes, and over on the right-hand side, it says that the matching NVMe spec property and field is called the namespace utilization, or NUSE, often called the NU's field in the NVMe specification. The NVMe Express specification section and figure is NVMe 1.4a, section 5.15.2.1, identify namespace figure 247. Walk you right into the NVMe Express specification to the exact location you want to be. If you've implemented for 2.0 that's easily transposed over so that's we've tried to do that everywhere possible points you to the exact NVMe construct where you could get this information you may not fill in the
Starting point is 00:24:16 information directly from an NVMe construct you may have some sort of an internal database and use the same values from that database that you would use to fill in the values for reporting over an NVMe host interface. But this helps you see that they're expected to be equivalent values. I do strongly recommend you read the notes too. Sometimes they have very important information. Over in the bottom right hand corner I've copied a screen grab of the notes from this one. It's not really very readable. This particular one doesn't have a lot
Starting point is 00:24:45 of additional information, but there are some that have very useful information. For example, some properties do not map directly to values that are reported in NVM Express, and there's information on how you may combine a couple of NVM Express concepts. Sometimes run some math, sometimes just add a couple combine a couple of parameters sometimes the parameters come from other places so read the notes as well so now you can combine the profiles in the mapping guide start with your baseline profiles from the baseline requirements from the profile then fill in the properties using guidance from the mapping guide, review the mock-ups from the mapping guide and http://sarfishmockups.com
Starting point is 00:25:31 for additional recommended properties for some common configurations, and review the properties and reach-in view me object in the mapping guide to identify optional properties that you might want to expose. For an example of how it all comes together, there's a Storage Developers Conference presentation from Phil Caton on using SORTfish for creating and exporting logical NVMe subsystems called Managing Exported NVMeOF Resources and Fabrics in SORTfish and Redfish. Now this has some useful examples showing how everything all comes together.
Starting point is 00:26:10 If you'd like to get involved or get started, here's all of our standard links. Everything we talked about today comes from the Swordfish Standards, available at the link in the top left. The DMTF Redfish Standards, mentioned in the bottom left, are also critical to support of swordfish. And of course, don't forget to visit nvm express and your nvm express specifications link there on the bottom right and there's a number of other useful resources and groups that we work with for snea swordfish please do take a moment to rate the session your feedback is important to the to us i can tell you that the snea technical council spends a lot of time reviewing feedback and trying to make next year's event better than this year's event every year, and we do appreciate
Starting point is 00:26:51 your feedback. Thanks for listening. If you have questions about the material presented in this podcast, be sure and join our developers mailing list by sending an email to developers-subscribe at snea.org. Here you can ask questions and discuss this topic further with your peers in the storage developer community. For additional information about the Storage Developer Conference, visit www.storagedeveloper.org.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.