I'm ignorant of this. But did a search in IBMLink.
It appears that there are "shared libraries" in z/OS UNIX which are
loaded somewhere? (not documented where). The size of this area is
specified in the SHRLIBRGNSIZE parameter. The load modules loaded into
this area are .so UNIX "dynamic subroutines" which are marked as
shareable in the filesystem via the "+l" extattr attribute. This area is
them mapped into every UNIX address space into "high private". I would
guess this would eventually involve IARVSERV.
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/IEA2A9B0/5.0
and
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/IEA2A6A1/20.0?SHELF=IEA2BKB2&DT=20101208204043
The larger the area, the more high private is lost in every UNIX address
space which attempts to load a shared library. And the more ECSA is used
for mapping tables.
It appears that if it is too small, it is not used at all and each
shared library is loaded into the user's address space as if it were not
shared. This increases I/O.
So I guess "shared library" region size is like an LLA for UNIX shared
libraries. But I don't read of any way for "obsolete" modules to be
purged and their storage reclaimed. And there doesn't appear to be any
way to actually determine what is loaded. I would guess into some
address space or data space controlled by the UNIX kernel.
You could find all the possibilities by searching all of your mounted
filesystems for files with the extended attribute of "l" specified.
find / -ext l >~/list.of.shared.library.files
The above will likely run a fair amount of time. I'd do it in batch.
In:
https://www-304.ibm.com/ibmlink/sis/viewAparDoc.wss?context=aparAndUsage&documentIds=OA18803&searchWords=SHRLIBRGNSIZE&libraryType=D&lc=en&cc=US
<quote>
For a BPX1LOD (loadhfs) syscall request, when the module
cannot be loaded as a user-shared library program, it should be
loaded into user private storage as non-shared. This is not
happening, and the loadhfs() syscall is failing with
rsn091E03B7 JRShrStgShortage due to MAXSHAREPAGES being
exceeded.
</quote>
https://www-304.ibm.com/ibmlink/sis/viewAparDoc.wss?context=aparAndUsage&documentIds=OA04183&searchWords=SHRLIBRGNSIZE&libraryType=D&lc=en&cc=US
<quote>
Change current statement as follows:
The storage used in the user address space to establish the
mapping to the shared library region is from the high end of
private storage;
| in most cases,
it does not interfere with the virtual storage
used by the application program.
Add the following paragraph:
The amount of storage that is carved out of the high end of
private storage of each address space that loads a system
shared library object is based on the SHRLIBRGNSIZE parmlib
parameter value. If this value is set too high, the storage
set aside for the shared library region mapping could
interfere with the private storage requirements of each of
these address spaces. For this reason, the value specified
for SHRLIBRGNSIZE should be the minimum size required to
contain all of the system shared library programs that are
to be used on the system.
</quote>
https://www-304.ibm.com/ibmlink/sis/viewEskbDoc.wss?context=aparAndUsage&documentIds=swg21178068&searchWords=SHRLIBRGNSIZE&libraryType=E&lc=en&cc=US
<quote>
Problem(Abstract)
What are the consequences (for example, are there abends) of specifying
a SHRLIBRGNSIZE that is not large enough for all the
shared-library-eligible (that is, have the "l" extended attribute set)
programs that are accessed?
Resolving the problem
If the shared library cache is not big enough, then z/OS will revert to
normal storage use and the load module will be loaded into the broker
address space.
</quote>
On Sat, 2011-10-29 at 23:46 -0400, Lizette Koehler wrote:
> SHRLIBRGNSIZE
--
John McKown
Maranatha! <><