LCRE / PST Number Assignment
How are the Partition Specification Table (PST) numbers assigned?
When high PST numbers are in use, it appears that the low numbers are no longer used.
In this document, PST refers to dependent region PSTs (DPSTs), PSTs that represent a dependent region (MPP, BMP, IFP), a DBCTL thread, or an ODBA thread. IMS™ has other system PSTs that are not included in this discussion.
Dependent region PST (DPST) assignments are controlled by the Local Recovery Element (LCRE). LCREs in storage are written out at IMS checkpoint time. They are read back in and rebuilt during IMS warm start. An IMS start with FORMAT RS would be needed to clear these blocks.
The number of PST blocks that are available is controlled by the MAXPST and PST parameters.
Specifies a 1-to-3 digit number of PSTs to be allocated during system initialization.
Each active dependent region, DBCTL thread, or ODBA thread uses a PST. If additional dependent regions or threads are required during peak periods, IMS dynamically allocates additional PSTs as the dependent regions or threads are started. PSTs can be allocated up to the MAXPST value. During idle periods, the PSTs are released. The number of PSTs specified on PST= is maintained. For example, if PST=130, it is assumed that approximately 130 dependent regions or threads are always active. During peak periods, if additional dependent regions or threads are started, IMS dynamically allocates a PST for each dependent region or thread, up to the MAXPST value. As PSTs are terminated, the PSTs are released until a value of 130 PSTs is reached. This support is within the constraints of the operating system or subsystem being used. The default is 0.
Specifies the maximum number of blocks that the user permits the online control region to allocate.
The default is 255; the maximum is 999. When system activity increases, IMS allocates PST blocks up to the maximum specified. When the workload diminishes, these blocks are unallocated and storage is released to as low as the value specified by PST=.
When a dependent region or thread ends and the number of currently active regions is greater than the minimum value (PST), DFSCWU00 tears down the PST and releases the blocks. The LCRE is BCB-freed and is never freed back to z/OS®. It is kept on what BCB calls a level 0 queue. If the number of currently active regions is less than PST=, DFSCWU00 does not tear down the PST blocks. It leaves them all hooked up for faster assignment and frees the LCRE to the level 1 queue.
When a new dependent region or thread starts, DFSCWU00 first tries the level 1 queue since it is faster. It does not have to build all the PST related blocks since they are still already hooked up.
If the number of active regions is less than the minimum value (PST), whatever set of LCREs on the level 1 queue will be the first pool to be assigned. LCREs on the level 0 queue will be the next ones to use. If there are no LCREs on the level 1 or level 0 queues, then BCB gets a new IPAGE of LCREs and assigns the first LCRE in that IPAGE (up to MAXPST).
LCREs are not compressible and are never freed. They must guarantee unique PST numbers, and there are other recovery considerations as well. The PST and related blocks are freed down to the minimum value (PST).
Which PST number is assigned when a region is started just depends on which LCRE happens to be assigned. There is no guarantee which number is assigned. If the number of active regions or threads ever exceeds the minimum value (PST) and is now less than that value, there is a pool of free LCREs that can be assigned. Since LCREs are BCB IPAGEs, BCB tends to look at the last allocated IPAGE first when searching for a free block. That IPAGE will have the highest PST numbers. If there are free LCREs in that IPAGE, a high PST number is probably assigned.
It is still possible to get a low number at some point. It just depends on the order that the blocks are released, which queue they are on, etc. The PST number really does not mean anything other than as an identifier.