As in the 31-bit address space, a virtual "line"
marks the 16-megabyte address. The 64-bit address space also includes the
virtual line at the 16-megabyte address; additionally, it includes a second
virtual line called the bar that marks the 2-gigabyte address.
The bar separates storage below the 2-gigabyte address, called below the bar,
from storage above the 2-gigabyte address, called above the bar. The area above
the bar is intended for data; no programs run above the bar. There is no area
above the bar that is common to all address spaces, and no system control
blocks exist above the bar. You can set a limit on how much virtual storage
above the bar each address space can use. This limit is called the MEMLIMIT .
If you do not set MEMLIMIT, the system default is 0, meaning no address space
can use virtual storage above the bar (Use of real storage above the 2GB is not
controlled by this parameter). If you want to use virtual storage above the
bar, you need to set the MEMLIMIT explicitly. You can set an installation
default MEMLIMIT through SMFPRMxx in PARMLIB. You can also set MEMLIMIT for a
specific address space in the JCL that creates the address space or by using
SMF exit IEFUSI.
To use virtual storage above the bar, a program must request
storage above the bar, be in AMODE 64 and use the new z/Architecture assembler
instructions.
SMF MEMLIMIT Parameter
An installation can set the default MEMLIMIT through
SMFPRMxx in PARMLIB.
MEMLIMIT(NOLIMIT)
nnnnnM
nnnnnG
nnnnnT
nnnnnP
This specifies the default MEMLIMIT to be used by jobs not
establishing a MEMLIMIT in their JCL. For reference see z/OS MVS JCL
User's Guide . NOLIMIT means that there is no limit on the use of
virtual storage above 2 gigabytes.
MEMLIMIT values are defined with nnnnnM for megabytes,
nnnnnG for gigabytes, nnnnnT for terabytes, or nnnnnP for petabytes. For
example, to request 1200 gigabytes, you can specify MEMLIMIT(1200G). D SMF,O
operator command displays the current MEMLIMIT, as shown in example below:
RESPONSE=SYSA
IEE967I 15.39.05 SMF PARAMETERS 795
MEMBER = SMFPRMZ3
MULCFUNC -- DEFAULT
MEMLIMIT(00000M) -- DEFAULT
DDCONS(YES) -- DEFAULT
LASTDS(MSG) -- DEFAULT
NOBUFFS(MSG) -- DEFAULT
DUMPABND(RETRY) -- DEFAULT
SUBSYS(OMVS,NODETAIL) -- SYS
SUBSYS(OMVS,TYPE(0,30,70:79,88:90,103,245)) -- PARMLIB
SUBSYS(OMVS,INTERVAL(SMF,SYNC)) -- PARMLIB
SUBSYS(OMVS,NOEXITS) -- PARMLIB
SUBSYS(STC,NODETAIL) -- SYS
Note: If MEMLIMIT is not specified in
SMFPRMxx, the default value is 0M.
MEMLIMIT on JOB and EXEC Statement
MEMLIMIT is a new keyword on the JOB and EXEC statements.
MEMLIMIT specifies the limit on the total number of usable virtual storage
above the bar for a single address space.
While there is no practical limit to the virtual storage
above the bar, there are practical limits to the real storage frames and
auxiliary storage slots backing the virtual storage area. To control the amount
of real and auxiliary storage an address space can use for memory objects at
one time, your installation should establish an installation default MEMLIMIT
to set the total amount of usable virtual pages above the bar for a single
address space. You set this default on the MEMLIMIT parameter in the SMFPRMxx
parmlib member, or through the SET SMF or SETSMF commands. This default takes
effect if a job does not specify MEMLIMIT on the JOB or an EXEC statement or
REGION=0M in the JCL; the MEMLIMIT specified in an IEFUSI exit routine
overrides all other MEMLIMIT settings.
The system enforces the MEMLIMIT when you issue the IARV64
GETSTOR and CHANGEGUARD services. When your unconditional request for new
storage (either for a new memory object or for more usable storage in an
existing memory object) causes the MEMLIMIT to be exceeded, the system abends
the program. IBM recommends programs use the COND parameter to make a
conditional request and check the return code to make sure the storage is available.
What happens to the MEMLIMIT for an already-created
address space if a SET SMF or SETSMF command changes the default MEMLIMIT
(either the system default or the installation default)?
If the command raises the current default MEMLIMIT, all
address spaces whose MEMLIMIT was set through SMF run with the higher default.
If the command lowers the current default MEMLIMIT, all
address spaces whose MEMLIMIT was set through SMF keep their original system
default.
A SET SMF or SETSMF command cannot change the MEMLIMIT value
set through JCL or by an IEFUSI installation exit.
MEMLIMIT Enforcement Through IEFUSI
The SMF IEFUSI exit can change the MEMLIMIT value by
updating the value in the third double word. But the publication failed to
mention the value used is in the unit of MB (for example, 00000000 00008400 is
33 GB).
The z/OS 1.2 MVS Installation Exits manual
does not describe the meaning of the flags in the first double word. The z/OS
1.2 book contains a NOLIMIT value of FFFFFFFF FFFFF000, which is incorrect.
Both of these errors have been corrected in the z/OS 1.3 publication. The z/OS
1.2 and z/OS 1.3 books do not mention the unit of MB in the third double word
When IEFUSI Exit receives control, Register 1 points to a
list of addresses. Word 9 contains the address of an area, as described in the
z /OS 1.3 MVS Installation Exits :
Word 9
The address of an area consisting of three 64-bit
fields:
| A 64-bit flagword. The first 8 bits indicate
whether the
| source of the MEMLIMIT is from JCL or the
SMF-supplied
| system default. The remaining 56 bits are not
used. Possible
| values for the first 8 bits, and their meanings
are as
| follows:
| 01 -- indicates MEMLIMIT is from SMF
| 02 -- indicates MEMLIMIT is from JCL
| 03 -- indicates MEMLIMIT was set to NOLIMIT
because JCL
| specified REGION=0
| FF -- indicates MEMLIMIT is from SMF (indicative
of
| internal processing errors)
| Note: Other values are possible when initializing
a child
| address space in the UNIX System Services
| environment. See UNIX System Services
publications
| for more information.
| The 64-bit MEMLIMIT originally requested by the
source that
| is specified in the flagword.
| The 64-bit MEMLIMIT requested by the IEFUSI exit.
The
| initial value is X'FFFFFFFFFFFFFFFF' to indicate
that no
| value was set by the exit. If not changed, SMF
uses the
| MEMLIMIT that was originally requested.
Note: A MEMLIMIT of NOLIMIT is equivalent to
X'00000FFFFFFFF000'.