Tag Archives: QoS

When you have been reading up on what’s new in Windows Server 2016 Hyper-V networking you probably read about Switch Embedded Teaming (SET).  Basically this takes the concept of teaming and has this done by the vSwitch.  Which means you don’t have to team at the host level.  The big benefit that this opens up is the RDMA can be leveraged on vNICs.  With host based teaming the RDMA capabilities of your NICs are no longer exposed, i.e. you can’t leverage RDMA.  Now this has become possible and that’s pretty big. 

With the rise of 10, 25, 40, 50 and 100 Gbps NICs and switches the lure to go fully converged becomes even louder.  Given the fact that we now don’t lose RDMA capabilities to the vNICs exposed to the host that call sounds only louder to many.  But wait, there’s even more to lure us to a fully converged solution, the fact that we now do no longer lose RSS on those vNICs!  All good news. 

I have written an entire whitepaper on convergence and it benefits, drawback, risks & rewards.  I will not repeat all that here.  One point I need to make that lossless traffic and QoS are paramount to the success of fully converged networking.  After all we don’t want lossy storage traffic and we need to assure adequate bandwidth for all our types of traffic.  For now, in Technical Preview 3 we have support for Software Defined Networking (SDN) QoS.

But wait a minute.  When we look at all kinds of traffic in a converged Hyper-V environment we see CSV (storage traffic), live migration (all variations), backups over SMB3 all potentially leveraging SMB Direct.  Due to the features and capabilities in SMB3 I like that.  Don’t get me wrong about that.  But it also worries me a bit when it comes to handling QoS on the hardware side of things. 

