From:Steve Adams
Date:30-Oct-2000 23:53
Subject:   I/O subsystem block sizes

You need to know which path through the I/O subsystem is being used, and which components of that path constrain the size of I/O operations.

The most important is the file system. UFS style file systems constrain I/O to the file system block size. Operating system buffered I/O to an extent based file system like VxFS is constrained to whatever the standard file system buffer size is. I don't know Reliant Unix, so I cannot tell you what the number is for you, but you should be able to work it out for yourself by studying the ratio of blks/s to r+w/s in the sar -d output for various filesystems. If you use direct I/O or raw, then the file system buffer size is not relevant.

PS: I can now confirm that Reliant Unix 5.45 uses a paged buffer cache and so the standard file system buffer size is the same as the page size, which is indeed 16K.
The standard file system buffer size is typically the same as the memory page size or page cluster size, however, there is no necessary relationship - it is just a natural choice. Thus the page size should not be regarded as a constraint. It is the file system buffer size that counts.

If you are using a logical volume manager product, then you need not worry about its concept of the page size, however, I/O operations that span a logical track group boundary will be split at that boundary.

If you have disk striping, then obviously I/O operations will be split at stripe element boundaries. Thus the alignment of database blocks to stripe elements is important.

I am not aware of any cached disk arrays that constrain physical I/O operations to their cache slot sizes.

Sorry, but probably my fist attempt to ask a question regarding a memory page size was lost. Again, should I match db_block_size=file_ system_block size=memory_page_size? And what about RAID controller cache memory ? Is this memory also divided into blocks (pages)? So should I rewrite previous statement as db_block_size=file_system_block_size= host_memory_page_size=RAID_controller_cache_memory_block_size ?

Could you clarify me this situation ? I have Reliant UNIX box with 16k memory page and Oracle on vxfs with 8k block size. What is the best db_block_size - 8k or 16k ? Should I match db_block_size to file system block size or memory page? And what about raw case? I'm wondering about relationship between db_block_size and memory page.