  Cost of logical name translations? 
 The Question is:
 
Due to the design of our applications structure, we have far more system
logicals defined (43224)than the maximum sysgen parameter LNMSHASHTBL allows
(8192).
 
Does this cost us extra cpu to translate logical names that are not hashed?
At the moment we don't seem to notice any degradation in performance - at
the moment we have cpu/memory to spare. Will it ever be a problem and if so
how will this be recognised a
nd is there anything that can be done to alleviate this?
 
Thanks in advance
 
Trevor Owens
GVB Amsterdam
 
 
 The Answer is:
 
  All logical names are hashed, no matter how many there are.
 
  The SYSGEN parameter LNMSHASHTBL specifies the number of entries in the
  hash table used for all shareable names.  When multiple names have the
  same hash value, they are linked together into a hash chain. On average,
  your system would have hash chains of 5 or 6 logical names.
 
  In general, scanning a hash chain is a fairly quick operation and a
  relatively small part of the whole translation process.   The OpenVMS
  Wizard believes that there should be no visible performance degradation
  in the vast majority of cases.
 
  However -- because LNMBs are allocated from paged pool -- a worst case
  scenario could result in each LNMB being located on a different memory
  page, and each requiring a page fault to access.  The OpenVMS Wizard
  will consider increasing the maximum value of LNMSHASHTBL.
 
  More technical details follow.
 
  Each entry in the hash table is either zero or a pointer to a hash chain
  of logical name blocks (LNMBs) with the same hash value. (An LNMB describes
  a logical name and its equivalence names.) The shareable hash table and
  LNMBs are allocated from paged pool.
 
  LNMBs within a hash chain are ordered by:
 
  o Length of the logical name, with shorter strings first.
 
  o Alphabetical order, according to the ASCII collating sequence,
    of the logical name string for LNMBs that have logical names of
    the same length
 
  o Address of the containing table address, with lowest address
    first, for LNMBs with the same logical name
 
  o Access mode of the logical name, with outermost access mode
    first, for LNMBs with the same logical name string in the same table
 
  A logical name can be defined  in different name tables and at different
  access modes.  Translating a logical name means locating the first
  definition that satisfies the containing table and access mode
  constraints.  The last criterion supplies the mechanism by which an
  outer mode definition for a name can override an inner mode definition.
 
  When the system does translation, it first translates the table name.
  It then calculates the hash value of the logical name and scans the
  hash chain of LNMBs with that value looking for one that matches the
  logical name of interest. It first compares name length and if the
  hash chain LNMB's name is too short, goes on to the next LNMB in the
  chain. If the name length is too long, the name has no translation.
  If the name length is equal, the system compares names.  And so on...
 