In DCB Priority Flow Control (PFC) is the lossless part, Enhanced Transmission Selection (ETS) is the minimum bandwidth QoS part.  But how do we leverage ETS when all types of traffic use SMB Direct.  On the host it all gets tagged with the same priority.  ETS works by tagging different priorities to different workloads and assuring minimal bandwidths out of a total of 100% without reserving it for a workload if it doesn’t need it.  Here’s a blog post on ETS with a demo video DCB ETS Demo with SMB Direct over RoCE (RDMA . 

Does this mean a SDN QoS only approach to deal with the various type of SMB Direct traffic or do they have some aces up their sleeves? 

Now in real life I have rarely, if ever, seen a hard need for this.  But it’s there to make sure you have something when needed.  It hasn’t caused me issues yet, but I’m a performance & scale first, in “a non-economies of scale” world compared to hosters.  As such convergence is a tool I use with moderation.  My testing when traffic competes without ETS is that they all get part of the cake but not super predictable/ consistent.  SMB bandwidth limitation is a bit of a “bolted on” solution => you can see the perf counters push down the bandwidth in an epic struggle to contain it, but as said it’s a struggle, not a nice flat line. 

Also Set-SmbBandwidthLimit is not a percentage, but hard max bandwidth limit, so when you lose a SET member the math is off and you could be in trouble fast.  Perhaps it’s these categories that could or will be used but it doesn’t seem like the most elegant solution/approach.  That with ever more traffic leveraging SMB Direct make me ever more curious.  Some switches offer up to 4 lossless queues now so perhaps that’s the way to go leveraging more priorities … Interesting stuff!  My preferred and easiest QoS tool, get even bigger pipes, is an approach convergence and evolution of network needs keeps pushing over.  Anyway, I’ll be very interested to see how this is dealt with.  For now I’ll conclude my musings On Switch Embedded Teaming, SMB Direct and QoS in Windows Server 2016 Hyper-V

It’s time to demonstrate ETS in action!  There is a quick video on ETS on Vimeo to show what it look like. 

I’m using Mellanox ConnectX-3 ethernet cards, in 2 node DELL PowerEdge R720 Hyper- cluster lab.  We’ve configured the two ports for SMB Direct & set live migration to leverage them both over SMB Direct.  For the purpose of this demo we’ll generate non RDMA over RoCE (TCP/IP) traffic over these two 10Gbps ports to simulate a problematic scenario where all bandwidth is already being used and to see how Enhanced Transmission Selection (ETS) will help in this scenario.  I have done this with DELL Force 10, PowerConnect 8100, N4000 series or a mix of both.  This particular demo was leveraging PC8132Fs.  I use what’s available to me in a lab at the time of writing. 

To achieve the network load this we leverage ntttcp.exe to generate the non RDMA TCP/IP traffic.  Using the Mellanox QoS counters we visualize this.  In blue you see the sending traffic from node A, in red the receiving traffic on Node B. Note that this traffic is tagged with priority 1.  We tag SMB Direct traffic with priority 4. 

You can see that both Mellanox cards are running at full bandwidth, 2* 10Gbps from node A to node B and it’s all none RDMA traffic.  Also note that I’m hitting all 16 physical cores (hyper threading is enabled).  By doing so I avoid being bottlenecked by a singe core as in contrast to RDMA traffic there’s no huge CPU offload going on here. 

As these are the cards I have assigned to use for live migration (depending on the setup also CSV or SOFS traffic) over SMB Direct you’ll see that the competition for bandwidth will be fierce if we don’t have a mechanism to guide this to a desired outcome.  That’s exactly what we leverage DCB with PFC and ETS for. 

So let’s kick off live migration of 4 virtual machines with 10GB of memory each.  That should take about 20 seconds on 2 * 10Gbps cards.  We first live migrate them form node B to Node A. That’s in the reverse direction of where we are sending TCP/IP traffic.  You see 10Gbps being used all over and this is expected. 

Remember that the network is full duplex.  That means that you can send at 10Gbps (TCP/IP from node A to node B, RDMA from node B to A and vice versa) and receive at 10Gbps on a port.  Actually if the backplane of the switch is powerful enough you can do so on all ports.  So this is normal.  Node A is sending TCP/IP traffic to node B at line speed and Node B is sending SMB Direct traffic to node A (the live migration) at line speed. 

But what if we live migrate over SMB Direct in the same direction as the TCP/IP traffic is going, from node A to node B?  Well have a look.  To me this looks awesome. 

ETS kicks in immediately.  We configure the minimum bandwidth for SMB Direct Traffic to be 90%.  Anything left after that (10%) is given to other traffic, in this demo the TCP/IP traffic we generated.  As priority 4 tagged RoCE traffic is also configured to be lossless with PFC you don’t have to worry about dropping packets under contention.  Now think about this and how you can steer your traffic behavior at times when the resources need to be divided amongst competing workloads. 

I hope you now have a better idea on why QoS is useful, how it works and that it indeed does work.  While I have taken the opportunity to demonstrate this with SMB Direct over RoCE I’d like to stress that QoS is not just about RoCE where it’s “mandatory” due to the fact it requires at least PFC.  It’s a very much a needed tool that’s very beneficial in any converged scenario and that the optional ETS might be a very good idea, depending on your environment. 

One of the big changes in Windows Server 2012 R2 is that all types of Live Migration can now leverage SMB 3.0 if the right conditions are met.  That means that Multichannel & SMB Direct (RDMA) come in to play more often and simultaneously.  Shared Nothing Live Migration & certain forms of Storage Live Migration are often a lot more planned due to their nature.  So one can mitigate the risk by planning.  Good old standard Live Migration of virtual machines however is often less planned.  It can be done via Cluster Aware Updating, to evacuate a host for hardware maintenance, via Dynamic optimization.  This means it’s often automated as well.  As we have demonstrated many times Live Migration can (easily) fill 20Gbps of bandwidth.  If you are sharing 2*10Gbps NICs for multiple purposes like CSV, LM, etc.  Quality of Service (QoS) comes in to play.  There are many ways to achieve this but in our example here I’ll be using DCB for SMB Direct with RoCE. 

Now as you can see I leverage 2*10Gbps NIC, non teamed as I want RDMA.  I have Failover/redundancy/bandwidth aggregation thanks to SMB 3.0.  This works like a charm.  But when leveraging Live Migration over SMB in Windows Server 2012 R2 we note that the LM traffic also goes over port 445 and as such is dealt with by the same QoS policy on the server & in the switches (DCB/PFC/ETS).  So when both CSV & LM are going one how does one prevent LM form starving CSV traffic for example?  Especially in Scale Out File Server Scenario’s this could be a real issue. 

The Solution

To prevent LM traffic & CSV traffic from hogging all the SMB bandwidth ruining the SOFS party in R2 Microsoft introduced some new capabilities in Windows Server 2012 R2.  In the SMBShare module you’ll find:

Set-SmbBandwidthLimit

Get-SmbBandwidthLimit

Remove-SmbBandwidthLimit

To use this you’ll need to install the Feature called SMB Bandwidth Limit via Server Manager or using PowerShell: Add-WindowsFeature FS-SMBBW

You can limit SMB bandwidth for Virtual machine (Storage IO to a SOFS), Live Migration & Default (all the rest).  In the below example we set it to 8Gbps maximum. 

Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 1000MB

So there you go, we can prevent Live Migration from hogging all the bandwidth.  Jose Baretto mentions this capability on his recent blog post on Windows Server 2012 R2 Storage: Step-by-step with Storage Spaces, SMB Scale-Out and Shared VHDX (Virtual).  But what about Fibre Channel or iSCSI environments?  It might not be the total killer there as in SOFS scenario but still.  As it turns out the Set-SmbBandwidthLimit also works in those scenarios.  I was put on the wrong track by thinking it was only for SOFS scenarios but my fellow MVP Carsten Rachfahl kindly reminded me of my own mantra “Trust but verify” and as a result, I can confirm it even works to cap off Live Migration traffic over SMB that leverages RDMA (RoCE).  So don’t let the PowerShell module name (SMBShare) fool you, it’s about all SMB traffic within the categories. 

So without limit LM can use all bandwidth (2*10Gbps)

With Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 1250MB you can see we max out at 10Gbps (2*5Gbps). 

Some Remarks

I’d love to see a minimum bandwidth implementation of this (that could include safety buffer for spikes in CSV traffic with SOFS).  The hard cap limit might lead to some wasted bandwidth.  In other scenarios you could still get into trouble.  What if you have 2*10Gbps available but one of those dies on you and you capped Live Migration Traffic at 16Gbps.  With one NIC gone you’re potentially in trouble until the NIC has been replaced.  OK, this is not a daily occurrence & depending on you environment & setup this is less or more of a potential issue. 

Last Friday I was working on some Windows Server 2012 Hyper-V networking designs and investigating the benefits & drawbacks of each.  Some other fellow MVPs were also working on designs in that area and some interesting questions & answers came up (thank you Hans Vredevoort for starting the discussion!) 

So now let’s apply this scenario to one of my (current) favorite converged networking designs for Windows Server 2012 Hyper-V. Two dual NIC LBFO teams.  One to be used for virtual machine traffic and one for other network traffic such as Cluster/CSV/Management/Backup traffic, you could even add storage traffic to that.  But for this particular argument that was provided by Fiber Channel HBAs.  Also with teaming we forego RDMA/SR-IOV. 

For the VM traffic the decision is rather easy.  We go for Switch Independent with Hyper-V Port mode.  Look at Windows Server 2012 NIC Teaming (LBFO) Deployment and Management to read why.  The exceptions mentioned there do not come into play here and we are getting great virtual machine density this way.  With lesser density 2-4 teamed 1Gbps ports will also do. 

But what about the team we use for the other network traffic.  Do we use Address hash or Hyper-V port mode.  Or better put, do we use native teaming with tNICs as shown below where we can use DCB or Windows QoS? 

Well one drawback here with Address Hash is that only one member will be used for incoming traffic with a switch independent setup.  Qos with DCB and policies isn’t that easy for a system admin and the hardware is more expensive. 

So could we use a virtual switch here as well with QoS defined on the Hyper-V switch? 

Well as it turns out in this scenario we might be better off using a Hyper-V Switch with Hyper-V Port mode on this Switch independent team as well.  This reaps some real nice benefits compared to using a native NIC team with address hash mode:

You have a nice load distribution of the different vNIC’s send/receive traffic over a single member of the NIC team per VM.  This way we don’t get into a scenario where we only use one NIC of the team for incoming traffic.  The result is a better balance between incoming and outgoing traffic as long an none of those exceeds the capability of one of the team members. 

Easy to define QoS via the Hyper-V Switch even when you don’t have network gear that supports QoS via DCB etc. 

Simplicity of switch configuration (complexity can be an enemy of high availability & your budget). 

Compared to a single Team of dual 10Gbps ports you can get a lot higher number of VM density even they have rather intensive network traffic and the non VM traffic gets a lots of bandwidth as well. 

Works with the cheaper line of 10Gbps switches

Great TCO & ROI

With a dual 10Gbps team you’re ready to roll.  All software defined.  Making the switches just easy to use providers of connectivity.  For smaller environments this is all that’s needed.  More complex configurations in the larger networks might be needed high up the stack but for the Hyper-V / cloud admin things can stay very easy and under their control.  The network guys need only deal with their realm of responsibility and not deal with the demands for virtualization administration directly. 

I’m not saying DCB, LACP, Switch Dependent is bad, far from.  But the cost and complexity scares some people while they might not even need.  With the concept above they could benefit tremendously from moving to 10Gbps in a really cheap and easy fashion.  That’s hard (and silly) to ignore.  Don’t over engineer it, don’t IBM it and don’t go for a server rack phD in complex configurations.  Don’t think you need to use DCB, SR-IOV, etc.  in every environment just because you can or because you want to look awesome.  Unless you have a real need for the benefits those offer you can get simplicity, performance, redundancy and QoS in a very cost effective way.  What’s not to like.  If you worry about LACP etc.  consider this, Switch independent mode allows for nearly no service down time firmware upgrades compared to stacking.  It’s been working very well for us and avoids the expense & complexity of vPC, VLT and the likes of that.  Life is good.