I can run glxinfo and glmark2 successfully on JETSON-AGX-Xavier.
Then, I want to run glxinfo and glmark2 inside docker container on Xavier. But it failed.
This is what I did:
pull ubuntu docker image: docker pull ubuntu
adjust the permissions the X server host: xhost +local:root
start ubuntu docker image with mounted a volume for the X11 unix socket and tegra library:
docker run -it --env=“DISPLAY” --env=“QT_X11_NO_MITSHM=1” --volume=“/tmp/.X11-unix:/tmp/.X11-unix:rw” --volume=“/usr/lib/aarch64-linux-gnu/tegra:/usr/lib/aarch64-linux-gnu/tegra:rw” --privileged ubuntu:latest
Inside docker container (as root):
export LD_LIBRARY_PATH=“/usr/lib/aarch64-linux-gnu/tegra”:${LD_LIBRARY_PATH}
Then I run “glxinfo”. But it get a “Segmentation fault (core dumped)”. glmark2 get the same result.
I use strace to trace glximage, and I got the following where it failed:
socket(AF_UNIX, SOCK_DGRAM, 0) = 7
connect(7, {sa_family=AF_UNIX, sun_path=@“nvidia90377c2b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0”}, 66) = -1 ECONNREFUSED (Connection refused)
close(7) = 0
— SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x28860} —
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
I issue " lsof | grep nvidia90377c2b" on host (not from docker), it gives:
Xorg 7262 root 21u unix 0xffffffc39537f000 0t0 46650 @nvidia90377c2b@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ type=DGRAM
InputThre 7262 7271 root 21u unix 0xffffffc39537f000 0t0 46650 @nvidia90377c2b@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ type=DGRAM
What is that socket path? How can I resolve this issue?
I use my way to get it to work instead of using nvidia-docker. This is what I did:
docker run -it --net=host --env=“DISPLAY” --env=“QT_X11_NO_MITSHM=1” --volume=“/tmp/.X11-unix:/tmp/.X11-unix:rw” --volume=“/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:rw” --volume=“/usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu:rw” --volume=“/usr/local/cuda:/usr/local/cuda:rw” --device=/dev/nvhost-ctrl --device=/dev/nvhost-ctrl-gpu --device=/dev/nvhost-prof-gpu --device=/dev/nvmap --device=/dev/nvhost-gpu --device=/dev/nvhost-as-gpu ubuntu:latest
Inside docker container:
export PATH=“/usr/local/cuda/bin”:${PATH}
export LD_LIBRARY_PATH=“/lib/aarch64-linux-gnu:/usr/local/cuda/lib64:/usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu/tegra”:${LD_LIBRARY_PATH}
Then I can run glmark2 and and cuda sample apps with no issue.
However, I after reading your link, I have some question:
What is the benefit of using nvidia-container-toolkit instead of using my own way? And what is the difference?
In my Xavier, none of the nvidia-docker2 or nvidia-container-toolkit is installed. I think this is because I flashed my Xavier by “flash.sh” script instead of sdk manager. So I want to manually install nvidia-container-toolkit following the steps in GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs. But it got an error in apt update:
E: The repository ‘https://nvidia.github.io/libnvidia-container/ubuntu18.04/arm64 Release’ does not have a Release file.
It seems the repos for nvidia-container-toolkit doesn’t support ARM/ARM64.
So how can I install nvidia-container-toolkit?
Under sdk manager download directory, it has many .deb files for nvidia container:
libnvidia-container0_0.9.0_beta.1_arm64.deb
libnvidia-container-tools_0.9.0_beta.1_arm64.deb
nvidia-container-runtime_3.1.0-1_arm64.deb
nvidia-container-runtime-hook_0.9.0_beta.1-1_arm64.deb
nvidia-container-toolkit_1.0.1-1_arm64.deb
nvidia-docker2_0.9.0_beta.1+docker18.09.2-1_arm64.deb
nvidia-docker2_2.2.0-1_all.deb
Can I install nvidia-container-toolkit by install its .deb package + its dependencies?