|
The IBM IMS TM Shared Queue environment resolved issues with buffers in shared queues, but some buffer issues still remain, because some messages are kept in local buffers and not on the shared queue. Messages that are kept in local buffers include serial transactions, command output and master terminal messages, and the first segment of a multi-segment message.
IMS will expand and contract the local buffer pool when needed. The following IMS parameters control the buffer pool expansions and contractions:
- QBUF= The initial number of queue buffers allocated. Min=3 and max=9999.
- QBUFMAX= The maximum number of queue buffers allocated. Min=200 and max=9999. If not specified, an unlimited number of buffers can be allocated.
- QBUFHITH= The high threshold percentage. When the buffer reaches the high threshold, it is dynamically expanded until it reaches the QBUFMAX limit. The default is 80%.
- QBUFLWTH= The low threshold percentage. When the buffer reaches the low threshold, it is compressed (compression occurs only when the number of buffers exceeds the QBUF number). The default is 50%.
- QBUFPCTX= The percentage of the initial queue buffers that are dynamically expanded when the QBUFHITH (high threshold) is reached. The default is 20%.
- QBUFSZ= The buffer size in bytes. It must be greater than or equal to the value for LGMSGSZ=. The maximum size can be 30 632 bytes. If not specified, the value for LGMSGSZ= is used.
The problem that IMS administrators are facing is that when they do not specify QBUFMAX, or when they specify QBUFMAX=0, there is no limit to the number of buffers that IMS will use, which can lead to memory usage problems. If they specify QBUFMAX, what value should it be? When IMS reaches the limit they set, IMS will cause an abend or freeze because local buffers are needed for IMS messages. How can this be prevented?
The IMS Sysplex Manager product from IMSTOOLS has a new feature for Shared Queue Local Buffer Protection. This new feature is built on top of the IMS exit routine DFSQSSP0. The new feature tracks when local buffers are allocated and when local buffers are freed. It can report on buffer usage, and it can control buffer allocations by applications. It is designed to run under the Generic QSN (Queue Space Notification) Exit Facility that allows the feature to be dynamically enabled and disabled.
This new feature:
- Monitors the use of the local buffers
- Reports buffer usage information
- Identifies large buffer users
- Issues warning messages when user-defined buffer thresholds are crossed
- Protects IMS from running out of local buffers
The new feature can run in one of several modes. Users have full control over the operation through new IMS Sysplex Manager parameters. Users can specify a run mode of either INACTIVE, REPORT, or ENFORCE.
INACTIVE mode: The feature is inactive, and no action is taken. This mode can be used to disable the feature.
REPORT mode: There is no buffer protection enforcement in this mode. The REPORT mode is still very useful because users can track actual buffer usage. The feature writes buffer usage information to the MVS console and to the IMS master terminal. Users have full control over the messages generated in REPORT mode. They can specify when the reporting should start and how frequently it should be done.
|
07.45.10 JOB00123 GJE9010I DFSQSSP0 REPORT MODE: 22 BUF 11 PCT IMS1
07.47.10 JOB00123 GJE9010I DFSQSSP0 REPORT MODE: 29 BUF 15 PCT IMS1
07.49.10 JOB00123 GJE9010I DFSQSSP0 REPORT MODE: 36 BUF 18 PCT IMS1
|
In REPORT and ENFORCE modes, the feature also collects information on large buffer users. This information is written periodically to the MVS console and to the IMS master terminal for review.
|
08.22.08 JOB00191 GJE9050I DFSQSSP0 LARGE USER: 17 BUF FOR BMP255 W0330U03 W0330U03 IMS1
|
ENFORCE mode: Use this mode to protect an IMS system from running out of local buffers. The exit looks at the IMS local buffer pool as being in one of three user-defined states: WARNING, ACTION, or CRITICAL. These states are defined by the user as a percent of all buffers used.
When buffer usage reaches the WARNING level, the feature periodically reports usage information but takes no action. Here is an example with the warning level set to 10%, and the reporting interval set to 3 minutes:
|
08.31.20 JOB00191 GJE9020I DFSQSSP0 WARNING MODE: 26 BUF 13 PCT IMS1
08.34.20 JOB00191 GJE9020I DFSQSSP0 WARNING MODE: 27 BUF 14 PCT IMS1
08.37.21 JOB00191 GJE9020I DFSQSSP0 WARNING MODE: 28 BUF 14 PCT IMS1
|
When buffer usage reaches the ACTION level, the feature periodically reports usage information and starts failing the allocate buffer calls for large buffer users. Large buffer user applications will get an error return on the next message insert:
|
08.22.48 JOB00191 GJE9030I DFSQSSP0 ACTION MODE: 151 BUF 76 PCT IMS1
08.24.48 JOB00191 GJE9030I DFSQSSP0 ACTION MODE: 158 BUF 79 PCT IMS1
|
When buffer usage reaches the CRITICAL level, the feature periodically reports usage information and fails any new buffer allocation by any application. Users should set this threshold high, 90% or higher. The feature prevents the IMS abend and freezing problem because it prevents applications from making buffer allocations. The feature does not interfere with buffer allocations needed by IMS for IMS messages:
|
23.01.19 JOB00173 GJE9040I DFSQSSP0 CRITICAL MODE: 179 BUF 90 PCT IMS1
23.02.19 JOB00173 GJE9040I DFSQSSP0 CRITICAL MODE: 180 BUF 90 PCT IMS1
|
In summary, the IMS Sysplex Manager provides you with a flexible tool to protect local IMS buffers in a shared queue environment. You can manage IMS memory usage better by limiting the amount of buffers that IMS can use when using QBUFMAX without the fear of causing an IMS abend or freezing IMS because it ran out of buffers.
|