XCP-ng
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login
    1. Home
    2. johnnezero
    3. Posts
    J
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 1
    • Groups 0

    Posts

    Recent Best Controversial
    • Tag-Based Automation: Manage VM CPU Priority via assigned tag.

      WHAT: Automatically assigns CPU weights and I/O priorities based on assigned VM tag (i.e. replicating what vcenter did via resource pools etc.).

      HOW: Run via cron for regular enforcement.

      WHY: Automatically assign performance metrics on all pool VMs (as well as preventing configuration drift if settings are accidentally changed).

      TAGS: The Performance Tiering Concept: 4-tier system with a naming convention that sorts logically in XO:

      TAG       CPU WEIGHT  I/O PRIORITY      USE CASE
      0-core    2048        7 (Highest)       Domain Controllers, DNS, DHCP, Core DBs
      1-high    1024        7                 Critical App Servers
      2-normal   256        4                 Standard Workloads
      3-low      128        1                 Dev/Test, Noisy Neighbors
      

      Why the "0-" prefix? It forces core VMs to the top of the VM list in XO for easy visibility and management.

      Important: CPU weights only matter during contention. When the host is under-utilized, all VMs get the performance they need regardless of weight. These are an insurance policy.

      Script: set-performace.sh

      bash
      #!/bin/bash
      
      # ============================================
      # XCP-ng set-performace.sh script
      # Tags: 0-core, 1-high, 2-normal, 3-low
      # ============================================
      
      # --- CONFIGURATION (Customize these for your environment) ---
      CORE_TAG="0-core"
      CORE_WEIGHT="2048"
      CORE_IO_PRI="7"
      
      HIGH_TAG="1-high"
      HIGH_WEIGHT="1024"
      HIGH_IO_PRI="7"
      
      NORMAL_TAG="2-normal"
      NORMAL_WEIGHT="256"
      NORMAL_IO_PRI="4"
      
      LOW_TAG="3-low"
      LOW_WEIGHT="128"
      LOW_IO_PRI="1"
      LOW_QOS_KBPS="100000"  # 100Mbps cap for noisy neighbors
      
      # --- CORE CRITICAL VMs ---
      echo "=== Applying $CORE_TAG CPU & I/O Priority ==="
      xe vm-list tags:contains="$CORE_TAG" --minimal | tr ',' '\n' | while read uuid; do
          [ -z "$uuid" ] && continue
          xe vm-param-set uuid=$uuid VCPUs-params:weight=$CORE_WEIGHT
          xe vm-param-set uuid=$uuid other-config:sched-pri=$CORE_IO_PRI
          echo "CORE CRITICAL priority applied: $uuid"
      done
      
      # --- HIGH PRIORITY VMs ---
      echo "=== Applying $HIGH_TAG CPU & I/O Priority ==="
      xe vm-list tags:contains="$HIGH_TAG" --minimal | tr ',' '\n' | while read uuid; do
          [ -z "$uuid" ] && continue
          xe vm-param-set uuid=$uuid VCPUs-params:weight=$HIGH_WEIGHT
          xe vm-param-set uuid=$uuid other-config:sched-pri=$HIGH_IO_PRI
          echo "HIGH priority applied: $uuid"
      done
      
      # --- NORMAL PRIORITY VMs ---
      echo "=== Applying $NORMAL_TAG CPU & I/O Priority ==="
      xe vm-list tags:contains="$NORMAL_TAG" --minimal | tr ',' '\n' | while read uuid; do
          [ -z "$uuid" ] && continue
          xe vm-param-set uuid=$uuid VCPUs-params:weight=$NORMAL_WEIGHT
          xe vm-param-set uuid=$uuid other-config:sched-pri=$NORMAL_IO_PRI
          echo "NORMAL priority applied: $uuid"
      done
      
      # --- LOW PRIORITY VMs (with Network QoS cap) ---
      echo "=== Applying $LOW_TAG CPU & I/O Priority ==="
      xe vm-list tags:contains="$LOW_TAG" --minimal | tr ',' '\n' | while read uuid; do
          [ -z "$uuid" ] && continue
          xe vm-param-set uuid=$uuid VCPUs-params:weight=$LOW_WEIGHT
          xe vm-param-set uuid=$uuid other-config:sched-pri=$LOW_IO_PRI
          echo "LOW priority applied: $uuid"
      done
      
      echo "=== Performance Tuning Complete! ==="
      

      How to Deploy:

      1 Upload script

      bash
      # Copy to your pool master
      scp set-performace.sh root@your-pool-master:/usr/local/bin/
      chmod +x /usr/local/bin/set-performace.sh
      

      2 Add to crontab

      # Add to crontab (runs hourly)
      */60 * * * * root /usr/local/bin/set-performance.sh >> /var/log/set-performance.log 2>&1
      

      3 Test

      # Test it manually
      /usr/local/bin/set-performace.sh
      
      posted in Management
      J
      johnnezero