Re: Performer: Using very large databases

New Message Reply Date view Thread view Subject view Author view

John Rohlf (jrohlf++at++tubes)
Thu, 14 Oct 93 11:16:05 -0700


>I am currently developing a Performer-based program to display
>very large visual databases (too large to be loaded all at once).
>My current solution is to divide the DB in a number of small tiles
>and load those tiles as required by the current viewpoint.
>
>The problem is that doing that in the main loop (or in the APP
>process when using a multi-processing approach) creates ugly CPU
>and I/O peaks whenever tiles are loaded and deleted. I need a smooth
>update rate and can't afford to have these peaks.
>
>I was planning on creating a forked process that would run at a low
>priority and would load the tiles for the main process, attempting to
>"look ahead" to figure out what was going to be needed soon.
>Unfortunately, it seems that you cannot make Performer calls from
>processes not started by Performer itself, which makes it impossible
>to create or delete pfNodes from a forked process.

You can make libpr but not libpf calls from the database
loading process. libpf calls modify a global structure that can
be a source of contention if multiple processes make libpf calls
in parallel. Another option is to use a lock to guarantee that the
database and application processes do not make libpf calls at the
same time.

What I suggest is:

1. Load the file from disk into main memory in the database process.
2. Use a lock around each libpf call or group of calls.

        ussetlock(libpfLock);
        pfAddChild(a, b);
        usunsetlock(libpfLock);

If you are using the .flt loader then you will need to get and
modify the source code.

I realize this is painful but rest assured that we are aware of this
problem and consider it a high priority.

         


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:50:03 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.