[gdal-dev] GDAL python bindings memory usage

Evert Etienne (SITEMARK) evert.etienne at sitemark.com
Fri Jan 10 04:31:45 PST 2020


I actually have no idea what the extra code in your examples is doing, can you explain?

For the behavior: it is the same as psutil (makes sense since memory_profiler uses psutil by default). You can see it reach max cache by logging psutil values in the Translate callback. I also saw the same behavior by looking at the memory usage using top.

Is there another way you know that works that I can try to see if I can replicate the memory usage values?

Thank you

> On 27 Dec 2019, at 21:45, Even Rouault <even.rouault at spatialys.com> wrote:
> 
> I question the reliability of memory_profiler
> 
> See
> 
> Line #    Mem usage    Increment   Line Contents
> ================================================
>    27  112.125 MiB  112.125 MiB   @profile
>    28                             def test2():
>    29  112.676 MiB    0.551 MiB       gdal.SetCacheMax(1000 * 1024 * 1024)
>    30 1101.855 MiB  989.180 MiB       gdal.Translate('/tmp/out.tif', 'byte.tif', options = '-co TILED=YES -outsize 100000 10000')
>    31 1101.855 MiB    0.000 MiB       dummy = 1
> 
> vs
> 
> Line #    Mem usage    Increment   Line Contents
> ================================================
>    28  109.336 MiB  109.336 MiB   @profile
>    29                             def test2():
>    30  109.336 MiB    0.000 MiB       gdal.SetCacheMax(1000 * 1024 * 1024)
>    31 1098.309 MiB  988.973 MiB       gdal.Translate('/tmp/out.tif', 'byte.tif', options = '-co TILED=YES -outsize 100000 10000')
>    32 1098.309 MiB    0.000 MiB       h = ctypes.cdll.LoadLibrary(None)
>    33 1098.309 MiB    0.000 MiB       h.malloc.argtypes = [ctypes.c_size_t]
>    34 1098.309 MiB    0.000 MiB       h.malloc.restype = ctypes.c_void_p
>    35 1098.309 MiB    0.000 MiB       h.free.argtypes = [ctypes.c_void_p]
>    36 1098.309 MiB    0.000 MiB       h.free.restype = None
>    37 1098.309 MiB    0.000 MiB       size = 1024 * 1024
>    38 1098.309 MiB    0.000 MiB       x = h.malloc(size)
>    39  117.422 MiB    0.000 MiB       h.free(x)
>    40  117.422 MiB    0.000 MiB       dummy = 1
> 
> vs
> 
> Line #    Mem usage    Increment   Line Contents
> ================================================
>    28  111.305 MiB  111.305 MiB   @profile
>    29                             def test2():
>    30  111.852 MiB    0.547 MiB       gdal.SetCacheMax(1000 * 1024 * 1024)
>    31  188.504 MiB   76.652 MiB       gdal.Translate('/tmp/out.tif', 'byte.tif', options = '-co TILED=YES -outsize 100000 10000')
>    32  188.504 MiB    0.000 MiB       h = ctypes.cdll.LoadLibrary(None)
>    33  188.504 MiB    0.000 MiB       h.free.argtypes = [ctypes.c_void_p]
>    34  188.504 MiB    0.000 MiB       h.free.restype = None
>    35  188.504 MiB    0.000 MiB       h.free(None)
>    36  188.504 MiB    0.000 MiB       dummy = 1
> 
> vs
> 
> Line #    Mem usage    Increment   Line Contents
> ================================================
>    28  112.164 MiB  112.164 MiB   @profile
>    29                             def test2():
>    30  112.164 MiB    0.000 MiB       gdal.SetCacheMax(1000 * 1024 * 1024)
>    31  112.770 MiB    0.605 MiB       h = ctypes.cdll.LoadLibrary(None)
>    32  112.770 MiB    0.000 MiB       h.free.argtypes = [ctypes.c_void_p]
>    33  112.770 MiB    0.000 MiB       h.free.restype = None
>    34 1101.918 MiB  989.148 MiB       gdal.Translate('/tmp/out.tif', 'byte.tif', options = '-co TILED=YES -outsize 100000 10000')
>    35 1101.918 MiB    0.000 MiB       h.free(None)
>    36 1101.918 MiB    0.000 MiB       dummy = 1
> 
> That doesn't make much sense to me.
> 
> Even
> 
> -- 
> Spatialys - Geospatial professional services
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.spatialys.com&data=01%7C01%7Cevert.etienne%40sitemark.com%7C39f1fc8e39b14a21169d08d78b0da8ab%7Cfc89adff07ac47008853b7b7e906068e%7C0&sdata=Mg1ztmCAuQnlKkFq3Ny00bE%2BfmzljlV0cWVRrYyU8PQ%3D&reserved=0



More information about the gdal-dev mailing list