![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
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...
|