Skip to content

Link NVIDIA driver libraries into a path the transcoder loader searches - #172

Open
magnavoid wants to merge 1 commit into
plexinc:masterfrom
magnavoid:fix/nvidia-driver-lib-search-path
Open

Link NVIDIA driver libraries into a path the transcoder loader searches#172
magnavoid wants to merge 1 commit into
plexinc:masterfrom
magnavoid:fix/nvidia-driver-lib-search-path

Conversation

@magnavoid

Copy link
Copy Markdown

The Plex Transcoder is loaded by Plex's bundled musl dynamic loader,
which does not read /etc/ld.so.cache and only probes a fixed set of
directories. The NVIDIA container toolkit mounts the host's driver
libraries at whatever path the host distro uses; on Debian hosts that is
/usr/lib//nvidia/current, which is only discoverable through
the glibc linker cache. The transcoder's dlopen("libcuda.so.1") then
fails and hardware transcoding silently falls back to software, logging
only a misleading 'opening hw device failed ... Operation not permitted'
even though nvidia-smi works inside the container.

Resolve the injected libraries from the linker cache (the toolkit's own
record of what it mounted, populated by the ldconfig it runs at
container setup) and symlink them into /usr/local/lib, which the bundled
loader searches. No-ops when the NVIDIA runtime is not in use, never
overwrites real files, and refreshes stale links after host driver
upgrades.

  The Plex Transcoder is loaded by Plex's bundled musl dynamic loader,
  which does not read /etc/ld.so.cache and only probes a fixed set of
  directories. The NVIDIA container toolkit mounts the host's driver
  libraries at whatever path the host distro uses; on Debian hosts that is
  /usr/lib/<multiarch>/nvidia/current, which is only discoverable through
  the glibc linker cache. The transcoder's dlopen("libcuda.so.1") then
  fails and hardware transcoding silently falls back to software, logging
  only a misleading 'opening hw device failed ... Operation not permitted'
  even though nvidia-smi works inside the container.

  Resolve the injected libraries from the linker cache (the toolkit's own
  record of what it mounted, populated by the ldconfig it runs at
  container setup) and symlink them into /usr/local/lib, which the bundled
  loader searches. No-ops when the NVIDIA runtime is not in use, never
  overwrites real files, and refreshes stale links after host driver
  upgrades.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant