Uploaded image for project: 'OpenShift Virtualization'
  1. OpenShift Virtualization
  2. CNV-73947

Support for vmiCPUAllocationRatio in AAQ VirtualResources config

XMLWordPrintable

    • aaq-cpuallocationratio
    • Incidents & Support
    • 77
    • False
    • Hide

      None

      Show
      None
    • False
    • None
    • To Do
    • 100% To Do, 0% In Progress, 0% Done

      Goal

      Currently, the VirtualResources config tracks the VM vCPU count (vmi.spec.domain.cpu.cores * vmi.spec.domain.cpu.sockets * vmi.spec.domain.cpu.threads ).

      However, the virt-launcher CPU allocation will depend on vmiCPUAllocationRatio. 

      One option is to change the config to "VmiPodUsage" which will track virt-launcher pod usage, (ie the resources.requests and resources.limits of virt-launcher pods).

      However, this also tracks the memory overhead added to the virt-launcher.

      In short, the requirement is to track, template.spec.domain.memory.guest and template.spec.domain.cpu, considering the vmiCPUAllocationRatio from the VM spec.

      we want users to configure VMs resources without being aware of k8s resources requests and limits, for this use case we want to use vmiCPUAllocationRatio which enforce both limits and request according to given spec.template.spec.domain.cpu.sockets with configured ratio of 1:4.

      Along with this, we need to enable AAQ in order to have dynamic quota allocation for migrations - to prevent migrations failure due to missing resourcequota (since another virt-launcher pod created during migration). 
       
      AAQ configured with VirtualResources enforce both the CPU limits and requests of the pod to be as the configured spec.template.spec.domain.cpu.sockets and and spec.template.spec.domain.memory.guest for memory. This not take in count the vmiCPUAllocationRatio meaning we cannot enforce overallocation using limits and requests.

      TL;DR with VmiPodUsage we enforced to configure: 

      spec.template.spec.domain.memory.guest and the same value in spec.template.spec.resources.requests.memory
      spec.template.spec.domain.cpu.sockets = CPU
      spec.template.spec.resources.requests.cpu = CPU/4
      spec.template.spec.resources.limits.cpu = CPU

      Instead of configuring only:

      spec.template.spec.domain.memory.guest
      spec.template.spec.domain.cpu.sockets

      User Stories

      • High-Level goal-based user story, with context.
        "As a <VM owner/cluster administrator>, I want <to Achieve Some Goal>, so that <Some Reason/Context>."
      • another user story

      Non-Requirements

      • List of things not included in this epic, to alleviate any doubt raised during the grooming process.

      Notes

      • Any additional details or decisions made/needed

              bmordeha@redhat.com Barak Mordehai
              kbidarka@redhat.com Kedar Bidarkar
              Kedar Bidarkar Kedar Bidarkar
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: