Operating System - OpenVMS
1752793 Members
6235 Online
108789 Solutions
New Discussion юеВ

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

 
SOLVED
Go to solution
Nic Clews
Occasional Advisor

ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

We are using DEC Ada 3.5a / Ada Compilation System on VAX.

This involves the creation of an ADALIB.ALB indexed file which is read many times. It has a nominal bucket size of 2, and this results in a large number of revectored records and a significant number of bucket jumps in that file.

Now, I know that you can use the ACS to simply do a convert on the file, and that you could optimize the index then convert using EDIT/FDL, but what I really want to do is have a preset FDL for the ADALIB.ALB file for all the users.

I have not managed to find an FDL or a source for this file, so any pointers that will help create an optimised index file at the offset is what I really want.

e.g. Output from the RRV program is this:

OK too wide to work. but in an example file with 1065 records, there are 495 revectored records, and 414 buckets and 305 bucket jumps! This is very typical.

So I seek help, tips and pointers to creating that ADALIB.ALB with a decent bucket size and index format. The current situation is that builds take a long time and we have busy IO systems, and idle CPUs!

Nic.
11 REPLIES 11
John Gillings
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

Nic,

Maybe I'm missing something? If you know what bucket size you want, just say so!

Start with

$ ANALYZE/RMS/FDL ADALIB.ALB

This will produce ADALIB.FDL

You can now edit the FDL any way you want, either with the FDL editor, or EVE. Remove anything you don't care about, and change anything you want changed.

As long as the file structure is correct (ie: copied from an existing file), I'm sure you should be able to CREATE/FDL an empty file, and ACS will happily populate it for you.
A crucible of informative mistakes
Phil.Howell
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

(knowing nothing about adalib.alb)

I would set GLOBAL_BUFFER_COUNT in the fdl FILE section to a high value, and also set the ALLOCATION and CONTIGUOUS parammeters.

If this is created on every build, then you should look at the DATA_FILL and INDEX_FILL in the KEY sections and set them to 10%

Phil



Hein van den Heuvel
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

Nic,

I have no knowledge of ACS, or how it uses RMS, but I would think normal tuning rules apply to get some basic tuning going.

Find your largest .ALB
$ ANAL/RMS/FDL=ADALIB.FDL ADALIB/ALB
$ EDIT/FDL/NOINT ADALIB.FDL

Now use the resulting FDL to convert any and all ADALIB file every user.

You may want to use SET RMS/IND/BUF=20 in the the build command files.

If problems persist, then it is time to collect some serious evidence/numbers to work with.

Do a SET FILE/STAT on an ADALIB before a build and start a MONI RMS/FIL=ADALIB/ITE=ALL/OUT=... into a file over a run.
The analyze with T4 or monitor replay directly, or with my RMS_STATS tool (VMS FReeware V6.0)

A good way to get RMS stats is also SDA.
At the tail end of the build, or after the build with MONITOR still running to keep the stats alive use ANAL/SYS... SET PROC ... SHOW PROC/RMS=FSB.

If you need further help then please post a reply with a .TXT file attachment with at least the ANA/RMS/FDL output for a typical ADALIB and/or a summary of the stats.

hth,
Hein.
Nic Clews
Occasional Advisor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

John, Phil, Hein, Thank you for your replies.

I can actually do this but the file itself is created by the ACS process, and then used by the ACS process, the compile (build) and link is in one operation which creates the ADALIB file. I can convert the file but this will be AFTER it has been used :-|

What I want to do is influence the initial creation of that file so it has something like good structure and so on, then the build will run far more efficiently.

Perhaps another perspective is, _where_ is the FDL for the ADALIB.ALB file as created by the compilation process?
Wim Van den Wyngaert
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

Don't know how the adalib is used but instead of convert, you can also try "set file xxx /att/deq=yyy" where yyy is the extent size you want to apply.

Did that many years ago with SAS files that were created with low values. With mixed results.

Wim
Wim
Volker Halle
Honored Contributor
Solution

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

Nic,

no experience with ADA, but:

there may be no FDL file and the .ALB file may just be created using defaults. This could be proven by using

$ SET WATCH FILE/CLASS=MAJOR ! needs CMKRNL priv

$ run your ADA compilation

all XQP operations will be logged on the screen, so capture the output. You will see filenames and file-ids.

$ SET WATCH FILE/CLASS=NOMAJ ! turn off

If you don't see any attempted access to a .FDL file, there is most likely nothing you can do to create a 'better' ADALIB.ALB
file.

The ADA tuning instructions mention a couple of SYSGEN parameters and quotas, but nothing regarding FDL.

Volker.
Nic Clews
Occasional Advisor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

Volker,

Great idea, I'll see what is accessed I have a suspicion that the file may be created under program control (therefore 'hard' coded) but this will decide that.

John, after re-reading your reply, I think you may have something to try, i.e. create an empty file first with the correct structure. I will try that too...

Back to the factory :-)
Hein van den Heuvel
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)


Ok, that's though when you can not get at the FDL or code used for the $CREATE. I don't think it is going to use a pre-existing one but heck why not try.

What will help for sure is to give RMS more buffers by default. The SET RMS/IND/BUF=20 (or 50 or so) that I mentioned will help.

There is no explicit 'default' bucket size setting. Big enough to hold a record is the main rule, and you can not provide a fake record size I assume.

ACS might be use explicit code to fill FAB/RAB/XABs or it could be passing a strign to FDL$CREATE. You could search the image/shareable for "BUCKET", but that is in fact optional. You could search for SEG0_L which is required and if the words are spelled out, then you could patch it to use abbreviation to squeeze in an AREA 0; BUC 12;
If the code inititializes the AREA, then it would use a (aligned one hopes) word with value 8212 (x2014) to make it an XABALL.

Phil,
Setting plenty of local buffers will do fine.
Setting fill to a low value only makes sense if you know there is bunch of initial values, followed later (new open!) by records to be inserted randomly throughout. Here it would be one process to fill and fill more and thus any fill other than 100% would be a total waste reserving room which will not be used. Also, the minumum fill is 50%.

Nic,
Good luck, let us know.


Hein.




Wim Van den Wyngaert
Honored Contributor

Re: ADALIB.ALB indexed file optimization for ACS (DEC Ada 3.5)

There is also the command ACS REORG that should do the work of convert.

Wim
Wim