There is a lot more to it than just opening multiple DCBs.  If you did
this IOS would queue the I/O and you would not get any benefit.  You
need to dynamically create new DD names and open your data set to these
newly created DD names.  When you create your channel programs you will
need to make sure that the DEFINE EXTENT ranges do not overlap otherwise
IOS will again queue your I/O.  You also need to direct your I/O to
specific locations in your data set.  If the channel program issues
standard READ CCWs eventually your channel programs will overlap.  This
is true with every I/O.  The code required to determine which blocks
should be read by which DD is not an insignificant piece of code.  You
will also need to make sure that you can recover from I/O interrupts
correctly.  Finally you will need the ability to put the buffers back in
order if the input sequence is important.  

If you are writing instead of reading, there are other challenges to
overcome.  

I do not think this can be done using BSAM or QSAM.  I think EXCP or
lower is required. 

Before you undertake all of this coding it is important for you to
understand where the bottleneck in your application is.  If the longest
leg is not the I/O that you are looking to improve on than all of this
work will not buy you anything. 

John Reda
Syncsort, Inc.

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[EMAIL PROTECTED] On
Behalf Of Tom Quarendon
Sent: Monday, December 17, 2007 4:04 AM
To: [email protected]
Subject: Exploiting Parallel Access Volumes

Since I got such a good response from the last question, here's another.

My understanding of channel program execution is that there is one queue

per UCB, i.e per volume. In other words there isn't a huge amount to be 
gained by executing lots of concurent channel programs to the same file 
(you'd get some advantage, maybe, in that you'd be able to construct 
your next EXCP invocation and have the EXCP do all the prep work for it 
before actually checking that you previous one is done).
Parallel access volumes however mean that there are potentially multiple

UCBs per device and therefore multiple channel program queues. However 
if I examine the list of UCB associated with the extents of my file they

are all the same. So is(are) parallel access volume technology something

I can exploit in my application? The best I could presumably do is to 
allow multiple channel programs to be scheduled by my application 
against different extents in the file, but since my UCB addresses are 
all the same, that's not going to work. Is this an MVS configuration 
issue? i.e is there something that would need to be set up on the 
machine to allow this? Or is this more a case of different jobs will get

different UCB addresses for the same volume, so they can be 
parallelized, but you can't exploit that within a single app?
Searching on the web, Syncsort reckons it exploits PAV to get 30 percent

improvement in elapsed time or something. I want a piece of that if I 
can get it.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to