diff --git a/README.md b/README.md index 0839b49..f19e82a 100644 --- a/README.md +++ b/README.md @@ -2163,7 +2163,7 @@ Click **Next**. | Field | Value | |-------|-------| -| Graphic card | **Default (VirtIO)** ← temporary for install | +| Graphic card | **VirtIO-GPU** ← temporary for install | | Machine | q35 | | BIOS | OVMF (UEFI) | | Add EFI Disk | checked | @@ -2180,11 +2180,12 @@ Click **Next**. > **Pre-Enrolled Keys must be unchecked.** Enabling it turns on Secure Boot, > which blocks NVIDIA kernel modules from loading in the guest. -> **Graphic card: use Default (VirtIO) during install.** With `none` selected, -> noVNC has no virtual display to connect to and shows "Failed to run vncproxy." -> Leave it as VirtIO for the Ubuntu install. After the GPU is passed through and -> NVIDIA drivers are installed inside the VM, come back to Hardware → Display -> and change it to `none`. +> **Graphic card: in Proxmox 9 "VirtIO-GPU" is the new name for what was +> previously called "Default".** Use VirtIO-GPU during install — it provides a +> virtual display so noVNC works. With `none` selected, noVNC shows "Failed to +> run vncproxy" because there is no virtual display device. After the GPU is +> passed through and NVIDIA drivers are installed, change it to `none` in +> Hardware → Display. > **Qemu Agent** — check this now, then after Ubuntu is installed run > `apt install qemu-guest-agent` inside the VM. It enables clean shutdown from @@ -2201,9 +2202,11 @@ Click **Next**. |-------|-------| | Bus/Device | SCSI / 0 | | Storage | local-lvm | -| Disk size (GiB) | 64 | +| Disk size (GiB) | 600 | | Cache | Write back | -| Discard | checked (if local-lvm is on SSD) | +| Discard | checked | +| IO thread | checked | +| SSD emulation | unchecked | > **Write back** acknowledges writes to the VM as soon as they land in the > host's RAM cache, before they hit disk — faster than "No cache" (the @@ -2211,6 +2214,10 @@ Click **Next**. > For the raw HDD passthrough later, cache mode is irrelevant — those drives > manage their own caching. +> **SSD emulation** is not needed. Discard + IO thread already handles TRIM +> pass-through correctly with VirtIO SCSI. SSD emulation only matters for +> older IDE/SATA emulated controllers. + Click **Next**. **Tab: CPU** @@ -2248,6 +2255,15 @@ Click **Next**. | Field | Value | |-------|-------| | Memory (MiB) | 49152 | +| Minimum memory (MiB) | 49152 | +| Ballooning Device | **unchecked** | + +> **Disable ballooning for VM 100.** Set Minimum = Maximum (both 49152) and +> uncheck Ballooning Device. Ballooning lets Proxmox dynamically reclaim RAM +> from the VM, but it fights against NUMA memory pinning and can cause latency +> spikes during Immich indexing or Jellyfin transcoding. Lock it at 48 GiB. +> Ballooning is fine for VM 101 (Frigate) where consistent low-latency RAM +> access is less critical. Common MiB values for reference: @@ -2292,11 +2308,16 @@ Click **Add** → **PCI Device**. |-------|-------| | Raw Device | select the GPU from the dropdown | | All Functions | **checked** | -| Primary GPU | **checked** | +| ROM-Bar | **checked** | | PCI-Express | **checked** | +| Primary GPU | **checked** | Click **Add**. +> **ROM-Bar must stay checked.** NVIDIA drivers read the GPU's VBIOS through +> the ROM BAR during initialization. Unchecking it causes the driver to fail +> or the GPU to not be recognized inside the VM. + > VM 100 gets the GPU for Jellyfin transcoding, Immich ML acceleration, > HandBrake encoding, and general desktop GPU acceleration. @@ -2337,45 +2358,6 @@ needs USB 3.0 speed and works on any port. --- -### Step 11.5 — Add Coral USB to VM 101 - -In the left panel, click **101** → **Hardware** tab. - -Click **Add** → **USB Device**. - -First entry (pre-init ID): - -| Field | Value | -|-------|-------| -| Use USB Vendor/Device ID | selected | -| Vendor ID | 1a6e | -| Device ID | 089a | - -Click **Add**. - -Click **Add** → **USB Device** again. - -Second entry (post-init ID): - -| Field | Value | -|-------|-------| -| Use USB Vendor/Device ID | selected | -| Vendor ID | 18d1 | -| Device ID | 9302 | - -Click **Add**. - -> **Why two entries?** The Coral USB presents as `1a6e:089a` before Frigate -> loads firmware onto it, then re-enumerates as `18d1:9302` after firmware -> loads. Both must be passed through or the second enumeration will not be -> accessible inside the VM. - -> **The Coral must be physically plugged in to the R730xd before starting the -> VM.** If it is not connected, the VM boots fine but the USB devices will -> not appear. - ---- - ### Passing other USB devices to VMs Any USB device plugged into the R730xd can be passed through to a VM using @@ -2582,17 +2564,71 @@ scsi8: /dev/disk/by-id/scsi-35000cca23bab1234,size=0 Click **Create VM** in the web UI. -| Tab | Value | -|-----|-------| -| General | VM ID: **101**, Name: **frigate** | -| OS | ubuntu-24.04.4-live-server-amd64.iso | -| System → Graphic card | **Default (VirtIO)** | -| System → Machine | q35 | -| System → BIOS | OVMF (UEFI) | -| System → Pre-Enrolled Keys | **unchecked** | -| CPU | 6 cores, host | -| Memory | 8192 MiB | -| Disk | 64 GiB on local-lvm | +**Tab: General** + +| Field | Value | +|-------|-------| +| VM ID | 101 | +| Name | frigate | + +**Tab: OS** + +| Field | Value | +|-------|-------| +| ISO image | ubuntu-24.04.4-live-server-amd64.iso | +| OS Type | Linux | +| Version | 6.x - 2.6 Kernel | + +**Tab: System** + +| Field | Value | +|-------|-------| +| Graphic card | VirtIO-GPU | +| Machine | q35 | +| BIOS | OVMF (UEFI) | +| Add EFI Disk | checked | +| EFI Storage | local-lvm | +| Pre-Enrolled Keys | unchecked | +| SCSI Controller | VirtIO SCSI Single | +| Qemu Agent | checked | +| Add TPM | unchecked | + +> Pre-Enrolled Keys unchecked — no Secure Boot needed for Ubuntu Server. + +**Tab: Disks** + +| Field | Value | +|-------|-------| +| Bus/Device | SCSI / 0 | +| Storage | local-lvm | +| Disk size (GiB) | 32 | +| Cache | Write back | +| Discard | checked | +| IO thread | checked | +| SSD emulation | unchecked | + +**Tab: CPU** + +| Field | Value | +|-------|-------| +| Sockets | 1 | +| Cores | 6 | +| Type | host | +| Enable NUMA | checked | + +> 6 cores from socket 1 (VM 100 uses socket 0). NUMA keeps memory local to +> the cores doing the work. + +**Tab: Memory** + +| Field | Value | +|-------|-------| +| Memory (MiB) | 8192 | +| Minimum memory (MiB) | 8192 | +| Ballooning Device | unchecked | + +> Ballooning disabled — locks the VM at 8 GiB, same reason as VM 100. 8 GiB +> is sufficient for Frigate with the Coral handling inference. **Tab: Network** @@ -2603,12 +2639,53 @@ Click **Create VM** in the web UI. | VLAN Tag | your security VLAN tag (e.g. 20) | | Firewall | checked | -> Frigate runs on a dedicated security VLAN so cameras are isolated from the +> Frigate runs on a dedicated security VLAN — cameras are isolated from the > main LAN. Set the VLAN tag to match your camera/security VLAN. -> **No GPU for VM 101.** The Coral TPU (added in Step 11.5) handles all AI -> inference. Frigate uses CPU decode for camera streams — perfectly adequate -> on dual Xeons with 6 cores dedicated to this VM. +Click **Finish**. + +> **No GPU for VM 101.** The Coral TPU (added in Step 11.9b below) handles +> all AI inference. Frigate uses CPU decode for camera streams — perfectly +> adequate on dual Xeons with 6 cores dedicated to this VM. + +--- + +### Step 11.9b — Add Coral USB to VM 101 + +In the left panel, click **101** → **Hardware** tab. + +Click **Add** → **USB Device**. + +First entry (pre-init ID): + +| Field | Value | +|-------|-------| +| Use USB Vendor/Device ID | selected | +| Vendor ID | 1a6e | +| Device ID | 089a | + +Click **Add**. + +Click **Add** → **USB Device** again. + +Second entry (post-init ID): + +| Field | Value | +|-------|-------| +| Use USB Vendor/Device ID | selected | +| Vendor ID | 18d1 | +| Device ID | 9302 | + +Click **Add**. + +> **Why two entries?** The Coral USB presents as `1a6e:089a` before Frigate +> loads firmware onto it, then re-enumerates as `18d1:9302` after firmware +> loads. Both must be passed through or the second enumeration will not be +> accessible inside the VM. + +> **The Coral must be physically plugged in to the R730xd before starting the +> VM.** If it is not connected, the VM boots fine but the USB devices will +> not appear. ---