z/TPF - Group home

Application support for limiting physical DASD I/Os (PJ46401)

  
Non-transactional applications and utilities that do a lot of physical (non-VFA) DASD I/O can slow down DASD I/O generated by transactional work.  To prevent this from happening a set of deliverables was provided with APAR PJ46401 to allow the user to control the amount of DASD I/O activity generated by a non-transactional application or utility.

A new C function, tpf_dasd_iops_limit, can be coded by user applications to check if the physical DASD I/O per second limit has been reached by this TPF subsystem.  The function returns a flag indicating the DASD I/O limit has or has not been reached.  If the DASD I/O limit has been reached, an additional value is returned indicating the number of microseconds the application should give up control before checking again.

A new parameter on the ZSONS command, ZSONS ALTER IOPS, will allow system administrators to set the desired physical DASD I/O per second limit for a TPF subsystem for applications and utilities that have tpf_dasd_iops_limit coded. A value of zero indicates there is no limit.  ZSONS DISPLAY IOPS was also provided to display the limit set by ZSONS ALTER IOPS. 

A new parameter on the ZSTAT command, ZSTAT IOPS will allow system administrators to display the number of physical DASD I/Os over the last second.

Examples:

ZSTAT IOPS

CSMP0097I 09.57.10 CPU-B SS-BSS  SSU-HPN  IS-01
STAT0062I 09.57.10 DASD IOPS DISPLAY

SUBSYSTEM         TOTAL         DEVA         DEVB         DEVC         DEVD
BSS               48388        41435         6953            0            0
END OF DISPLAY+

...


ZSONS ALTER IOPS LIMIT-20000

CSMP0097I 11.50.47 CPU-B SS-BSS  SSU-HPN  IS-01
SONS0066I 11.50.47 MAXIMUM PHYSICAL DASD IOPS     20000+

Sample call to tpf_dasd_iops_limit

#include <tpf/c_iops.h>
#include <tpf/tpfapi.h>

int main();
 {
  struct iops_limit iops_info, *my_iops_limit;
  my_iops_limit = &iops_info;

  tpf_dasd_iops_limit(my_iops_limit);
     while (my_iops_limit->limit_flag)
      {
       usleep((unsigned int)my_iops_limit->microseconds);
       tpf_dasd_iops_limit(my_iops_limit);
      }
  …. issue find or file at this point ….
  }

Recoup has been updated to use the tpf_dasd_iops_limit API.  Furthermore, if Recoup is run on fenced I-streams, Recoup can generate a large number of DASD IOPS.  If the IOPS limit is not set and depending on the capacity of the DASD subsystem, Recoup can overwhelm the DASD subsystem. 

For a discussion on TPF’s use of this functionality for recoup, see this BLOG entry

For more information on PJ46401 please see the APEDIT