Burstable B-series SKUs: the basics
What does an over-provisioned, spiky VM actually look like?
A surprising share of any Azure estate is made up of virtual machines that are almost always idle and occasionally busy: a build agent that sits at a few percent CPU until a pipeline runs, a small line-of-business app that wakes up at month-end, a dev box that is busy for an hour and quiet for the rest of the day. On a general-purpose Dsv5 or Dv5 SKU you pay for that machine as if it ran flat-out around the clock, because those SKUs provision full, dedicated vCPUs whether you use them or not. The shape of the waste is the same every time: a low average CPU with intermittent spikes, sitting on a SKU priced for sustained load.
Azure Advisor surfaces exactly this pattern. Inside its VM and virtual machine scale set right-size engine, the 'Optimise spend by resizing or shutting down underutilised instances' recommendation can suggest moving a machine to a burstable B-series SKU with the same number of cores, so you keep the vCPU count but pay a lower rate. Advisor only makes the burstable call when it has looked at roughly the last seven days of CPU and determined that the B-series credit model can cover your average utilisation. That last point is the whole game: B-series is not a smaller machine, it is a different billing model that rewards low average use.
The mechanism behind a B-series SKU is a CPU credit. Each size has a baseline CPU performance, expressed as a percentage of a full vCPU. Run below that baseline and you bank credits; run above it, during a spike, and you spend the credits you banked. As long as your quiet periods refill the bucket faster than your busy periods drain it, you get full-core bursts when you need them and a much lower bill the rest of the time. The work in this lesson is to find every VM whose real-world behaviour fits that model, move it across safely, and avoid the handful that genuinely run hot and would be starved of credits.
In this lesson you will learn how Azure prices burstable B-series SKUs, how the CPU credit model decides whether a workload fits, how Azure Advisor identifies the candidates in your estate, and how to move VMs across safely without starving the few that genuinely run hot. You will leave able to turn the Advisor burstable recommendation into a prioritised, reversible savings plan.
The bucket that fills while you sleep
A B-series VM quite literally banks CPU while it is idle. Each size has a baseline performance, a percentage of a full vCPU, and Azure tracks a credit balance per minute: run below the baseline and the balance climbs, run above it and the balance falls. A single vCPU B-series machine starts life with thirty credits and tops up continuously whenever it is quiet, up to a per-size cap. The practical upshot is that a build agent idling overnight wakes up with a full bucket, ready to spend a burst of real cores on the morning's first pipeline, then refills through the quiet afternoon. The whole model is a bet, made by Azure and confirmed by Advisor against your last seven days of CPU, that your idle time more than pays for your busy time.
Finding burstable candidates across a subscription
Priya runs the platform team at a growing SaaS company. The monthly Azure invoice has crept up faster than usage, and Azure Advisor's Cost tab is showing a stack of resize recommendations, several of them suggesting a move to burstable B-series SKUs.
Rather than click through each recommendation in the portal, Priya pulls the cost recommendations from the CLI so the burstable candidates can be listed, sized and ordered by saving before anything is touched.
List the Advisor cost recommendations and pick out the ones that point at a burstable resize. The shortDescription and impactedValue tell you what to move and what it is costing.
Advisor only suggests burstable when it has judged the B-series credits sufficient for your average CPU over the last seven days. Order the list by saving, not by the order it returns.
How the B-series credit model decides whether a VM fitsdeep dive
Every B-series size has a published baseline CPU performance, given as a percentage of a full vCPU, and a matching rate of credits banked per hour. A Standard_B2ts_v2, for example, has a 20 percent baseline and banks 24 credits per hour; a Standard_B2ls_v2 has a 30 percent baseline and banks 36 credits per hour. The machine accrues credits whenever its actual CPU sits below the baseline and consumes them whenever it runs above. Microsoft gives the per-minute figure as ((baseline CPU percent times vCPU count) minus (actual CPU percent times vCPU count)) divided by 100, so a quiet machine fills its bucket steadily and a busy one drains it.
The credit balance is capped per size and a freshly started VM begins with an initial allocation of thirty credits per vCPU. While credits remain, the VM can burst up to a full vCPU per core. The moment the balance hits zero, performance is throttled back to the baseline until enough quiet time refills the bucket. That throttle is the one failure mode that matters: a machine whose busy periods consistently outweigh its quiet ones will run out of credits and then crawl, which is precisely the workload Azure Advisor is built to exclude.
Advisor's burstable recommendation leans on this. It evaluates roughly the last seven days of CPU telemetry and only proposes the move when the candidate B-series size's credit accrual can sustain the workload's observed average. That is why the recommendation is conservative and why acting on it is low-risk: Azure has already checked the fit against real data. The remaining judgement is yours for workloads with rare but heavy spikes that a seven-day average can mask, and for anything where consistent full-core performance is a hard requirement rather than a nice-to-have.
What is the impact of leaving spiky VMs on dedicated-core SKUs?
The direct impact is a recurring overspend. A machine that is idle most of the day on a Dsv5 or Dv5 SKU is billed at the sustained-use rate every hour, including the long stretches where it does almost nothing. Multiply that gap by a fleet of build agents, dev boxes, small internal apps and seldom-used utility VMs and the unnecessary spend becomes a standing line on the invoice that grows every time someone provisions another part-time machine on a full-time SKU.
The second-order impact is drift. Without a routine that reviews the Advisor cost recommendations, over-provisioned machines accumulate silently. Each one looks individually trivial, which is exactly why nobody acts, and the aggregate only becomes visible when the bill forces a review. By then the saving has been leaking for months, and the catch-up is a project rather than a habit.
There is an opportunity-cost angle too. Money spent on idle cores is money not spent on the workloads that actually need capacity, on reservations for the genuinely steady machines, or on the product itself. Burstable SKUs are a low-effort way to stop funding capacity nobody is using, and because Advisor has already pre-qualified the candidates against real telemetry, the saving is available with very little analysis on your side.
How do you move VMs to burstable SKUs safely?
Work the recommendation as one loop rather than clicking through Advisor one VM at a time. The order matters: confirm the fit and check for spike-heavy outliers before you resize, so you do not throttle a machine that genuinely needs sustained cores.
1. Pull the burstable candidates and price them
Export the Advisor cost recommendations and filter to the burstable resizes. For each candidate, note the current SKU and the proposed B-series SKU, and price both from the rate card for the region so you have a real per-VM saving rather than a single Advisor estimate. Order the list by recurring saving.
2. Sanity-check the spike profile
Advisor already judged the fit against seven days of average CPU, but check candidates that run rare, heavy spikes a seven-day average can hide. Look at peak CPU and how long peaks last. A machine that bursts hard for hours, not minutes, may exhaust its credits and throttle, so leave those on dedicated cores and note them as deliberate exceptions.
3. Resize, in a maintenance window if needed
Resizing a VM requires a reboot, and a deallocate-and-start if the target size is not available on the VM's current hardware cluster. For most machines this is a brief interruption to schedule; for anything user-facing, do it in a window. Move the highest-saving, clearly idle machines first.
4. Make burstable the default and review on a cadence
Bake the burstable SKU into the infrastructure-as-code template for new idle-but-spiky workloads so the saving is the default, not a later clean-up. Put the Advisor cost review on a monthly cadence so newly over-provisioned machines are caught as they appear, and keep the deliberate dedicated-core exceptions documented so nobody resizes them by mistake.
# 1. Resize a confirmed burstable candidate. A reboot is required.
# Replace the size with the exact SKU Advisor proposed for this VM.
az vm resize \
--resource-group rg-platform \
--name build-agent-01 \
--size Standard_B2ts_v2
# 2. If the target size is not available on the current hardware cluster,
# the resize fails. Deallocate, resize, then start.
az vm deallocate --resource-group rg-platform --name build-agent-01
az vm resize --resource-group rg-platform --name build-agent-01 --size Standard_B2ts_v2
az vm start --resource-group rg-platform --name build-agent-01
# 3. Make burstable the default for new idle-but-spiky workloads in Bicep:
#
# resource vm 'Microsoft.Compute/virtualMachines@2024-07-01' = {
# name: 'build-agent-02'
# location: location
# properties: {
# hardwareProfile: {
# vmSize: 'Standard_B2ts_v2'
# }
# // ...osProfile, storageProfile, networkProfile
# }
# } Quick quiz
Question 1 of 5Azure Advisor recommends moving a VM to a burstable B-series SKU. What does that change about the machine?
You scored
0 / 5
Keep learning
Go deeper on how the B-series credit model works, how Advisor sizes the recommendation, and how to resize a VM cleanly.
- B-series burstable VM CPU credit model How credits accrue below baseline and drain above it, with the per-minute formula and the baseline percentages per size.
- Optimise VM and VMSS spend by resizing underutilised instances How Azure Advisor's right-size engine identifies burstable candidates from CPU telemetry.
- Change the size of a virtual machine The resize workflow, including when a deallocate-and-start is required for the new size.
You can now treat burstable SKUs as one capability rather than a stack of individual Advisor clicks: pull the candidates, price the saving from the real rate card, sanity-check the spike-heavy outliers, resize the confirmed fits with a reboot, and make burstable the default for new idle-but-spiky workloads. You know the change is reversible, so the risk of acting is small and the saving recurs every hour.
Back to the library