As a NVP, sometimes we’ll have conversations like “what’s the ideal policy for X” or “what FSLogix settings should we use?”
As I’m working on a major migration to Windows 11 currently, I thought I would provide some strong insight into how Nerdio Autoscaling works, considerations where you should use what settings, and overall best practices. Today, we’ll cover:
- Nerdio Autoscaling for Virtual Desktop
- Setting Up AVD Start VM on Connect
- Bringing It Together for the Ideal Autoscaling Policy
Nerdio Autoscaling for Azure Virtual Desktop
Bas at Nerdio, has this great image, which I think shows a really nice graphical representation of autoscaling:

Essentially, since AVD autoscaling is a bit rigid, Nerdio runs the entire autoscaling architecture within their platform.
Autoscaling simply uses a policy to make real-time decisions based on the configuration in the database and triggers Azure Resource Manager API calls to do some magical things like starting/stopping hosts, creating new hosts, or even deleting hosts if needed. Bas’s amazing deep dive article can be read here.
I’m going to be fairly high-level and explain the different aspects of the auto-scaling policy in Nerdio to provide solid context:
- Host Pool Properties
- Host Pool Sizing
- Scaling Logic
- Rolling Drain Mode
- Pre-Staging Hosts
- Auto-Healing
Nerdio Auto-scaling Host Pool Properties
One of the big decision points we start out with is, “Breadth or Depth”
So, let’s discuss the different:
- Breadth: spread users evenly across session hosts
- Depth: (Preferred) load up one session hosts

So ideally, you will use Depth First, because it’s more cost effective. Something to consider is that I will typically recommend one of two VM sizes:
- D8as (4-6 users)
- D16as (6-12 users)
The good news is that if you do oversize your machines, Nerdio does a great job of telling you that:

Typically, I will just start smaller, and see how performance looks. Nerdio does a beautiful job of letting you size up and down as needed:

Nerdio Host Pool Sizing
Now, we move onto discussing scaling logic and the rolling drain mode feature.
Scaling logic can be a little confusing, especially when compared with other features.
You start with what you consider to be an “active host”, which can be either a started VM or if the AVD agent is available. I prefer “AVD Agent Available”

Nerdio Scaling Logic
One of the most important areas is scaling logic.
First, we’ll discuss the difference between Scale In and Scale Out:
Scale In: Shutdown or destroying hosts
Scale Out: Adding or starting new hosts to meet needs. This could also, include bursting new hosts beyond the base pool capacity. Burst hosts will be the first to go down when we scale in again.
The beauty of Nerdio is that you can use any of the following autoscale triggers to trigger scale out or in operations:
- CPU usage (my personal preference)
- RAM usage
- Average Active Sessions
- Available Sessions
- User-Driven (driven by user usage and will shutoff after a certain period of time)
You specify your trigger, which your scale out or scale in will get triggered by as you can see below:

Scale in restrictions are the thing that brings it altogether by an “Office Hours” concept. In layman terms, don’t shutdown hosts until after office hours using a certain scale in aggressiveness. You can also deactivate all hosts into drain mode down to your minimum allowed host count mentioned earlier. We’ll discuss aggressiveness more in the next section.
Nerdio Rolling Drain Mode
We discuss “Rolling Drain Mode” next, which is a really cool feature. The ideal is similar to patching rings. You can slice up percentages of your hosts to drain sessions on at different intervals, such as “drain 25% of your hosts at midnight, and drain the rest at 3 AM.”
They respect the values for minimum active hosts, resources like CPU or RAM, and minimum available sessions.
You’ll notice they also ask you about the load balancing methodology like earlier and something called “Scale In Aggressiveness.” They have 3 levels of aggressiveness:
- High Aggressiveness: Any hosts with active OR disconnected sessions will get scaled in. It will prioritize hosts with no sessions and will then proceed by number of sessions. Active sessions will be consolidated and moved to a single host.
- Medium Aggressiveness (recommended) : Only hosts with disconnected sessions are impacted.
- Low Aggressiveness: Only hosts with absolutely no sessions on them.
Nerdio Pre-Staging Hosts
This section is an easy yet important one. You noticed earlier how we scale down to 0 hosts. This feature will make sure you have X number of hosts active by the time work hours start. Typically, you will see it power that host up about 30 minutes before your start of work hours.
You can also have multiple schedules if you want to have rolling host minimums e.g. 1 host by 7, 2 hosts by 10, etc:

Nerdio Auto-Healing
This one I am particularly fond of. Nerdio can automatically heal broken hosts that are in a bad state. First, we start with bad states. You can pick any of these options to consider a host to be broken:
- Unavailable (my preference)
- Shutdown
- Disconnected
- Upgrading
- Upgrade Failed
- No Heartbeat
- Not Joined to Domain
- Domain Trust Relationship Lost
- SxS Stack Listener Not Ready
- FSLogix Not Healthy
- Needs Assistance
- Stale Heartbeat (>2 hrs)
You can basically state, if its in a broken state (based on one or multiple you choose) and whether or not it has active sessions to take a specific action after X minutes.
From an actions perspective, you can either Restart or Delete VM, or execute an Azure Runbook or Script in Nerdio. What you see below is my typical recommendation. Note that you can also stagger the time between recovery actions so you don’t get too heavy-handed:

Setting Up Azure Virtual Desktop Start VM on Connect
If you want to scale down to 0 hosts outside of office hours, you MUST use “Start VM on Connect” unless you’re trying to bring the villagers with pitchforks in the middle of the night.
Start VM on Connect will fire up session hosts when a user tries to log into a pool. From my testing and experience, it takes 2-3m to get into your VM. Overall, the user experience is decent, and they give you good indicators. You can see the nice job they do with telling you what’s going on:

Setting it up isn’t too bad. First, make sure you hit the pre-reqs:
- Host Pool with a Workspace and App Group
- You need Desktop Virtualization Host Pool Contributor when configuring the feature
- Use the Windows App (I’m not recommending Remote Desktop as its 2025)
- Naming of the Pool, Hosts, and Resource Groups can only be ANSI characters
You simply enable it in your autoscaling policy in Nerdio:

You will then add this IAM role to the subscription where your hosts are deployed with the AVD (9cdead84-a844-4324-93f2-b2e6bb768d07):

Bringing It Together for the Ideal Autoscaling Policy
Simply today, this is my baseline for autoscaling, which I sprinkled throughout this article:




Obviously much of this is subjective, but this is a solid autoscaling policy setup at this point for my engagements. You flex certain things like sizing, number of hosts, etc., depending on the use case and users assigned, but it’s a nice place to start.
