From: harvey@indyvax.iupui.edu
Newsgroups: comp.os.vms
Subject: Re: $add_holder is slow...
Date: 30 Dec 92 17:29:37 -0500
Organization: Indiana University-Purdue University at Indianapolis

In article <C031y8.9Bz@usenet.ucs.indiana.edu>, mdchaney@fractal.ucs.indiana.edu (M Darrin Chaney) writes:
> We've got about 40,000 users on our cluster, which consists of various newer
> VAXen (the smallest being a 6500, I think).  Anyway, we still keep a separate
> rightslist and uaf on each of the six nodes (I don't run these machines, so
> don't blame me).
>
> Recently, I set about rebuilding the rightslist for the cluster, in order to
> get each node in sync again, and make sure that everybody has only what they
> need.  We have 5 different rights, of which everybody has at least one.  They
> are:
>
>      UCS  -   people who work at UCS
>      STAFF  - staff members
>      FACULTY -faculty members
>      GRAD  -  grad students
>      UGRAD  - undergraduate students
>
> It is possible for people to have more than one, for instance STAFF and UGRAD.
>
> Anyway, we had a spare 8820 sitting around (VMS 5.5-2), so I'm using it.  It
> has 384MB of memory, and we set up a huge cache on it.  We also made the
> account that we are using have high quotas:
>
> Maxjobs:         0  Fillm:       100  Bytlm:        50000
> Maxacctjobs:     0  Shrfillm:      0  Pbytlm:           0
> Maxdetach:       0  BIOlm:        50  JTquota:       1024
> Prclm:           2  DIOlm:        50  WSdef:         2048
> Prio:            4  ASTlm:        24  WSquo:        32768
> Queprio:         0  TQElm:        10  WSextent:     65535
> CPU:        (none)  Enqlm:      2000  Pgflquo:      40000
>
> Anyway, I copid the rest of the identifiers into the new rightslist, of which
> there were only a few thousand.  Then, I used the cluster UAF to create the
> username rights (using add/ident/user=* in authorize).  I made 5 files, each
> containing in "rightslist" format the UIC of each person who needed that
> right, and the right itself.  So, each line was like such:
>
> right,uic,attr
>
> attr is always 0.  The program loops through the file, reading each line and
> using $add_holder to add the holder.  Here's the layout:
>
> UCS - 500 holders
> STAFF- 4000 holders
> FACULTY- 3000 holders
> GRAD- 8400 holders
> UGRAD- 30000 holders
>
> The amount of time it takes to add these increases rather dramatically.  The
> first 50 (of any set) take maybe 10 seconds.  After around 1000, it takes 10
> or 15 minutes to do 50.  I figure it's because of RMS keeping track of all
> the duplicate keys.  I have everything except UGRAD added, with about 16,000
> left.  At the current rate (50 every 20 minutes), it'll take another 4 days.
> It will probably slow down even more, though, so the time will be longer.
>
> Does anyone know a way to speed this up?  Pretty much anything is possible
> with the machine that we are using.  Thanks in advance.

Dramatic is indeed the word!  We had a very similar situation here about
a year ago, but only with about 1/10th the users.  If you look at the
organization of the rightlist file, the problem becomes clear.  With
thousands of users each holding one of a small set of "user-type" i.d.s,
you end up with thousands of duplicate keys in an index slot, which are
searched sequentially for an update.  We ended up storing the user-type
information in a separate file indexed by username (you could probably
store it in the "user info" field of the UAF now, which wasn't available
to us at the time).  For all logins a privileged program is run that does
whatever we want with this information (it defines an executive mode job
logical here at our site, however, maybe you could use it to grant the
appropriate identifier to the process at yours?).

Good luck.  If you need more info call or write me (or Mark Wood) at your
local friendly IUPUI campus...
--
James Harvey    IUPUI OIT Technical Support/Networks
harvey@iupui.edu  harvey@indiana.edu  uucp:iugate!harvey  bitnet:harvey@indyvax