Xorg VRAM leak because of Qt/OpenGL Application
Dennis Clarke
dclarke at blastwave.org
Mon Jul 2 16:22:50 UTC 2018
On 07/01/2018 10:11 PM, Mathieu Westphal wrote:
> Hello list,
>
> I am working on a complex Qt/OpenGL Application.
> Xorg starts leaking in VRAM when i'm using the application and never
> release the memory, until I restart X of course.
>
> $ nvidia-smi
I think you are looking at output from an nvidia tool and not memory
for the system and processes as a whole.
> The version of Xorg does not matter, tested a few.
> The version of the driver does not matter, as long as it's nvidia,
> tested 340, 384, 390
Using 384.98 here. Very stable.
However I think you are looking at output from nvidia-smi here and not
actual process data from the /proc/$PID/stat where $PID is the pid of
your X process.
For example :
sed$ ps -ef | grep "bin\/X"
root 2488 2429 3 Jun15 tty1 13:32:18 /usr/bin/X :0
-background none -noreset -audit 4 -verbose -auth
/run/gdm/auth-for-gdm-TVlXTy/database -seat seat0 -nolisten tcp vt1
sed$ cat /proc/2488/stat
2488 (X) S 2429 2488 2488 1025 2488 4202752 15866906 3576 170 0 4111107
762600 6 3 20 0 2 0 4079 569253888 46342 18446744073709551615 1 1 0 0 0
0 0 3149824 1098933967 18446744073709551615 0 0 17 1 0 0 1192 0 0 0 0 0
0 0 0 0 0
sed$
The actual rss ( Resident Set Size ) is what you should have a look at.
According to PROC(5) you can get that from "stat" under /proc for a
given pid. That is field 24 here :
sed$ cat /proc/2488/stat | awk '{ print $24 }'
46342
These are pages of memory and that reports :
Resident Set Size: number of pages the process has in real memory.
This is just the pages which count toward text, data, or stack
space. This does not include pages which have not been
demand-loaded in, or which are swapped out.
Your page size may be 8192 bytes or 4096 bytes or something else:
sed$ getconf -a | grep "PAGE"
PAGESIZE 4096
PAGE_SIZE 4096
_AVPHYS_PAGES 95456
_PHYS_PAGES 8187584
nix$ getconf -a | grep "PAGE"
PAGESIZE 65536
PAGE_SIZE 65536
_AVPHYS_PAGES 89121
_PHYS_PAGES 95356
So while the nvidia-smi tool may seem to tell you that a process needs
more memory in the GPU it isn't telling you much about the process
running on your system.
sed$ nvidia-smi -q -d POWER,TEMPERATURE,PIDS
==============NVSMI LOG==============
Timestamp : Mon Jul 2 17:17:10 2018
Driver Version : 384.98
Attached GPUs : 1
GPU 00000000:86:00.0
Temperature
GPU Current Temp : 40 C
GPU Shutdown Temp : 102 C
GPU Slowdown Temp : 97 C
GPU Max Operating Temp : 80 C
Memory Current Temp : N/A
Memory Max Operating Temp : N/A
Power Readings
Power Management : Supported
Power Draw : 16.28 W
Power Limit : 110.00 W
Default Power Limit : 110.00 W
Enforced Power Limit : 110.00 W
Min Power Limit : 100.00 W
Max Power Limit : 130.00 W
Power Samples
Duration : N/A
Number of Samples : N/A
Max : N/A
Min : N/A
Avg : N/A
Processes
Process ID : 2488
Type : G
Name : /usr/bin/X
Used GPU Memory : 218 MiB
Process ID : 13211
Type : G
Name : /opt/firefox/firefox
Used GPU Memory : 21 MiB
Process ID : 32110
Type : G
Name : /opt/firefox/firefox
Used GPU Memory : 21 MiB
Process ID : 32668
Type : G
Name : /opt/firefox/firefox
Used GPU Memory : 2 MiB
sed$
Cute .. but not your actual process memory usage in your system.
Dennis
More information about the xorg
mailing list