[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