[Mapguide-trac] [mapguide-trac] #2099: mg-desktop: Reduce excessive disk IO

MapGuide Open Source trac_mapguide at osgeo.org
Wed Aug 22 22:17:05 PDT 2012


#2099: mg-desktop: Reduce excessive disk IO
---------------------------+------------------------------------------------
   Reporter:  jng          |       Owner:  jng
       Type:  defect       |      Status:  new
   Priority:  low          |   Milestone:  2.4
  Component:  Desktop API  |     Version:     
   Severity:  minor        |    Keywords:     
External_id:               |  
---------------------------+------------------------------------------------

Old description:

> If you look at any process using mg-desktop in the Task Manager, chances
> are the "I/O Read Bytes" column will be through the roof.
>
> The explanation is simple, the mg-desktop implementation of
> MgResourceService is a simple wrapper around the file system, so every
> GetResourceContent() call (and Maestro does a lot of this) is a call to
> read a file from disk. Such calls add up real quick.
>
> The solution would be to have an in-memory cache of resource content,
> such that subsequent calls to GetResourceContent() on the same resource
> id returns a MgByteReader from a cached copy of the resource content.
> Subsequently, calls to SetResource() will flush existing entries out and
> update the cached entry.

New description:

 If you look at any process using mg-desktop in the Task Manager, chances
 are the "I/O Read Bytes" column will be through the roof.

 The explanation is simple, the mg-desktop implementation of
 MgResourceService is a simple wrapper around the file system, so every
 GetResourceContent() call (and Maestro does a lot of this) is a call to
 read a file from disk.

 The other explanation can be found by running an mg-desktop application
 through Process Monitor, which shows the main culprits being:

  * Excessive ReadFile calls on CS-Map Dictionaries
  * Excessive ReadFile/QueryStandardInformationFile/QueryDirectory calls on
 Access.log

 Part of the solution would be to have an in-memory cache of resource
 content, such that subsequent calls to GetResourceContent() on the same
 resource id returns a MgByteReader from a cached copy of the resource
 content. Subsequently, calls to SetResource() will flush existing entries
 out and update the cached entry.

 We also need to review the use of MgCoordinateSystem* classes in mg-
 desktop and the ported Log Manager code to see where we're doing things
 different from MapGuide Server (that does not have these high I/O read
 numbers)

--

Comment(by jng):

 Implemented an in-memory cache for resource content to avoid disk reads
 for every GetResourceContent() call. However this does not significantly
 reduce the I/O read count in the Task Manager.

-- 
Ticket URL: <http://trac.osgeo.org/mapguide/ticket/2099#comment:1>
MapGuide Open Source <http://mapguide.osgeo.org/>
MapGuide Open Source Internals


More information about the mapguide-trac mailing list