From Zero to Streaming Hero: GPU Passthrough on a Dell PowerEdge R630
Introduction#

Curiosity (and a healthy dose of “I can do better”) led me down the rabbit hole of offloading transcoding tasks to a GPU. I started reading about CUDA cores, VRAM, and how GPUs could efficiently handle the heavy lifting that was keeping my CPU in perpetual overdrive. The more I learned, the more I was sold on the idea. After some research, I found the Nvidia Quadro P2200—a card that didn’t break the bank. With a bit of crude chassis modification using a PCI-E riser and a hacksaw to cut aluminum brackets, I managed to cram the full-profile card into the tight confines of my 1U Dell PowerEdge R630. Then, to the terminal I went!
1. Hardware & Physical Installation#
High-Level Overview#

Technical Details#
The P2200 is a full-profile card. To fit it into the cramped 1U space, I installed it on a PCI-E riser card and manually cut aluminum brackets to reposition and secure the card—placing it as close to the power supplies as possible per the R630 layout. A bit of elbow grease went a long way!
2. Configuring Proxmox for GPU Passthrough#
Enabling Virtualization Features#
High-Level Overview#
I double-checked that my server’s BIOS was set up for advanced virtualization—essential for handing off the GPU to a VM.
Technical Details#
I ensured VT-d was enabled in the Dell R630 BIOS. While Proxmox was already up and running, VT-d (or AMD-Vi) is crucial for PCI passthrough, allowing direct device assignment to the virtual machine.
Blacklisting the Unwanted Driver & Binding VFIO#
High-Level Overview#
To prevent conflicts, I told the system to ignore the open-source nouveau driver so the GPU could be exclusively managed by VFIO. This took some effort as I kept testing through trial and error to get the system to ignore the nouveau driver. Ultimately, I was able to get it working!
Technical Details#
I created a file at /etc/modprobe.d/blacklist-nouveau.conf
with the following contents:
blacklist nouveau
options nouveau modeset=0
Then, I updated the GRUB configuration by setting:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on rd.driver.blacklist=nouveau nouveau.modeset=0"
After running update-grub
and updating initramfs with:
update-initramfs -u -k all
I rebooted the host. I confirmed the change by running:
lspci -nnk -d 10de:1c31
which showed the GPU bound to the vfio-pci
driver.
Configuring the Virtual Machine#
High-Level Overview#
Next, I added the GPU to my Plex VM via the Proxmox GUI and tweaked the VM configuration to ensure PCI Express passthrough worked seamlessly.
Technical Details#
Using Proxmox’s web interface, I added the PCI device (e.g., 0000:03:00.0
) under the Ubuntu Plex VM’s Hardware tab. Since the GUI didn’t show a “pcie” checkbox, I manually edited the VM’s configuration file (/etc/pve/qemu-server/<VMID>.conf
) to include:
hostpci0: 03:00.0,pcie=1
I also set the machine type to q35 by adding:
machine: pc-q35-6.2
This configuration ensures proper support for PCI Express devices.
3. Configuring Ubuntu Networking & Environment#
High-Level Overview#
After upgrading Ubuntu from 23.10 to 24.04, I discovered that the network interface name had changed, which required an update to the network configuration.
Technical Details#
My netplan configuration file (e.g., /etc/netplan/50-cloud-init.yaml
) originally referenced an old interface name. I updated it to match the new name and set a static IP using my preferred LAN settings. After editing, I applied the changes with:
sudo netplan apply
and verified the configuration using:
ip a
4. Installing Nvidia Drivers in the VM#
High-Level Overview#
With the hardware passthrough complete, I installed the official Nvidia drivers inside the Ubuntu VM to enable the GPU’s full capabilities for transcoding.
Technical Details#
I ran:
sudo ubuntu-drivers devices
which recommended nvidia-driver-550
. I installed it via:
sudo apt install nvidia-driver-550
After rebooting the VM, I confirmed the installation by executing:
nvidia-smi
This command showed the Quadro P2200 with CUDA support, minimal load at idle, and readiness to handle Plex’s transcoding tasks.
5. Configuring Plex for Hardware Transcoding#
High-Level Overview#
I fine-tuned Plex to leverage the GPU for video transcoding, ensuring smooth streaming even during peak usage.
Technical Details#
Inside the Plex Web Interface, under Settings > Server > Transcoder, I enabled:
- Hardware Acceleration
- Hardware-accelerated Video Encoding
- HDR Tone Mapping (using the Hable algorithm)
I kept the transcoder quality set to Automatic and the hardware transcoding device on Auto. These settings ensure that Plex uses NVENC on the Quadro P2200 to efficiently offload video transcoding tasks.
6. Performance & Final Thoughts#
High-Level Overview#
After these changes, testing showed that even during simultaneous streams over various network connections, the GPU handled transcoding with ease, and the CPU load was much lower.
Technical Details#
During testing, the GPU utilization stayed around 10%, while CPU load peaked at approximately 36% on a 6-core allocation. Given that I have 48 cores available on the server, there’s ample headroom for future scaling or additional workloads.
Conclusion#
By combining creative hardware modifications (yes I used a hack saw!!!), careful Proxmox configuration (lots of trial and error), and optimized Plex settings, I transformed my Dell PowerEdge R630 into a high-performance, energy-efficient media streaming server. Offloading the heavy lifting of video transcoding to the Nvidia Quadro P2200 not only resolved the buffering issues but also freed up significant CPU resources for additional tasks.
Happy streaming, and may your next binge session be as smooth as a perfectly remixed track!