import type { Metadata } from "next" import { Box } from "lucide-react" import { CopyableCode } from "@/components/CopyableCode" export const metadata: Metadata = { title: "ProxMenux Post-Install: Virtualization Settings", description: "Detailed guide to the Virtualization Settings category in the ProxMenux post-install script for Proxmox VE optimization.", openGraph: { title: "ProxMenux Post-Install: Virtualization Settings", description: "Detailed guide to the Virtualization Settings category in the ProxMenux post-install script for Proxmox VE optimization.", type: "article", url: "https://macrimi.github.io/ProxMenux/docs/post-install/virtualization", images: [ { url: "https://macrimi.github.io/ProxMenux/virtualization-settings-image.png", width: 1200, height: 630, alt: "ProxMenux Post-Install Virtualization Settings", }, ], }, twitter: { card: "summary_large_image", title: "ProxMenux Post-Install: Virtualization Settings", description: "Detailed guide to the Virtualization Settings category in the ProxMenux post-install script for Proxmox VE optimization.", images: ["https://macrimi.github.io/ProxMenux/virtualization-settings-image.png"], }, } export default function VirtualizationSettingsPage() { const enableVfioIommuCode = ` #!/bin/bash # Enable IOMMU for Intel or AMD CPU if grep -q GenuineIntel /proc/cpuinfo; then sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ intel_iommu=on iommu=pt"/' /etc/default/grub elif grep -q AuthenticAMD /proc/cpuinfo; then sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ amd_iommu=on iommu=pt"/' /etc/default/grub else echo "Unknown CPU type. IOMMU might not be properly enabled." exit 1 fi # Configure VFIO modules echo "vfio" >> /etc/modules echo "vfio_iommu_type1" >> /etc/modules echo "vfio_pci" >> /etc/modules echo "vfio_virqfd" >> /etc/modules # Blacklist conflicting drivers cat <> /etc/modprobe.d/blacklist.conf blacklist nouveau blacklist nvidia blacklist radeon blacklist amdgpu EOF # Update GRUB and initramfs update-grub update-initramfs -u -k all echo "VFIO IOMMU support has been enabled. Please reboot your system for changes to take effect." ` const installGuestAgentCode = ` #!/bin/bash # Detect virtualization environment VIRT_ENV=$(systemd-detect-virt) # Install appropriate guest agent case $VIRT_ENV in kvm) apt-get update apt-get install -y qemu-guest-agent systemctl enable qemu-guest-agent systemctl start qemu-guest-agent echo "QEMU Guest Agent installed and started." ;; vmware) apt-get update apt-get install -y open-vm-tools systemctl enable open-vm-tools systemctl start open-vm-tools echo "Open VM Tools installed and started." ;; oracle) apt-get update apt-get install -y virtualbox-guest-utils systemctl enable vboxadd systemctl start vboxadd echo "VirtualBox Guest Additions installed and started." ;; *) echo "No specific guest agent needed or virtualization not detected." ;; esac echo "Guest agent installation process completed." ` const configureKsmtunedCode = ` #!/bin/bash # Install KSM control daemon apt-get update apt-get install -y ksm-control-daemon # Configure KSM based on system RAM RAM_GB=$(free -g | awk '/^Mem:/{print $2}') if [ $RAM_GB -le 16 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=50/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=80/' /etc/ksmtuned.conf echo "RAM <= 16GB: Setting KSM to start at 50% full" elif [ $RAM_GB -le 32 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=40/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=60/' /etc/ksmtuned.conf echo "RAM <= 32GB: Setting KSM to start at 60% full" elif [ $RAM_GB -le 64 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=30/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=40/' /etc/ksmtuned.conf echo "RAM <= 64GB: Setting KSM to start at 70% full" elif [ $RAM_GB -le 128 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=20/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=20/' /etc/ksmtuned.conf echo "RAM <= 128GB: Setting KSM to start at 80% full" else sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=10/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=10/' /etc/ksmtuned.conf echo "RAM > 128GB: Setting KSM to start at 90% full" fi # Enable ksmtuned service systemctl enable ksmtuned systemctl start ksmtuned echo "KSM configuration completed and service started." ` return (

Virtualization Settings

The Virtualization Settings category in the customizable_post_install.sh script focuses on optimizing your Proxmox VE installation for better virtualization performance and compatibility.

Available Optimizations

1. Enable VFIO IOMMU Support

This optimization enables IOMMU (Input-Output Memory Management Unit) and configures VFIO (Virtual Function I/O) for PCI passthrough, allowing direct assignment of PCI devices to virtual machines.

Why it's beneficial: IOMMU and VFIO support enables near-native performance for PCI devices (like GPUs or network cards) in virtual machines, which is crucial for high-performance virtualization scenarios. This allows for:

  • Direct access to hardware from within VMs, improving performance
  • Better isolation between host and guest systems
  • Support for advanced features like GPU passthrough for gaming or compute workloads

To apply this optimization manually, save the following script and run it with root privileges:

2. Install Relevant Guest Agent

This optimization detects the virtualization environment and installs the appropriate guest agent for improved integration between the host and guest systems.

Why it's beneficial: Guest agents improve communication between the host and guest systems, enabling features like:

  • Graceful shutdown of virtual machines
  • File sharing between host and guest
  • Better performance monitoring and resource allocation
  • Improved time synchronization
  • Enhanced mouse pointer integration

To apply this optimization manually, save the following script and run it with root privileges:

3. Configure KSM Control Daemon

This optimization installs and configures the KSM (Kernel Samepage Merging) control daemon, which helps optimize memory usage in virtualized environments.

Why it's beneficial: KSM allows the kernel to share identical memory pages between multiple virtual machines, providing several advantages:

  • Reduced overall memory usage, allowing for higher VM density
  • Improved performance in environments with many similar VMs
  • Dynamic adjustment of KSM aggressiveness based on system memory pressure
  • Potential for running more VMs on the same hardware

To apply this optimization manually, save the following script and run it with root privileges:

Automatic Application

All of these optimizations are automatically applied when selected in the Virtualization section of the customizable_post_install.sh script. This automation ensures that these beneficial settings are applied consistently and correctly, saving time and reducing the potential for human error during manual configuration.

) }