[Info-vax] OpenVMS async I/O, fast vs. slow

Arne Vajhøj arne at vajhoej.dk
Sat Nov 4 23:05:07 EDT 2023


On 11/4/2023 9:53 PM, Stephen Hoffman wrote:
> On 2023-11-04 21:44:24 +0000, Arne Vajhøj said:
> 
>> $QIO(W) is original. $IO_PERFORM(W) was added much later.
>>
>> $IO_PERFORM(W) is called fast path IO. The name and the fact that it 
>> was added later hint at it being faster.
>>
>> That name has always give me associations to a strategy of doing lots 
>> of checks upfront and then skip layers and checks when doing the 
>> actual reads/writes. But I have no idea if that is actually what it does.
> 
> Careful with the "fast path IO" names, here.
> 
>  From somebody long ago and far away, an overview of Fast Path: 
> http://h41379.www4.hpe.com/wizard/wiz_2358.html
> 
> I wouldn't expect much of a performance benefit to Fast Path on a 
> uniprocessor configuration. If anything.
> 
> Fast I/O may well be useful here, though. Fast I/O is effectively a 
> version of the $qio read and write paths, reworked for 64-bit support 
> and for speed.
> 
> Quoth the doc: "In total, Fast I/O services eliminate four spinlock 
> acquisitions per I/O (two for the MMG spinlock and two for the SCHED 
> spinlock). The reduction in CPU cost per I/O is 20 percent for 
> uniprocessor systems and 10 percent for multiprocessor systems."
> 
> Additionally, use of buffer objects can usually improve somewhat upon 
> that Fast I/O performance, though how much depends on the details of 
> local system memory activity.
> 
> Fast Path and Fast I/O were, are, and will always remain stupid feature 
> names.

So $IO_FASTPATH(W) is for "Fast Path" and for speeding
up IO on multi-processors while $IO_SETUP + $IO_PERFORM(W) +
$IO_CLEANUP are for "Fast IO" and for reducing spinlock overhead?

And no relation - $QIO(W) or $IO_PERFORM(W) and fast path on
or fast path off are 4 valid options?

Arne








More information about the Info-vax mailing list