Search code examples
azureazure-batch

Azure batch auto scale formula


I'm trying to create a pool that always starts with 1 node. After 3 minutes of having more than 70% CPU usage the pool should generate another machine, and repeat. I'm using the current formula:

initialPoolSize = 1;
$TargetDedicatedNodes = initialPoolSize;
$totalDedicatedNodes =
    (avg($CPUPercent.GetSample(TimeInterval_Minute * 3)) >= 0.7) ?
    ($TargetDedicatedNodes + 1) : $TargetDedicatedNodes;

I also tried using this formula that is posted in the Microsoft documentation:

initialPoolSize = 1;
$TargetDedicatedNodes = initialPoolSize;
$totalDedicatedNodes =
    (min($CPUPercent.GetSample(TimeInterval_Minute * 3)) > 0.7) ?
    ($CurrentDedicatedNodes * 1.1) : $CurrentDedicatedNodes;

Both formulas don't work, I'm stuck with only 1 node for the entire build time, and the CPU usage is at 100%.

If anyone has any experience with this or can help that'll be greatly appreciated


Solution

  • This is the answer for anyone wondering

    maxNumberOfVMs = 20; // maximum number of VMs you want
    
    samplePercentThreshold = 0.7;
    
    sampleDuration = TimeInterval_Minute * 3; 
    
    // Get the last sample
    
    $sample = (avg($CPUPercent.GetSample(sampleDuration)));
    
    // If the average CPU usage was more than 70%, increase nodes by one, if 
    not true keeps as is
    
    $TargetDedicated = ($sample >= samplePercentThreshold ? $TargetDedicated +1 
    : $TargetDedicated);
    
    // If the average CPU usage is below 20% decrease nodes by one, if not true 
    keep as is
    
    $TargetDedicated = ($sample <= 0.2 ? $TargetDedicated - 1 : 
    $TargetDedicated);
    
    // Always keep the number of nodes under the maximum
    
    $TargetDedicated = min($TargetDedicated, maxNumberOfVMs);