On Wed, Mar 22, 2023 at 4:14 PM Matt Benjamin <mbenjami(a)redhat.com> wrote:
On Wed, Mar 22, 2023 at 3:12 PM Casey Bodley <cbodley(a)redhat.com> wrote:
we can start by trying out asio's new asio::stream_file[1] and
asio::random_access_file[2] classes based on io_uring. both classes
can be constructed with an existing file descriptor using the
'native_handle_type' overload
now that's encouraging
the synchronous case probably won't be that simple, since we won't
have an asio::io_context to construct the asio::stream_file with. we
might just fall back to the read system call there
what is the synchronous case? normally sync can be implemented on async?
now that i think on it more, there isn't really a synchronous case here at all
even with civetweb, the rados object reads/writes were asynchronous
via librados' aio_operate(). both because librados can read/write
chunks on separate OSDs in parallel, and because we're also streaming
data to/from the frontend socket at the same time
for file i/o, we need to implement rgw::Aio::OpFunc for the reads and
writes, similar to the Aio::librados_op()s for
librados::ObjectReadOperation and ObjectWriteOperation. i opened a
draft PR at
https://github.com/ceph/ceph/pull/50635 that shows what
those OpFuncs look like
Matt
--
Matt Benjamin
Red Hat, Inc.
315 West Huron Street, Suite 140A
Ann Arbor, Michigan 48103
http://www.redhat.com/en/technologies/storage
tel. 734-821-5101
fax. 734-769-8938
cel. 734-216-5309