On Fri, Mar 14, 2025 at 11:51 AM David Howells <dhowells@xxxxxxxxxx> wrote: > > Hi Viacheslav, Alex, > > Can you tell me what the I/O boundaries are for splitting up a read or a write > request into separate subrequests? > > Does each RPC call need to fit within the bounds of an object or does it need > to fit within the bounds of a stripe/block? Hi David, Within the bounds of a RADOS object. > > Can a vectored read/write access multiple objects/blocks? I'm not sure what "vectored" means in this context, but a single read/write coming from the VFS may need to access multiple RADOS objects. Assuming that the object size is 4M (default), the simplest example is a request for 8192 bytes at 4190208 offset in the file. > > What I'm trying to do is to avoid using ceph_calc_file_object_mapping() as it > does a bunch of 128-bit divisions for which I don't need the answers. I only > need xlen - and really, I just need the limits of the read or write I can > make. I don't think ceph_calc_file_object_mapping() can be avoided in the general case. With non-default ("fancy") striping, given for example stripe_unit=64K and stripe_count=5, a single 64K * 6 = 384K request at offset 0 in the file would need to access 5 RADOS objects, with the first object/RPC delivering 128K and the other four objects/RPCs 64K each. Thanks, Ilya