Hi,

I have been told that Docker has overhead with everything, with these
numbers as evidence:

ubuntu@t:/etc$ time gdalinfo --version
GDAL 2.2.3, released 2017/11/20

real 0m0.030s
user 0m0.017s
sys 0m0.013s

ubuntu@t:/etc$ time docker exec -it 742a044b8ef1 gdalinfo --version
GDAL 3.1.0dev-19f34295c8c310b6ecb27d2d7aa7ac0a2a2a3d9f, released 2019/11/05

real 0m0.386s
user 0m0.023s
sys 0m0.030s

-Jukka Rahkonen-


alex-6 wrote
> Hi guys,
> 
> I've been playing quite a lot with "wrapper_GDALWarpDestName" and a .net 
> core wrapper (https://github.com/MaxRev-Dev/gdal.netcore/).
> Everything is running fine, I'm quite happy to see the same behavior on 
> windows and linux. Sometimes linux is faster for reading and writing 
> raster, this is great ! .NET Core is (now) a very good option for cross 
> platform dev. Anyway...
> 
> When calling wrapper_GDALWarpDestName,  I'm experiencing an overhead of 
> 350 to 500 ms on linux that I don't see at all on Windows.
> To narrow down the issue, I tried many warp options (-multi; -wo 
> NUM_THREADS=4; -wm 2000), output drivers (MEM, VRT, NWT_GRD), input file 
> format (MEM, VRT, NWT_GRD), input and output projections. I also checked 
> Gdal.GetCacheUsed(), Gdal.HasThreadSupport() and Gdal.GetCacheMax(), 
> same values between linux and windows. Nothing helps.
> 
> Even with VRT format output, this overhead is present which proves this 
> is not related to processing. I bet for some sort of initialization of 
> the warp algorithm with file reading... because 400 ms is far from 
> nothing. But I'm wondering why this is occurring for every single call 
> on linux and not on windows... Any option I could try ? My next step is 
> to profile the linux process but I'm not good at that so any help there 
> would be great too.
> 
> 
>      OS (version): Windows 10 (1903)
>      Docker:
>      Server: Docker Engine - Community
>      Engine:
>      Version: 19.03.2
>      API version: 1.40 (minimum version 1.12)
>      Go version: go1.12.8
>      Git commit: 6a30dfc
>      Built: Thu Aug 29 05:32:21 2019
>      OS/Arch: linux/amd64
>      Experimental: false
> 
>      Linux in docker file: debian 9 
> (mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim)
>      Package version (core): [e.g. 3.0.1.25]
>      Package version (runtime windows): [e.g. 3.0.1.25]
>      Package version (runtime linux): [e.g. 3.0.1.2]
> 
> This is the kind of code I'm running:
> 
> namespace GdalCoreTest
> {
>   class Program
>   {
>    static void Main(string[] args)
>    {
>       GdalBase.ConfigureAll();
>       Console.WriteLine("GDAL configured");
>       Console.WriteLine(string.Join('\n',
>               "GDAL Version: " + Gdal.VersionInfo("RELEASE_NAME"),
>               "GDAL INFO: " + Gdal.VersionInfo("")));
>       WarpFile();
>       WarpFile();
>       WarpFile();
>    }
> 
>    public static void WarpFile()
>    {
>       Stopwatch sw = new Stopwatch();
> 
>       int sizeX = 1024, sizeY = 1024;
>       var driver = Gdal.GetDriverByName("MEM");
>       string path = $"/vsimem/test.mem";
>       string vrtFilePath = null;
>       using(Dataset ds = driver.Create(path, sizeX, sizeY, 1, 
> DataType.GDT_UInt32, new string[0]))
>       {
>         try
>         {
>         //**************
>         //create a grid
>               ds.SetGeoTransform(new double[]{0, 30, 0, 0, 0, -30});
> 
>               var ttt = new SpatialReference(null);
>               ttt.ImportFromProj4("+proj=longlat +datum=WGS84");
>               ttt.ExportToWkt(out string latLongWkt, new string[0]);
>               ds.SetProjection(latLongWkt);
> 
>               //write data in the buffer
>               int[] buffer = new int[sizeX * sizeY];
>               for (int x = 0; x < sizeX; x++)
>               {
>                 for (int y = 0; y < sizeY; y++)
>                 {
>                       buffer[y * sizeX + x] = x + y;
>                 }
>               }
> 
>               ds.GetRasterBand(1).WriteRaster(0, 0, sizeX, sizeY, buffer, 
> sizeX, 
> sizeY, 0, 0);
> 
> 
>               //**************
>               //Prepare for warping
>               IntPtr[] ptr = {Dataset.getCPtr(ds).Handle};
>               GCHandle gcHandle = GCHandle.Alloc(ptr, GCHandleType.Pinned);
>               var dss = new 
> SWIGTYPE_p_p_GDALDatasetShadow(gcHandle.AddrOfPinnedObject(), false, 
> null);
>               vrtFilePath = $"/vsimem/tile.vrt";
> 
>         //Warp
>               sw.Start();
>               using (Dataset dst = Gdal.wrapper_GDALWarpDestName(vrtFilePath, 
> 1, 
> dss, new GDALWarpAppOptions(new[]{"-of", "VRT" }), null,null))
>               {
>                 sw.Stop();
>               }
>         }
>         finally
>         {
>               Gdal.Unlink(path);
>               Gdal.Unlink(vrtFilePath);
>         }
>       }
>      Console.Out.WriteLine($"Warp duration = {sw.ElapsedTicks} ticks 
> ({sw.ElapsedMilliseconds} ms).");
>    }
>   }
> }
> 
> 
> This is the output I'm getting on windows:
> 
> GDAL configured
> GDAL Version: 3.0.1
> GDAL INFO: GDAL 3.0.1, released 2019/06/28
> Warp duration = 221267 ticks (22 ms).
> Warp duration = 133395 ticks (13 ms).
> Warp duration = 155402 ticks (15 ms).
> 
> This is the output I'm getting on docker/linux:
> 
> GDAL configured
> GDAL Version: 3.0.1
> GDAL INFO: GDAL 3.0.1, released 2019/06/28
> Warp duration = 395911725 ticks (395 ms).
> Warp duration = 368923383 ticks (368 ms).
> Warp duration = 373055090 ticks (373 ms).
> 
> Thanks,
> Alex.
> _______________________________________________
> gdal-dev mailing list

> gdal-dev@.osgeo

> https://lists.osgeo.org/mailman/listinfo/gdal-dev





--
Sent from: http://osgeo-org.1560.x6.nabble.com/GDAL-Dev-f3742093.html
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to