Storage Developer Conference - #34: Hyper-V Windows Server 2016 Storage QoS and Protocol Updates

Episode Date: February 28, 2017

...

Transcript
Discussion (0)
Starting point is 00:00:00 Hello, everybody. Mark Carlson here, SNEA Technical Council Chair. Welcome to the SDC Podcast. Every week, the SDC Podcast presents important technical topics to the 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 podcast. You are listening to STC Podcast Episode 34. Today we hear from Matt Kurjanowicz, Senior Software Engineer Lead, and Adam Birch, Software Engineer, both with Microsoft, as they present Hyper-V Windows Server 2016
Starting point is 00:00:46 Storage QoS and Protocol Updates from the 2016 Storage Developer Conference. My name is Adam Birch from Microsoft. My erstwhile colleague is Matt Kordanowicz. We'll be talking about Hyper-V Windows Server 2016 storage quality of service or storage costs as well as protocol updates to all of the Hyper-V remote storage protocols. So first we're going to talk about storage costs. We'll do a deep dive on to how it works, what are the messages involved, what is the Hyper-V client behavior and how can you drive the messages in the protocol from the Hyper-V host.
Starting point is 00:01:29 After that, Matt is going to go over some of the notable changes in the other Hyper-V protocols, including Hyper-V remote storage, remote shared virtual disk, as well as two new protocol documents, the virtual hard disk V2 and Hyper-V replica log formats. So first, what is storage quality of service for? So the scenario we're talking about are virtual machines running any sort of OS or workload running on Hyper-V Windows Server 2016 hosts. This protocol doesn't involve the guest OS in any way, so we're just not going to worry about that
Starting point is 00:02:08 for the purposes of this talk. Storage quality of service lets you allocate I.O. on a per-workload business need. So if you have resource-intensive applications, you can make sure they get the performance they need without being impacted by applications that are less business critical. In addition, it reduces the need for over-provisioning storage capacity in order to mitigate the impact of peak demand times. So you can maintain a certain level of performance for all of your workloads,
Starting point is 00:02:42 regardless of what other workloads are doing due to peak demand. So what does the protocol do? So the protocol lets you perform several operations. First, you can create a logical flow and associate a handle to that logical flow. So the handles that we're talking about are S and B handles. MSS-QUAS uses S and B too as its protocol transport. So whenever I talk about handles, we're talking about S and B handles. And if I talk about FS controls, we're talking about S and B FS controls. A logical flow is a set of IO that we care about from an initiator to a target.
Starting point is 00:03:27 So the initiator in our case is going to be a virtual machine and the target is going to be a remote server or a set of disks on that remote server. However, it's portioned up. So we can create a logical flow and associate multiple handles to that same logical flow using a logical flow ID. We can tag those logical flows with policy IDs or configure a client-defined policy on them. We'll get into that in a little bit. We can provide performance data on the logical flow from the client to the server, and we can retrieve status information about that logical flow from the server, such as, am I actually meeting the quality of service that I asked for? So what is a policy, a cost policy?
Starting point is 00:04:12 So today, the cost policy is made up of three basic things. The maximum IO rate, or what we call the limit. This is measured in normalized IOPS, and I'll tell you what a normalized IOPS is in in a moment. The minimum IO rate, or the reservation, which is also measured in normalized IOPS. The maximum bandwidth, or the bandwidth limit, which is measured in kilobytes per second. And then optionally, a policy ID. So this GUID is just a GWID that identifies a policy on a QoS server. This means that it's a server-defined policy. So in the SQOS protocol, you can either have a client-defined
Starting point is 00:04:55 policy in which the client says, this is the limit reservation and bandwidth limit that I want for this particular logical flow. Or you can have a server-defined policy, where the client sends the GUID representing the policy ID for the policy it wishes to subscribe to. And then the server will respond and tell them, OK, here is the limit and reservation that you're getting at this time. So clients are normatively required to obey the limits of the storage cost protocol.
Starting point is 00:05:29 That means if you tell the client, here's your IO limit and your bandwidth limit, it is not going to issue IO at a rate higher than those limits. The Hyper-V host will do this. How you implement the reservation is up to the server. And you can do that in any way. And how you implement the policies, how you manage the server-defined policies, is also up to the server.
Starting point is 00:05:59 That is a question outside of the MS-QUAS protocol document. So for Microsoft servers, that means we have the, it's a tool in the failover cluster manager, which actually manages the different policies that you can configure. And then the VMs and the Hyper-V hosts can subscribe to those policies. But again, that's up to the implementation of each remote server. It's not defined by the protocol itself. So, normalized IOPS.
Starting point is 00:06:33 So if you were in this room for the last talk, you'll know that you saw the curve that she demonstrated about the trade-off between transaction efficiency, you can have lots of small IOs, versus transfer efficiency, where you have large IOs that take a long time. In order to weight those things properly when you're doing quality of service, you don't want to penalize someone who's doing a ton of small IO the same amount that you would penalize another initiator who's doing a ton of really large IOs.
Starting point is 00:07:03 Because obviously, if you're doing two megabyte reads, those are going to take more time than one kilobyte reads. So we don't want to treat those equivalently. So we use this idea of normalized IOPS. So this is just normalized input-output operations per second. So we count in eight kilobyte blocks. It's kind of hard to see up here, but we have this table is IO size and then the normalized size. So anything smaller than 8 kilobytes is treated as a single
Starting point is 00:07:32 normalized IO. And anything larger is divided by 8 kilobytes, rounded up. So 16 kilobyte is two normalized IOs. 17 kilobyte would be three normalized IOs. And 17 kilobyte would be three normalized IOs. And this is just an accounting trick to make it possible to balance between these two varieties of workloads. Now the default is 8 kilobytes for Microsoft servers, but this is configurable in the protocol. And the server tells the client what that base I.O. size is going to be. And in addition, the perf counters and metrics in Hyper-V hosts are reported, or part of some of them are reported in normalized I.O.
Starting point is 00:08:18 So you can go ahead and even change that normalized I.O. size and you'll immediately see your perf counters change because the division factor has changed. Yes? You mentioned the server reports to the client the IOS size. Sorry, say that again? You mentioned the server reports to the client the IOS size. How is it reported? So, we'll get into the messages in a minute, but as a part of, you know, associate,
Starting point is 00:08:47 when the first logical flow is set up, you'll get back to the base IO size in the response. But we'll go into more detail about the actual messages in a few minutes. So as a sort of background for establishing, before we talk about the messages, I want to talk about some example configurations and how that looks within the framework of QoS.
Starting point is 00:09:13 The default policy, right after you create a VM, you get no minimum, no maximum, no bandwidth limit and there's no policy, which means the policy ID is set to the zero of GWID, which is defined as no policy. So you can see here we have three VMs in this chart. And the performance varies, but you'll notice that these two more resource-intensive VMs, VMs 2 and 3, are sort of almost starving the third VM. It's getting very little, seeing very little performance. One thing I want to mention too is each VM disk will have a unique logical flow ID
Starting point is 00:09:52 and the initiator ID of each logical flow is the VM ID. So in this example, we're considering just a single disk for each of these VMs, but you can imagine that this could even be a single VM with three different disks, and these would all be treated as separate logical flows in Quas.
Starting point is 00:10:14 So now we can consider having a minimum configured. So we're guaranteeing a basic level of performance. But there's no maximum, so these disks can get as much performance as possible if the, I mean, these virtual disks can get as much performance as possible, so long as the remote server is not too busy. So in this case, we've configured a minimum of 200 IOPS, and now the VM1, which is the smaller, the lowest resource-intensive VM, it actually is getting enough performance now, and it's not being starved.
Starting point is 00:10:50 You'll also notice that the other VMs have slightly lower performance. That's because they're being limited by the QoS server in order to make sure that the other VM is not starved. So you can also just configure a maximum. So here we are tamping down on these really resource-intensive VMs, You can also just configure a maximum. Here we are tamping down on these really resource intensive VMs. You'll see here also that the third VM that was getting started before still is able to
Starting point is 00:11:16 get resources here because the others have been limited to 500 IOPS. You might want to do this if you're providing certain service level agreements and you don't want to allow customers to get more than they've paid for, just for example. You can also configure things into a window. So this gives you more consistent performance. So now everyone is limited between 100 and 200 IOPS in this case. I can go back if you want and then finally we have the case where the minimum and the maximum are configured to the same value. In this case customers will see an extremely
Starting point is 00:11:54 consistent level of performance assuming that they're actually generating enough application demand now in the case where the application is not actually generating enough requests, it's not issuing 100 IOPS per second in this particular case. Obviously, your cross-server can't provide
Starting point is 00:12:15 100 IOPS per second. So that's one of the challenges of implementing these reservations, is making sure you can distinguish between the case where the server is not providing enough performance and the cases where the application is actually just not demanding enough performance. And that's also kind of a problem for
Starting point is 00:12:34 configuring the application. Yes? So in cases where minimum and maximum applications are different, how does the server provide the performance after the minimums have been met? So the question is, how does the server divide the performance after all the minimums have been met?
Starting point is 00:12:55 That is not defined in the QoS protocol. So it's up to your server implementation. I think the Microsoft server tends to just try to divide things fairly once minimums are met. But your server could do whatever it wants. And you could even have a separate feature that is provided in the policy IDs that you specify. Okay, so now we're going to get into the actual messages. Conveniently for us, there's only one message.
Starting point is 00:13:25 The FS control, Storage Costs Control. So it has a request structure, which contains information about the policy, as well as perf counter increments. Now, policy information includes, it could be either the bandwidth limit and reservations specified exactly, or just a policy ID. It's normative for the policy ID to be separate from client configured limits. It can be either one or the other.
Starting point is 00:13:55 Then there's a response. Excuse me. This is per logical flow? Yes, this is per logical flow. Now, I'll expand on that in a minute. The response structure contains policy information. So if you are using a client or a server-driven policy, that means the client just says the policy ID to which it is subscribing, then the server will respond and say, okay, here is the limits and reservations that are assigned to you at this time.
Starting point is 00:14:30 It also contains the status, which is just how is the logical flow doing? Is it meeting its reservation or not? Is the policy ID one that the server knows about? Because you could misconfigure it and send the wrong policy ID, and then we have a status code that says that's unknown. This is a misconfiguration. As well as the time to live structure. Time to live field. So this indicates how long are the policy values valid.
Starting point is 00:14:56 So if you have a server-defined policy, you could have that policy change over time or change in response to various workloads. So in the Microsoft server case, this value is always set to four seconds, I believe, which means that after four seconds, the client is responsible for querying again what are its new policy restrictions. So this actually leads to some interesting cases where for Microsoft servers, we have this notion of disaggregated and aggregated, I believe, are the terms, where the server policy, you can subscribe to a policy for either be every VM gets at least 200 IOPS, or it can be all of the VMs sum to 200 IOPS, say. And that way, if you're using, say, that sum policy, then we'll change the policies that are reported to the client depending on how the other clients are behaving to ensure that everyone meets the right um has the right quality of service that they've asked for
Starting point is 00:16:13 so that's just some of the interesting things that you can do with the time to live and the server defined policies so there's five different message options, and these message options can be combined. So we'll talk about those. So there's set logical flow ID. This just says, okay, for this handle, I want it to be associated with this logical flow ID. Now, for Hyper-V clients, generally this means you're going to, the case in which you're going to associate multiple handles with the same logical flow is typically when you have differencing disks,
Starting point is 00:16:52 especially in the case of snapshots. So if your VM takes a snapshot, that means we now have a differencing VHDX with the previous one as its parent, and those are both associated to the same logical flow. So the read IO that is going against the parent is still counted against that QoS client. You can also set policy parameters, which is either the QoS policy ID or the policy parameters itself.
Starting point is 00:17:25 You can probe the policy, which means conditionally update the policy, and the logical flow ID. So the client will say, this is what I have right now. This is the logical flow ID that I wanted and the policy parameters that I wanted. Is this consistent with what the server has? And the server will, if it's different, then the server will update it. You can also get status, and you can update counters. So this lets the Quast server have a better range of information about the storage workloads that are currently happening,
Starting point is 00:18:00 which can help you to make better decisions and provide aggregated reporting at the storage server location. So those are the five message options, and these can be combined. How do we trigger each message? So when you're implementing costs, you want to be able to know how to actually exercise the protocol.
Starting point is 00:18:24 So to set the logical flow ID, it's pretty easy. You just add a disk to a VM and turn the VM on. So actually, I think I might have left out a step here. It's possible that we don't actually set this unless you actually configured a policy at all. So I might have left out a step. Luckily, I've got that step right below here. So if you want to set a policy, you just use the set VM hard disk drive commandlet.
Starting point is 00:18:54 So I provided some PowerShell examples to show quickly how you can exercise the protocol. So the set VM hard disk drive lets you set the policy parameters of itself like the limit and the reservation as well as the policy ID. So the other messages, these are actually sent all together with the other three options specified. Probe policy,
Starting point is 00:19:20 get status, and update counters. The easiest way to trigger this is to have some sort of workload running in the guest that's generating I.O. And then this message will be sent on the next I.O. after the time-to-live timer expires. So the time-to-live timer is, again,
Starting point is 00:19:40 the field and the control response structure indicating how long the policy values will be valid. And so after, in the Microsoft server case, after four seconds the client will send another request to make sure everything is still valid as well as to update performance counters. So this one is easy to trigger. You just run a workload and it will be triggered after whatever timer you have specified. So the recent updates to SQuAS in the past year, I believe,
Starting point is 00:20:18 are we've added bandwidth limits. Previously, we just had the IO limits, and we've added a configurable base IO size, which can now be configured on the server and will be propagated to all of the clients. If you have multiple servers in your setup, it's important that you configure base IO sizes to be the same so you don't get some confusing behavior.
Starting point is 00:20:42 Okay, so that concludes the storage cost deep dive portion but we can take some questions right now yes yes right so this is these are commands you run on the hyper vhost side and this is predicated on the fact that your disk
Starting point is 00:21:04 is on your own server, or whatever the server is in this case. The question was, are these commands run on the Hyper-V host or on the server itself? Yeah, so is it a client-defined policy in that case, or is it a server-defined policy? So setting the parameters on the host site.
Starting point is 00:21:27 Right. So in the example I have, setting the parameters themselves, where it says maximum IOPS and minimum IOPS in the set VM hard disk drive. But if you set just a QoS policy ID, then the client will send a message
Starting point is 00:21:42 saying I want to subscribe to this policy ID, which is a GUID. And it's up to the server to know what that is. Yeah. Yes. If your VHDX is backed by a SAN volume, how do you know the capabilities,
Starting point is 00:21:55 the QoS capabilities of that SAN? Right. So if it's backed by a SAN. So this is, SMB is a transport for this protocol. So if you're not using SMB, then it's going to fall outside the parameters of MSS class. So the server is expected to maintain both counters per logical flow, right?
Starting point is 00:22:22 How do we query it from the client? So I don't know if the server is expected to maintain those. I think the client is expected to maintain those. I'm not sure if. Where do you assign the logical flow IDs? Suppose I have three disks associated with one VM, and I have different flow IDs, and I
Starting point is 00:22:39 want to look at the performance of one disk, I suppose. OK. So how do I specify that? So the logical flows IDs are actually set to the virtual machine disk ID. It's not the virtual machine ID. It's a disk ID. So it's specific for each disk.
Starting point is 00:22:55 So I can query the performance context for each specific one? Right. That's correct. Yes. So the Hyper-V host will report that. Is there any dependency on the network on the host or is it security done by the
Starting point is 00:23:09 Hyper-V host software? So the question is, is there a dependency on the network hardware? And there is no dependency. This is purely software. So the transport is SMB. So anything below SMB is black magic to us. So you don't have any current POS capabilities for the Hyper-V storage stack? So without the back end?
Starting point is 00:23:35 So the Hyper-V storage stack can do limits on its own. And I believe, I'm not sure about the reservations. We used to. I can't remember if it's still there. For now, we've just moved everything to the server backend now. Yeah, but the limits are required by the protocol to be honored by the clients. So we honor them. And that's because it's the easiest place to do the limiting at the client.
Starting point is 00:24:00 Yes? The QID protocol is set for VHDX file, right? Yes, the policies are set per VHDX file. But you can set the same policy to you on all of those VHDXs if you wanted. Can you say that it would be in general? Not directly, but there's easy PowerShell scripts to do that, for example. Yes? A couple things that are worth exploring quickly,
Starting point is 00:24:29 right, we've got a test event going on now. Would any of these work if the server were, let's say, your normal Windows 10 laptop? Or do these require Windows 2016 only? So these require Windows 2016 only? So these require Windows 2016. All right. So parts of these you mentioned were added in stages. Sorry.
Starting point is 00:24:53 Yes, this will require service 2016. Sorry, I was doubting myself for a second. So, you know, we tried the set VM, hard disk, whatever. Right. You know, you're running equity from client to client. Okay. Running two Windows 10 boxes or whatever just for testing because you had a lot of money.
Starting point is 00:25:13 This would fail. The set VM hard disk thing would fail. I believe in R2, 2012 R2, I believe, we actually, I think we had this commandlet. However, it did not trigger a protocol message because at that time our cost implementation
Starting point is 00:25:29 was local to the Hyper-V host. So if we want to experiment with this the minimum version we should use 2016 stuff?
Starting point is 00:25:38 Yeah. And some of the preview versions like the preview versions will have it as well. But not the 2016 client stuff? 2016 client stuff?
Starting point is 00:25:48 No, that will have it as well, actually. Yes, 2016 client will have it. Because right now it's useful to experiment with both. Right. Yeah, so, sorry, I think I misunderstood. The question was, would the Windows 10 clients, for example, have this PowerShell capability? And the answer is yes, it would.
Starting point is 00:26:05 You just need to make sure your server either has your own QoS implementation or it's Windows Server 2016, or one of the recent previews. Because Hyper-V would work Windows client to Windows client, right? Yes, yes. And it's a heck of a lot easier to test it that way. Right.
Starting point is 00:26:22 But the QoS capabilities are specific to the back-end capabilities. And what I mean by that is like the QoS server. So like such as defining what this policy ID means
Starting point is 00:26:34 is specific to Windows Server 2016. Because that's a and for Microsoft Server it's a feature of Failover Cluster Manager which is not a client feature. And that actually brings up an interesting point. For our testing purposes, sure you can set these things in PowerShell,
Starting point is 00:26:52 but you're expecting the cluster manager would do some magic and there'll be automated stuff in the background that actually does this. These are bad, they won't know these values to set typically. Right. So the admin's expectation, depending on how you would do it, is either they would know the values to set, or more likely they'll just set this policy ID, which is managed by the storage backend. So the policy ID is the more, I think, would probably
Starting point is 00:27:25 be the more typical case. And just to be absolutely clear, there's no point in playing around with this really until you get to 2016, even though there's a subset of stuff that's available for other? DAVID KAUFMANN- Right. That's correct. If the server fails to maintain the policy,
Starting point is 00:27:42 fails to provide the guaranteed policy, will the client generate an error saying that in the four seconds the server failed? Right, yes. So the question was, if the server fails to maintain the policy, will the client generate an error? Yes, we generate some sort of warning.
Starting point is 00:27:57 I can get specifics for you, but... Yes. Two questions. The first question is, the AWS virtual machine has a feature called the first IO. It allows you to beyond the maximum limit for duration. And the duration depends on the IO credit concept. So to make the software have this kind of... Sure.
Starting point is 00:28:32 So the question was about AWS Burst IO, which lets you go past the limit, but I misunderstood one part. You said based on the IO... Credit. Oh, the IO credit. IO credit. Okay.
Starting point is 00:28:45 Right. So we don't credit. Okay. Right. So we don't have a burst feature exactly. However, we do have the case where if you're, say you have a workflow that's been mostly idle for a while and has not met its maximum, because we're averaging things over some time scale, you will get a slight burst as your idle time averages out with your new high activity. And then that should average out to become your maximum
Starting point is 00:29:11 value within that time period. OK, yes? So going back to the Windows 10 questions, if I do this on a Windows 10 fly, it will be rolled and equal. So only the last step will be a way of doing it, right? Yes. Yes, that includes the limit, yes. Not the minimum, right? Not the minimum, because the minimum does not have,
Starting point is 00:29:41 yes, not enforced here. Yes. What's the need, or what's the use case, of having a bandwidth limit? Right. And your IOs limit is always normalized. So it's a sort of a proxy for your bandwidth limit. Right.
Starting point is 00:29:57 So it just gives you a finer grain of control. The question is, why do we have bandwidth limit if your IOs are already normalized? It just gives you a finer level of control. Something lower than HP. Yeah. So, you know, I would argue that, and that's the reason it's a recent update,
Starting point is 00:30:16 is because we would say, you know, most of the time you're not going to need to configure a bandwidth limit at all. Just configure your IO limit, which is normalized and it should work out. But if you have particular workloads or maybe you're playing around with a different base IO size, the bandwidth limit can be very useful.
Starting point is 00:30:34 Okay. So if there's no more questions about Quas, I'm going to turn it over to Matt and we can always answer more questions as we go on. Thanks, Adam. I'm going to quickly go over some of the other updates in Hyper-V remote storage protocols and things that relate to the constellation
Starting point is 00:30:55 of protocols that Hyper-V clients would use. We'll start with the biggest changes. The biggest change is that we have some new documents that you might be interested in or may not be interested in, depending on whether it's up to you. The biggest changes is that we have some new documents that you might be interested in or may not be interested in, depending on whether it's up to you. One of them is we took our virtual hard disk format,
Starting point is 00:31:11 which had been documented on MSDN for several years now, and we made it a supported normative document. It's supported by the Microsoft as a protocol, by our protocol support guys, such as Diane and Tom and other folks in the room, and a plug for them. They're great, and they know our protocol is better than we do.
Starting point is 00:31:31 It's wonderful. Also, they were running around looking for an adapter for us, so they really are a support. I love it. It's awesome. Thanks, guys. Appreciate it. So the VHDX is our VHD second version file format.
Starting point is 00:31:45 Go take a look. Send us any feedback or any questions you might have about that. In relation to that, we have a replica log file format. This is the format used for the Hyper-V replica feature, which is asynchronous data replication from Hyper-V hosts to either Azure or to another remote data center. So that's what we do. Why do you care about these?
Starting point is 00:32:10 Well, in general, you don't unless you're going to implement the MS-RSVD version 2 stuff that we've been working on and that we're releasing in Windows Server 2016. In those cases, you have to support this concept of snapshots and exporting a snapshot. And RSVD is a wire protocol, and so it doesn't really tell you how you should export these snapshots, right? It doesn't say what they need to be. We'd really like to promote this idea of VHDX and HRL as interchange formats for these types of things, so things that storage vendors understand, especially VHDX. Most storage vendors and cloud vendors already understand it, but since we're referencing it and talking about it,
Starting point is 00:32:54 we're bringing it into the normative space. So Windows works better if you use these file formats, but again it's not a normative must requirement. It's an option for you. Yes? This statement that I was bringing forward, what's better? Yes. The possibility that it goes through the same thing. What better?
Starting point is 00:33:17 Is it more efficient? Or is it possible? Is it not possible? Right. Better is a bit of an interesting word here, especially when it's, in this case, some of the functionality doesn't work unless you use these file formats.
Starting point is 00:33:31 Right. I would be very careful in bringing a distinction between RSVD and, say, interoperability throughout the rest of the world. RSVD is very specifically a wire format. It says, hey, send a command to the server saying, like, take a snapshot.
Starting point is 00:33:51 It doesn't tell you how you should export that snapshot or how you should take that snapshot because it's just a wire format. Stepping back a level and talking to us saying, well, if I'm gonna implement RSVD for Windows Hyper-V hosts then the whole end-to-end scenario lights up well, if I'm going to implement RSVD for Windows Hyper-V hosts, then the whole end-to-end scenario lights up if I use this VHDX thing, which is here in this nice document for you to understand.
Starting point is 00:34:14 And here's the main profitability. So when you say profitability, someone has a story for Hyper-V, but Hyper-V storage, is it a chain of hand? I mean, if you've got a Hyper-V host and a non-Microsoft file server. That's what I mean. Any other questions about that before I go on?
Starting point is 00:34:35 No. I also want to talk a little bit about Hyper-V remote storage, HVRS. I know for some of you, this is the first time you've heard of this. Some of the conversations I've had today, this was new information. Hyper-V remote storage is the document, is a survey document that describes, all right, let's say that you want to interrupt with a Hyper-V host and you're implementing one of these protocols.
Starting point is 00:35:03 Some of them have lots of optional things. Like, for example, SMB2 has durable handles. And we say, not optional, if you want to do a Hyper-V host. So that's what it talks about. For example, under file systems, we talk about, hey, you might be allowed to have sparse files,
Starting point is 00:35:22 but for Hyper-V hosts, sparse files are not supported. So that's the purpose of this document. If you're a little bit confused about, hey, I'm trying to make the best file server I can for Hyper-V to host its stuff on, you also want to take a look at HVRS. There have been some minor tweaks and minor updates
Starting point is 00:35:38 throughout it based on feedback we've received from licensees and other folks in the field. So that's what that is. But a plug for this document. Like I said, nothing really hugely significant in the last year or so for this document. We've been making continuous updates based on this. Okay.
Starting point is 00:35:57 Talked a little about, you saw this RSVD thing. I've mentioned it. RSVD stands for Remote Shared Virtual Disk. It's a way of taking two virtual machines and pointing them at the same virtual hard drive sitting on a file server somewhere else, and both VMs accessing that at the same time. In Windows Server 2012 R2, we released version one
Starting point is 00:36:17 of this protocol, which let that happen. In Windows Server 2016, we're implementing version two of this protocol, and the biggest differences here are that you can take snapshots. And what is a snapshot? It's a point in time of a disk, right? So you can imagine what we use it for. We use it for backups.
Starting point is 00:36:39 So you want to backup a virtual machine, you have to take a crash-consistent point in time that you can copy off somewhere else. That's what these snapshots are. Now you can do it for these shared disks. In Windows Server 2012, you couldn't. So if you implement version 2 of the protocol, that's what you get. Customers like taking backups, so keep that in mind.
Starting point is 00:36:55 Also, you can resize these disks while they're online. Customers like being able to make their disk bigger when they run out of space instead of having to take their whole highly available cluster workload offline. So customers want that. Yes. We've stopped making changes for a while.
Starting point is 00:37:18 If you've been following along, you've seen us come up with a constant series of updates from after Server 2012 R2. We had the Windows, that was what, Windows 8? I think in the Windows 8.1, we released some minor updates because we've been working on this for a few years. And then in the next update and the next update for Windows 10, you've been seeing some of these information leak out over time.
Starting point is 00:37:38 Server 2016, this is what we're calling version 2. Okay, yeah. So version four is some of the context after the, but beyond that, like, some of the features that we've enabled, like migration and besides this, which are not enabled in 2012 R2,
Starting point is 00:37:52 we can do from this day, because we're in terms of version one. Will it still be going back into R2 once we're almost functional back to stream? Right, we have no plans at this time to backport any functionality to Windows Server 2012 R2 hosts or file servers. You mentioned that with R2 you can migrate to the cloud by doing the log. Is that the only way to interface with Azure?
Starting point is 00:38:16 Is that your main way? So Microsoft has a product suite. The question is, is this replicate to cloud the only way to interface with Azure? Microsoft has a product suite to take on-prem VMs and move them to Azure. One of them is by using this Hyper-V replica. You can also take a physical machine and do physical to virtual. It'll also do virtual machine to virtual machine in Azure.
Starting point is 00:38:41 One more efficient than the other, or one more encouraged than the other? I think it depends on what, the question is, is one encouraged or more efficient? I'm certainly not gonna speak from a Microsoft business encouraged standpoint one way or the other, but you can think about perhaps the customer cases that might be there.
Starting point is 00:38:58 One customer case is, I'm decommissioning a machine in this site and I'm bringing it on to another one. Okay, that's one customer case that our customers want to do. Another case is I have my primary data center here and I just want to rent a disaster recovery site. And so I'm going to use replicate to the cloud so that I've got an asynchronous replication to a disaster recovery site. But again, that's really not in scope for what we're talking about here, but just a
Starting point is 00:39:25 little bit of context in what customers might want to be doing with these types of features and what a customer might be doing with your file server if they've also got an Azure account. Does the RxMe protocol respect the QoS settings when multiple VMs are sharing one particular VHD and there are conflicted QoS typesetting. The previous protocol that you were talking about, do they coexist and work well together? The question is, does the storage QoS protocol and the RSVD protocol work well together? And Adam, do you have an answer for that? We might have to get back to you on that. I know that sounds like an obvious question based on the order of this presentation,
Starting point is 00:40:03 but I just want to double check to make sure I'm right before I do that. Any other questions about this? Okay. All right. So I mentioned some protocol updates. In the last year or so, big updates are there's these things called meta operations, this whole snapshotting thing that's happened through this meta operation, sort of an internal nomenclature that we've adopted for this. But you can start snapshot, you can export snapshots, there's whole snapshot
Starting point is 00:40:34 stage stuff. I encourage you to go read the document and email our protocol support folks if you have any questions around that. There's also this concept of getting a smallest safe virtual size. So if you're resizing the disk online or there, there's a new message there. It says it's coming in Windows Server 2016 RTM. We're almost there, I think. Almost. Hopefully at some point we can stop talking about
Starting point is 00:40:56 it's coming and it will be there and available in your hands. But it should be available in the latest preview if anybody's doing some internal tap stuff or internal preview type stuff in the server 2016. Ready? Okay. I'm going to move on quickly to VHDX.
Starting point is 00:41:10 Like I mentioned, what was on MSDN now it's in normative. I want to be very clear, it does not describe how to relate snapshots to each other. It doesn't describe what SCSI commands you need to implement. In fact, we're never going to, never is a very hard word, but at this point we are not describing in any of our protocol documents the required SCSI command set to make Windows work, in part because we don't know what the guest is. Maybe it's Red Hat, maybe it's Windows, maybe it's something else. And what works best there, I don't know.
Starting point is 00:41:37 You have to talk to each vendor. We also don't, in that line, we don't describe SCSI behavior. That's been standardized. Mr. Weber was here earlier today. I'm sure he'll, we don't describe SCSI behavior. That's been standardized. Mr. Weber was here earlier today. I'm sure he'll tell you all about required SCSI behavior. They do a great job with all that. It also doesn't describe any extra parser behavior. It's just a file format.
Starting point is 00:41:56 And we're also not describing this VHD set concept that you might see in Microsoft implementations. We consider that, especially for snapshots in RSVD v2, unnecessary. We think that you should be able to, throughout the protocol primitives, support all those things, and we think that you'll be able to innovate on that
Starting point is 00:42:17 more than just following our file format. So I think it depends on what you view your innovation areas in. That's definitely one area you could innovate in while still following our protocol and interoperate. So that was a whole lot of what we don't do, but we do describe a file format.
Starting point is 00:42:34 So the VHDS is up to the implementer? Correct. Yeah, the VHDS is up to the implementer of how they want to define it. So Microsoft's learning interface is in storage, so storage doesn't really care as to being able to format a bit or what snapshots they're working with, does it
Starting point is 00:42:49 need to extract information? Right. The question is, how does Microsoft interact with it? That's all described in RSVD version 2. Essentially, you can sum it up as how to interact with a set of DHT files. You have a comment that RSVD 2 can crash consistent snapshots. Yes.
Starting point is 00:43:04 If it's inconsistent, you can pop it on RSVD or is that what you're thinking? Yes. By that I meant that in the protocol sense, the question is, I mentioned crash consistent. From the protocol sense, we're actually not dictating whether it's crash or application consistent. We're just saying that at that point it's just a copy. There is some, there are some protocol primitives to say, hey, stop all IOs on this. I'm freezing all the IOs. And so it plays in well with what we do. But realistically, it's up to the client side
Starting point is 00:43:35 to guarantee that they want to stop sending IOs. Right. Any other questions? Okay, cool. All right. Most obvious sentence ever. Well, maybe not, I guess. The Hyper-V replica log file format
Starting point is 00:43:56 describes a log file used by Hyper-V replica. Sorry about that. Really, that's what it is. Hyper-V replica, I talked about that. This is the log file format for that. Go take a look if you're curious. Again, let us know if you have any questions or feedback. And in general, any other questions or comments?
Starting point is 00:44:15 I know we've had a lot so far, but we're happy to answer more. Any plan to extend QoS beyond Hyper-V? The question was, any plan to extend QoS beyond Hyper-V? The question was, any plan to extend QoS beyond Hyper-V, and what do you mean by that? Let's say, even for general purpose, file share, today it's a group of
Starting point is 00:44:36 financial states. Wouldn't it be a logical goal? Right. So beyond maybe interoperating with other things right there. I can't speak to future product plans. Right. So beyond maybe inter-operating with other things right there. I can't speak to future product plans. Sorry. Any other questions?
Starting point is 00:44:55 The version 2, right? For version 1, you would exercise it, right? You want to discuss and share, and you can start exercising it and share it. Version 2, is there any application that one can use to exercise that protocol? because we share and you can start sizing it and sharing. The question is, is there a unique application that one can use to exercise that protocol? Right, so the question is, how the heck do I test my version 2 implementation
Starting point is 00:45:14 by hooking a Hyper-V host up to it? Well, for one, we will create a VHD set file. We'll ask you to create a VHD set file when you create a shared disk from Windows Server 2016, assuming that you support it. So if you've got a Server 2016 client speaking to a server, your server,
Starting point is 00:45:35 you can say, hey, I support version 2, and then we'll go and try to create a VHD set file. By that I mean we'll say, hey, create a VHDX, we'll convert it to a VHD set. So that's how that happens. Beyond that it's up to some user interaction. So for example if you want to deal with the log file, the replication
Starting point is 00:45:51 all that stuff, set up Hyper-V replica from one site to another. If you want to start doing backups, do backups. And I'm not sure where at this point in time applications that do backups of guest clusters are at in terms of in the market.
Starting point is 00:46:08 I know that Microsoft is working on making sure its product, I think it's DPM, is compatible as well as third parties are as well. It's definitely a thing. I just don't know where they line up right now. That's a great question.
Starting point is 00:46:29 I think right now it's up to reading the product docs and being like, hey, does this support Windows Server, like, guest clustering? Yeah. Any other questions? No. Great. Thank you. Thank you, Adam. Thanks for listening. Thank you. Thank you, Adam. Thanks for listening. If you have questions about the material presented in this podcast,
Starting point is 00:46:51 be sure and join our developers mailing list by sending an email to developers-subscribe at sneha.org. Here you can ask questions and discuss this topic further with your peers in the developer community. For additional information about the Storage Developer Conference, Here you can ask questions and discuss this topic further with your peers in the developer community. For additional information about the Storage Developer Conference, visit storagedeveloper.org.

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