On Wed, Mar 22, 2023 at 4:14 PM Matt Benjamin <mbenjami@redhat.com> wrote:
On Wed, Mar 22, 2023 at 3:12 PM Casey Bodley <cbodley@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