Introduction#

Plex Setup w/ GPU Transcoding It all started when I noticed my Plex server was working overtime. Even though I had beefed up the CPU cores on my Ubuntu VM in Proxmox, the CPU was still grinding hard—especially during those crucial binge sessions with family. We were getting 2–3 streams at once, and while that load was relatively light, things would occasionally stall. Buffering would interrupt movies and shows, particularly on our WiFi-connected PC, despite our robust networking setup (a Ruckus R710 and a multi-standard Optiplex 3090 handling Wi-Fi 4, 5, and beyond).

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#

Quadro P2200 The Quadro P2200 wasn’t designed for 1U servers, so I had to get creative. I used a PCI-E riser and did some hands-on, no-frills chassis modifications to ensure the card would fit in the Dell PowerEdge R630.

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!