Template with "FREE_CPU" policy


I’m testing a template with “FREE_CPU” placement policy (Host rank policy “load-aware”), because my cluster has two servers (64+104 cores) and I would like that users not have to worry about selecting one or other server, but scheduler choose the server with more free CPUs.

With this configuration, first 40 instantianted VMs should go to second server because this one has 40 CPUs more. But, when the number is similar in both servers, I would like that each instantiation goes to each server, one for first server, one for second server and so on. However, I have read that “FREE_CPU” is updated in each monitorization interval (cycle) (Virtual Machine Template — OpenNebula 6.4.0 documentation), so if I instantiate 20 VMs at once, probably these 20 VMs will not go 10 to first server and 10 to second server, but they will go, maybe, to the same server because “FREE_CPU” is not being updated during instantiation of these 20 VMs.

Is there any configuration way for correcting this behaviour? I suppose I can modify monitorization intervals but, what will be the correct values to allow my desire behaviour?

In my OpenNebula cluster, it is normal that users instantiante a large number of VMs at the same time (they are students and, during class, they are running theirs VMs for academic purposes during teacher’s explanation). So, for example, en 5 minutes, users hay have instantiated 30 VMs.

My monitor.conf file contains:

    BEACON_HOST    = 30,
    SYSTEM_HOST    = 600,
    MONITOR_HOST   = 120,
    STATE_VM       = 5,
    MONITOR_VM     = 30,
    SYNC_STATE_VM  = 180

I have check in /var/log/one/monitor.log that each server is monitored each 120 seconds. If I change “MONITOR_HOST = 120” to “MONITOR_HOST = 30” (for example), could be a monitoring problem? With these reconfiguration, FREE_CPU will be update more quickly?


MONITOR_HOST determines how often these scripts run. You will indeed get more updates on FREE_CPU among other values. However, consider also using CPU_USAGE for the placement policy, while not as accurate as FREE_CPU it isn’t tied to monitoring scripts since it just determines CPUs being used by VMs. More information about such values here.


But can I use these values in the policy placement scheduling options? How? If I select “Scheduling → Policy” (in VM Template) and select “Load-Aware”, it appears directly “FREE_CPU”. How can I select or configure with “CPU_USAGE”?


You should be able to define a CUSTOM policy on sched.conf.