profile
viewpoint
Saoirse Shipwreckt withoutboats Berlin without.boats In civilizations without boats, dreams dry up, espionage takes the place of adventure, and police take the place of pirates.

rust-lang/rustup 3664

The Rust toolchain installer

rust-lang/futures-rs 3489

Zero-cost asynchronous programming in Rust

stjepang/smol 1788

A small and fast async runtime for Rust

rust-lang-nursery/failure 1432

Error management

rust-lang/chalk 932

An implementation and definition of the Rust trait system using a PROLOG-like logic solver

ringbahn/ringbahn 369

safe bindings to io-uring

rustasync/team 232

A point of coordination for all things Rust and Async

ringbahn/iou 212

Rust interface to io_uring

cargonauts-rs/cargonauts 177

A Rust web framework

push eventringbahn/ringbahn

Without Boats

commit sha c0e384a97655b045ae003284ca33bdd0f5a3d893

Small refactors to reduce unsafe usage.

view details

push time in 4 hours

PR opened ringbahn/ringbahn

Small refactors to reduce unsafe usage.
+138 -97

0 comment

4 changed files

pr created time in 6 hours

push eventringbahn/ringbahn

Without Boats

commit sha b4f9dab69053de7905bc213fa48d13020f94de01

Small refactors to reduce unsafe usage.

view details

push time in 6 hours

create barnchringbahn/ringbahn

branch : use-less-unsafe

created branch time in 7 hours

push eventringbahn/ringbahn

Without Boats

commit sha 1e1adc4e105f022af855d262b1594acc97d57fc0

Make Buffer's interface more general

view details

push time in 9 hours

push eventringbahn/ringbahn

Without Boats

commit sha f20ddc577997612a98def2a9216c4ed15eab0754

Add Cancel trait. This provides a cleaner way to construct a Cancellation: it can now be constructed from any type that implements Cancel, which includes things like Boxes, CStrings, buffers, etc. All constructions of Cancellation now pass through `Cancellation::from`, instead of unique constructors for different types. The Cancel trait provides a way to decompose an object into two words, and then a way to drop that object from those two words. A Cancellation is essentially `Box<dyn Drop>`, except it stores an extra word for metadata for slices and trait objects. Event::cancel has been changed to take ownership of the receiver, be safe, and have a default implementation (which just leaks the receiver). By default, therefore, the data owned by an event is leaked. An implementation can instead construct a cancellation to deallocate the data it owns.

view details

Saoirse Shipwreckt

commit sha 74f0d96241a3be752b69b1d817204de4b64b4598

Merge pull request #56 from ringbahn/cancel-trait Add Cancel trait.

view details

push time in 10 hours

PR merged ringbahn/ringbahn

Add Cancel trait.

This provides a cleaner way to construct a Cancellation: it can now be constructed from any type that implements Cancel, which includes things like Boxes, CStrings, buffers, etc. All constructions of Cancellation now pass through Cancellation::from, instead of unique constructors for different types.

The Cancel trait provides a way to decompose an object into two words, and then a way to drop that object from those two words. A Cancellation is essentially Box<dyn Drop>, except it stores an extra word for metadata for slices and trait objects.

Event::cancel has been changed to take ownership of the receiver, be safe, and have a default implementation (which just leaks the receiver). By default, therefore, the data owned by an event is leaked. An implementation can instead construct a cancellation to deallocate the data it owns.

+170 -173

0 comment

26 changed files

withoutboats

pr closed time in 10 hours

PR opened ringbahn/ringbahn

Add Cancel trait.

This provides a cleaner way to construct a Cancellation: it can now be constructed from any type that implements Cancel, which includes things like Boxes, CStrings, buffers, etc. All constructions of Cancellation now pass through Cancellation::from, instead of unique constructors for different types.

The Cancel trait provides a way to decompose an object into two words, and then a way to drop that object from those two words. A Cancellation is essentially Box<dyn Drop>, except it stores an extra word for metadata for slices and trait objects.

Event::cancel has been changed to take ownership of the receiver, be safe, and have a default implementation (which just leaks the receiver). By default, therefore, the data owned by an event is leaked. An implementation can instead construct a cancellation to deallocate the data it owns.

+170 -173

0 comment

26 changed files

pr created time in 10 hours

create barnchringbahn/ringbahn

branch : cancel-trait

created branch time in 10 hours

push eventringbahn/iou

4lDO2

commit sha 1698918cb9930256f7da4a5721973fcb92d6be1c

Implement Debug for CQE. At the moment it's simply a #[derive(Debug)], but the existence of the impl is more important than how it's printed, in my opinion.

view details

push time in 12 hours

PR merged ringbahn/iou

Implement Debug for CQE

Makes CQE implement std::fmt::Debug. At the moment it's simply a #[derive(Debug)], but the existence of the impl is more important than how it's printed, at least initially.

+1 -0

1 comment

1 changed file

4lDO2

pr closed time in 12 hours

pull request commentringbahn/iou

Implement Debug for CQE

Thanks! :+1:

4lDO2

comment created time in 12 hours

PR closed ringbahn/ringbahn

ProvideBuffers API for buffer preregistration

The Drive API is extended with two associated types - the read buffer and the write buffer types - which both must implement a trait called ProvideBuffer. This trait abstracts the notion of providing a buffer for IO to be preformed in.

Three buffer types are provided:

  • HeapBuffer, which is a simple heap allocated buffer
  • RegisteredBuffer, which a buffer that has been preregistered with io_uring_register
  • GroupRegisteredBuffer, (only valid as a read buffer), which uses the automatic buffer selection group registration API

Both of the latter two APIs require the underlying drive handle to implement additional extension to support their operation.

Closes #2

+670 -183

1 comment

16 changed files

withoutboats

pr closed time in a day

pull request commentringbahn/ringbahn

ProvideBuffers API for buffer preregistration

Closing as stale

withoutboats

comment created time in a day

push eventringbahn/ringbahn

Without Boats

commit sha 13fc047ba4e537b83945386d0d6af7874558f45b

make many events take UringFd

view details

Without Boats

commit sha f3f21dbb55bc860ddaf835c2a0c43649eae774a1

Support registration with demo driver, test it

view details

Without Boats

commit sha 8d46e96387c7e3bea3ca69e2b13a92260359492a

Make more events take UringFd

view details

Without Boats

commit sha b20253c83968faaf5be5f8c92dced0d969ef2f94

fix inversion bug

view details

Saoirse Shipwreckt

commit sha cbd2945c762806fbdbab538c8d56293464b6b2e6

Merge pull request #55 from ringbahn/events-taking-uring-fd Make many events take UringFd

view details

push time in a day

PR merged ringbahn/ringbahn

Make many events take UringFd

This way, the event API can be used with registered file descriptors from iou.

+194 -65

0 comment

17 changed files

withoutboats

pr closed time in a day

push eventringbahn/ringbahn

Without Boats

commit sha b20253c83968faaf5be5f8c92dced0d969ef2f94

fix inversion bug

view details

push time in a day

push eventringbahn/ringbahn

Without Boats

commit sha f3f21dbb55bc860ddaf835c2a0c43649eae774a1

Support registration with demo driver, test it

view details

Without Boats

commit sha 8d46e96387c7e3bea3ca69e2b13a92260359492a

Make more events take UringFd

view details

push time in a day

push eventringbahn/iou

Without Boats

commit sha 34c674e654f4388be4d6e6ce17abe88bd83a1716

Some SQEs can't use the fixed file feature

view details

push time in a day

pull request commentrust-lang/rust

Remove std::io::lazy::Lazy in favour of SyncOnceCell

IMO all the externally visible differences are bug fixes. This is great!

m-ou-se

comment created time in 2 days

PR opened ringbahn/ringbahn

Make many events take UringFd

This way, the event API can be used with registered file descriptors from iou.

+95 -29

0 comment

10 changed files

pr created time in 2 days

create barnchringbahn/ringbahn

branch : events-taking-uring-fd

created branch time in 2 days

push eventringbahn/iou

Without Boats

commit sha fc67a3aa6aa0fbc904741e6acd4e2528ca17f287

Add Registered::into_inner

view details

push time in 2 days

PR merged ringbahn/iou

Add Registered::into_inner
+5 -1

0 comment

2 changed files

withoutboats

pr closed time in 2 days

PR opened ringbahn/iou

Add Registered::into_inner
+5 -1

0 comment

2 changed files

pr created time in 2 days

push eventringbahn/iou

Without Boats

commit sha 2b3823a7bfae6b0dfaa09e51abe6c7fbad5b701b

Add Registered::into_inner

view details

push time in 2 days

create barnchringbahn/iou

branch : registered-into-inner

created branch time in 2 days

push eventringbahn/ringbahn

Without Boats

commit sha 861d0052c89b5b93a316a875aaf50e88270aa3ac

Eliminate the is_eager hint. It's not clear that this would be useful; for now getting rid of it.

view details

push time in 2 days

PR merged ringbahn/ringbahn

Eliminate the is_eager hint.

It's not clear that this would be useful; for now getting rid of it.

+25 -42

0 comment

10 changed files

withoutboats

pr closed time in 2 days

PR opened ringbahn/ringbahn

Eliminate the is_eager hint.

It's not clear that this would be useful; for now getting rid of it.

+25 -42

0 comment

10 changed files

pr created time in 2 days

create barnchringbahn/ringbahn

branch : remove-is-eager

created branch time in 2 days

push eventringbahn/ringbahn

Without Boats

commit sha 81f303a816cffe76a173d6b45965ed67346f1458

Safer API for Cancellation. Cancellation gains 3 safe constructors: one for boxed objects, one for boxed trait objects, and one for boxed slices. Almost the entire rest of ringbahn can go through one of these safe APIs, eliminating a major source of pervasive unsoundness.

view details

push time in 2 days

PR merged ringbahn/ringbahn

Safer API for Cancellation.

Cancellation gains 3 safe constructors: one for boxed objects, one for boxed trait objects, and one for boxed slices. Almost the entire rest of ringbahn can go through one of these safe APIs, eliminating a major source of pervasive unsoundness.

Also gets rid of the now unnecessary UringData trait added in #52. As a result the buffer code is basically entirely safe now.

+70 -129

0 comment

18 changed files

withoutboats

pr closed time in 2 days

PR opened ringbahn/ringbahn

Safer API for Cancellation.

Cancellation gains 3 safe constructors: one for boxed objects, one for boxed trait objects, and one for boxed slices. Almost the entire rest of ringbahn can go through one of these safe APIs, eliminating a major source of pervasive unsoundness.

Also gets rid of the now unnecessary UringData trait added in #52. As a result the buffer code is basically entirely safe now.

+70 -129

0 comment

18 changed files

pr created time in 2 days

create barnchringbahn/ringbahn

branch : safer-cancel-api

created branch time in 2 days

push eventringbahn/ringbahn

Without Boats

commit sha dde765367f151cbc654f58031bb6f39a01be8be8

fix master branch

view details

push time in 2 days

push eventringbahn/ringbahn

Without Boats

commit sha 12e85c20a3c5346ee683fc36684663621096f504

Replace the Buffer internals to be safer.

view details

push time in 2 days

PR opened ringbahn/ringbahn

Replace the Buffer internals to be safer.
+159 -166

0 comment

3 changed files

pr created time in 2 days

create barnchringbahn/ringbahn

branch : new-buf

created branch time in 2 days

push eventringbahn/maglev

Without Boats

commit sha 9c36ae33a43184ac88bff23285c3defcd30a92d7

update git dep to ringbahn org

view details

push time in 2 days

push eventringbahn/maglev

Without Boats

commit sha 1b6dad184b43de7179bd0c6ccfb96b7340d8313a

update dependencies

view details

push time in 2 days

push eventringbahn/iou

Without Boats

commit sha 1e2bc53e0f2a53028a6327b739ac4e195683dca6

register_files should not take a mutable reference

view details

push time in 3 days

push eventringbahn/ringbahn

Without Boats

commit sha 6660fa19c148f79c821263296f6286a4ee31ee05

Improve code around closing. All IO objects will be closed in a blocking fashion if they have not been closed asynchronously (closes #46). Also, they will panic if the user attempts to perform IO after they have been closed. UnixStream is made a thin wrapper around TcpStream instead of duplicating a lot of code.

view details

push time in 3 days

PR merged ringbahn/ringbahn

Improve code around closing.

All IO objects will be closed in a blocking fashion if they have not been closed asynchronously (closes #46). Also, they will panic if the user attempts to perform IO after they have been closed.

UnixStream is made a thin wrapper around TcpStream instead of duplicating a lot of code.

+86 -91

0 comment

6 changed files

withoutboats

pr closed time in 3 days

issue closedringbahn/ringbahn

the Tcpstream won't be close after drop the Tcpstream

in this code, when run the test and see the /proc/{pid}/fd, we can see there is no fd which type is socket. Press enter to make program continue running until sleep, and see the /proc/{pid}/fd again, we can see there is a fd like 4 -> 'socket:[13186835]'.

In normal the Tcpstream should be closed but it doesn't, and I find the Tcpstream doesn't implement the Drop

closed time in 3 days

Sherlock-Holo

PR opened ringbahn/ringbahn

Improve code around closing.

All IO objects will be closed in a blocking fashion if they have not been closed asynchronously (closes #46). Also, they will panic if the user attempts to perform IO after they have been closed.

UnixStream is made a thin wrapper around TcpStream instead of duplicating a lot of code.

+86 -91

0 comment

6 changed files

pr created time in 3 days

create barnchringbahn/ringbahn

branch : close-improvements

created branch time in 3 days

issue commentringbahn/ringbahn

print macros do not lock stdout or stderr

The way to do this is to use an async around Stdout and StdErr and then lock those. its not enough to use StdoutLock directly without an async mutex because then you will have deadlocks between different tasks using an async print.

withoutboats

comment created time in 3 days

issue openedringbahn/ringbahn

print macros do not lock stdout or stderr

If a println gets separated into multiple writes, it could be interleaved with the printing of other tasks. This should be fixed at some point.

created time in 3 days

issue closedringbahn/ringbahn

Feature request: Support reading and writing at specific offset.

Currently read and write events always pass '0' offset to io_uring. It would be useful to support custom offsets. Btw, i think read event should have io field declared as shared ref: pub io: &'a T, same in write event probably, but I'm not sure.

closed time in 3 days

twissel

issue commentringbahn/ringbahn

Support linked submissions

The iou API now supports this. The only correct way to link things in ringbahn is hard_linked, though.

withoutboats

comment created time in 3 days

issue closedringbahn/ringbahn

Revising the iou part of the interface

Once I merge #29, ringbahn will provide working File, TcpListener, and TcpStream types, which are not 100% API complete, but which basically work. I want to turn my attention to two different problems.

One is solving #2: adding an interface to Drive for drivers to provide the buffers used for IO, which could be used to preregister buffers etc.

The other is changing the interface to iou. Basically, I think I will need to incorporate iou into this library, possibly exposing a different interface. This makes iou a dead-end from my perspective, unfortunately.

This revision would help solve many problems:

  1. Currently, implementing a driver requires unsafe code, because the complete function is unsafe. The only thing users need to meet this requirement is never assign user_data themselves. We could instead make setting user_data an unsafe operation, making the entire interface for driver 100% safe.
  2. We could make this interface supporting mocking of SQEs and CQEs, allowing users to implement totally mock drivers after #18.
  3. In order to solve both #3 and #22 we need a way for poll_prepare to require more than 1 sequential SQE. (Possibly, these SQEs would also be automatically linked by ringbahn). iou's current interface is not conducive to that.
  4. As it stands, iou is designed around wrapping the entire submission side interface in a mutex. However, this is not strictly necessary: separate SQEs can be accessed concurrently (essentially like iterating mutably over the SQ), and then when all SQE references are dropped, submission can occur. This makes it more like a RwLock than a Mutex. Ideally, the new interface would make this easy to implement with safe code.

closed time in 3 days

withoutboats

issue commentringbahn/ringbahn

Cancellation and file descriptors

Hopefully avoided by #47, but I never got feedback on axboe/liburing#147

withoutboats

comment created time in 3 days

push eventringbahn/ringbahn

Without Boats

commit sha 7cb9499f006e635e9856ff4e791c58cea4988225

Add async println macros which use io-uring

view details

Without Boats

commit sha b01ff967c21ebc9a48a25037265313cab88fd03b

Fix eprint

view details

Saoirse Shipwreckt

commit sha d16e4ddebe74e7f7ed93c2067f6b3506b2b7125c

Merge pull request #49 from ringbahn/println Add async println macros which use io-uring

view details

push time in 3 days

push eventringbahn/ringbahn

Without Boats

commit sha b01ff967c21ebc9a48a25037265313cab88fd03b

Fix eprint

view details

push time in 3 days

push eventringbahn/maglev

Without Boats

commit sha 29c92831d3d4246f214c230ca8a586dc6d775fc9

use maglev::driver in examples

view details

push time in 3 days

push eventringbahn/maglev

Without Boats

commit sha ebfef2a5b21fe69df48eef05b063d54980c8f7b9

Improve docs, add maglev::driver()

view details

push time in 3 days

PR opened ringbahn/ringbahn

Add async println macros which use io-uring
+125 -7

0 comment

4 changed files

pr created time in 3 days

create barnchringbahn/ringbahn

branch : println

created branch time in 3 days

push eventringbahn/ringbahn

Without Boats

commit sha fdd4ebcf8bf84871a2bbd4bd4d5260a9482767ea

New low-level API not based on iou. This makes setting the user_data field private to ringbahn, so it is safe to complete a CQE assuming it contains a Completion. With some other changes around ring ownership, it makes the demo driver 100% safe code. The full iou API has not yet been implemented, just enough to implement the demo driver. The transition has begun to try to allow events to request multiple SQEs from the SQ, allowing them to create linked events in a single go. The first multi-SQE API will be the `hard_linked` API, which allows multiple events to be linked together with `IORING_SQE_HARDLINK`. The results of all but the final event will be ignored; the completion will only awaken on the final event. This functionality is currently not correct implemented.

view details

Without Boats

commit sha dcb983ee3d80c5e9ecfa36861eaa00bac58cf2c5

Move count boundary into Ring

view details

Without Boats

commit sha 02feabbb737bc628e4cfb8c74e124cb3cbd7759f

mark from_raw pub(super)

view details

Without Boats

commit sha 81cb193266320b8f0066856fc1c5abc4f43384f4

thread submissionsegment all the way through Also implement HardLinked properly

view details

Without Boats

commit sha 8b593142e2d73380684c457dd23113ea0859acf9

Cancel events on Ring before running new ones. With this commit, ring now tracks when an event was cancelled, instead of returning immediately to the Inert state. When preparing an event from the Cancelled state, a cancel of the previous event is hard linked before the first event being prepared. This is intended to guarantee that all events scheduled using a single Ring instance will be serialized (that is, they will occur sequentially).

view details

Without Boats

commit sha 3a2f8c1e6e2f27591cfbc1a9ddbf0f159fb2456d

hard linked fixes

view details

Without Boats

commit sha bafcdb2ae0679deb7b9b62aecb0a83c4abf66761

use iou 0.3

view details

Without Boats

commit sha d25072f149ef6c17c20c51cf270840819d3d84ef

more events

view details

Without Boats

commit sha 5ff0216a0726eae3adc47f93eab91e54ea5ddc60

UnixListener + UnixStream

view details

Without Boats

commit sha e855492423359390176704c23aa0d3a9135aca39

no addr accept + incoming

view details

Without Boats

commit sha 462a80a165bdc745087ab9ce53a66d903d793630

use iou on github

view details

Without Boats

commit sha 2424127517511d7bb7e877d8899f768e60d952f4

Fix poorly done rebase

view details

Without Boats

commit sha 362d198c8276659be6d34ceb344e3fdf3a7c1862

remove crate::finish function

view details

Without Boats

commit sha 4a5c89a5cadc8dcc46801bf1025e577ee4852b10

rename *V->*Vectored, fix unix exports

view details

Without Boats

commit sha 3d48a0b7f07391ba64b40fc1f45a638cc1f1eef1

Add more events

view details

Without Boats

commit sha ac43992e98950e7f056bc7de22659b99112a28d9

Add convenience method to driver

view details

Without Boats

commit sha 20e45019c52157d66e9c90609885c0ca3eb1b401

Fix tests

view details

Without Boats

commit sha 50f7fbd3654748f048d6c25992e3773b674bcffd

Add FilesUpdate, ProvideBuffers, RemoveBuffers

view details

Without Boats

commit sha 2db3067528f94e34a94fb8661d644a52b2785128

remove false doc comments

view details

Without Boats

commit sha 01abdee875cc01165f2f2e0732a69a6769e0cc31

Update timeout to use flags

view details

push time in 4 days

PR merged ringbahn/ringbahn

New ringbahn on iou-0.3
+1288 -360

0 comment

39 changed files

withoutboats

pr closed time in 4 days

push eventringbahn/ringbahn

Without Boats

commit sha 2f4eb9c7be09ebedd2403663588ab02358addaf2

Update iou version

view details

Without Boats

commit sha 1d2985feffea08088b25c55d13e04b53b1e959e0

Fix doc link

view details

push time in 4 days

push eventringbahn/iou

Without Boats

commit sha dbc30b4512db680582a3bcc84cd8f168ba752978

fix registrar module doc comments

view details

push time in 5 days

PR closed ringbahn/iou

Remove pub function 'is_timeout'

AFAIK, LIBURING_UDATA_TIMEOUT should only be used within internal library i.e. liburing, it is set to user_data by calls like io_uring_wait_cqes, and the correspond cqe handled by __io_uring_peek_cqe, so it should used by users in any situations.

According to liburing/src/queue.c:

Applications using this function must never set sqe->user_data to LIBURING_UDATA_TIMEOUT!

+0 -23

2 comments

1 changed file

ChillingHsu

pr closed time in 5 days

issue closedringbahn/iou

Raw methods on SQE should be unsafe

Uploaded to crates.io 10 minutes ago and already realized a fricken unsoundness in the API.

Using SubmissionQueueEvent::raw_mut I can implement any of the prep methods in safe code:

sqe.raw_mut().addr = my_buffer.as_ptr() as u64;

raw_mut needs to be unsafe on SQE.

closed time in 5 days

withoutboats

issue closedringbahn/iou

Feature request: support more io_uring functionality: poll_add, poll_remove, prep_accept, etc...

Is anyone working on this? If not, then I would like to try

closed time in 5 days

twissel

issue commentringbahn/iou

Feature request: support more io_uring functionality: poll_add, poll_remove, prep_accept, etc...

iou now supports every API supported by the most recent release of liburing except openat2.

twissel

comment created time in 5 days

issue closedringbahn/iou

Can an API on CompletionQueue return an iterator of CQEs?

Should CompletionQueue::wait_for_cqes and IoUring::wait_for_cqes actually return a vector of completion events, and then advance the queue by count entries?

Consider the following example, where I send 16 NOPs and then wait for 16 events, 16 times.

fn wait_multiple() {
    let mut iou = IoUring::new(16).expect("Can't create queue");
    let (mut sq, mut cq, _) = iou.queues();

    for _ in 0..16 {
        let mut sqe = sq.next_sqe().unwrap();

        unsafe {
            sqe.prep_nop();
        }
    }

    // I'd expect the second iteration to block, but it doesn't
    for n in 0..16 {
        println!("[{}]: Waiting for 16 events", n);
        let cqe = cq.wait_for_cqes(16).unwrap();
    }
}

It looks like Iou is correctly sending count entries, but then it just wraps the first result, which automatically advances the CompletionQueue by one entry when dropped.

I took a crack at returning an array of completions which seems to work, although I'm not sure if advancing by 1 for each dropped event in the vector is the right strategy, or even sound.

closed time in 5 days

michael-grunder

issue commentringbahn/iou

Can an API on CompletionQueue return an iterator of CQEs?

This will be implemented in iou 0.3

michael-grunder

comment created time in 5 days

push eventringbahn/iou

Without Boats

commit sha 3d46588e513f2c26abdaf516863d4c73eb3e98e3

Remove CQE::is_ou_timeout All completion APIs now use a function that removes timeouts.

view details

push time in 5 days

issue closedringbahn/iou

Always filter timeouts

I think we should always filter timeouts generated by liburing and make the is_timeout method private. I'd do this as a part of #22.

I can't think of a reasonable way that users would want to respond to to these timeouts. It would be simpler to just always ignore them. They're not timeouts the users prepared and submitted, they're only those generated by liburing as a part of calling submit or wait with timeout methods.

Anyone have any thoughts?

closed time in 5 days

withoutboats

PR merged ringbahn/iou

Remove CQE::is_iou_timeout

All completion APIs now use a function that removes timeouts.

Closes #24

+19 -34

0 comment

3 changed files

withoutboats

pr closed time in 5 days

pull request commentringbahn/iou

Remove pub function 'is_timeout'

This is the correct choice. Given the refactors, I've reimplemented this as #53

ChillingHsu

comment created time in 5 days

PR opened ringbahn/iou

Remove CQE::is_iou_timeout

All completion APIs now use a function that removes timeouts.

+19 -34

0 comment

3 changed files

pr created time in 5 days

create barnchringbahn/iou

branch : remove-timeout-check

created branch time in 5 days

push eventringbahn/iou

Without Boats

commit sha dad2b7674aa97486e21c2dbab5ecbd13b0caf545

Fix master conflict

view details

push time in 5 days

pull request commentringbahn/iou

Add RegisteredBuf API to manage registered buffers

Wow! Very very nice! I was just reading about the provide_buffers API the other day and it's exciting to see the implementation :)

There's two different APIs for registering buffers: the io_uring_register-based "register buffers" API and the "provide buffers" SQE operation. They're confusingly similar, but different. :sweat_smile:

This only works for the READ_FIXED/WRITE_FIXED operations, in which you still select the buffer you're doing IO in in the user program, just the kernel already has it mmaped into its memory space. On the other hand, with the provide buffers API you give the kernel a bunch of buffers and then it selects one to write in and tells the userspace program which buffer to look in.

withoutboats

comment created time in 5 days

push eventringbahn/iou

Without Boats

commit sha 9d874a026a4a8cc5c8032ef6ec6a0049cddd3f63

Add RegisteredBuf API to manage registered buffers

view details

Without Boats

commit sha 3a91d132d843f56c5d49474ff841a7719a1ae0b5

improve tests a bit

view details

Without Boats

commit sha c75a3f88cfaabcebb649e8853cb1da419ad9c836

inline registrar::registered module

view details

Without Boats

commit sha 321791279376e25ddfa0437ec68ebaa37f7e4fd6

Implement vectored io thru UringWriteBuf/ReadBuf

view details

Without Boats

commit sha 6ebd92f0d432707a330a9607e708f70a2e70900b

Test register buffers API

view details

Saoirse Shipwreckt

commit sha 8b9d85f156fb08b26133859143db0ae352c4ab7a

Merge pull request #51 from ringbahn/registered-bufs Add RegisteredBuf API to manage registered buffers

view details

push time in 5 days

PR merged ringbahn/iou

Add RegisteredBuf API to manage registered buffers

cc @mxxo

Generalizes RegisteredFd to also support RegisteredBuf with a similar strategy. Now, users can pre-register both FDs and buffers and pass either to prep_read and prep_write to get a correctly prepared IO event.

+644 -121

1 comment

8 changed files

withoutboats

pr closed time in 5 days

push eventringbahn/iou

Without Boats

commit sha 6ebd92f0d432707a330a9607e708f70a2e70900b

Test register buffers API

view details

push time in 5 days

push eventringbahn/ringbahn

Without Boats

commit sha 01abdee875cc01165f2f2e0732a69a6769e0cc31

Update timeout to use flags

view details

Without Boats

commit sha bbaa6ae171b6e5724428420cf10a121bcc4e87cf

Drop CString in statx event

view details

push time in 5 days

push eventringbahn/iou

Without Boats

commit sha a2c45ab4d60b1102fcd5921afe9e9028edd0cce2

Add prep_sendmsg and prep_recvmsg These use a `*mut libc::msghdr` unfortunately; users are responsible for constructing that themselves.

view details

Without Boats

commit sha fcec114d00c2934ad0b031bbbab45ed51a4bf9ea

some docs

view details

Saoirse Shipwreckt

commit sha 1e2b47011187b9868fb5d10501e8c408efcf1004

Merge pull request #52 from ringbahn/sendmsg-recvmsg Add prep_sendmsg and prep_recvmsg

view details

push time in 5 days

PR merged ringbahn/iou

Add prep_sendmsg and prep_recvmsg

These use a *mut libc::msghdr unfortunately; users are responsible for constructing that themselves.

+11 -1

0 comment

1 changed file

withoutboats

pr closed time in 5 days

push eventringbahn/iou

Without Boats

commit sha fcec114d00c2934ad0b031bbbab45ed51a4bf9ea

some docs

view details

push time in 5 days

PR opened ringbahn/iou

Add prep_sendmsg and prep_recvmsg

These use a *mut libc::msghdr unfortunately; users are responsible for constructing that themselves.

+9 -1

0 comment

1 changed file

pr created time in 5 days

create barnchringbahn/iou

branch : sendmsg-recvmsg

created branch time in 5 days

issue openedringbahn/ringbahn

Roadmap

I'm soon going to be employed and I don't know how much I will be able to contribute to ringbahn after that. My hope is to release a version 0.1 in a matter of days. Unfortunately, that means some things will have to be cut. t Here's my plan:

  1. Release iou v0.3 which wraps basically all of liburing's most recent release API. This will provide a good, up-to-date basis for interacting with io-uring, through ringbahn or not.
  2. Merge #47 and release v0.1. This will contain a lot of good APIs (most of the events are supported out of the box, files, TCP, Unix streams, etc) and fix outstanding issues like #22.

The big thing that will be missed is integrating better buffer management strategies with the IO handles. I won't be able to revisit #34 in that time. Unfortunately, buffer pre-allocation is necessary to make a full io-uring TCP server performant, so this will be a major blocker. I hope I will be able to return to it soon, and if not that someone else will be able and interested.

Also, I doubt I'll be able to benchmark or stress test ringbahn/maglev before starting work.

Providing ways to support pre-registered FDs, automatic buffer selection, and a fast and correct driver are the only things standing in the way of ringbahn being an awesome driver for io-uring based IO. With those things covered, ringbahn combined with the smol ecosystem's executor could be the basis of the absolute best performance network services on recent Linux kernels, while still giving users straightforward async/await IO objects.

created time in 5 days

push eventwithoutboats/iou

Without Boats

commit sha 5c04e8518c8259ceaad31d89a83523d2a1ba8d01

IoUring::raw_mut should be unsafe

view details

push time in 5 days

push eventwithoutboats/iou

Without Boats

commit sha 321791279376e25ddfa0437ec68ebaa37f7e4fd6

Implement vectored io thru UringWriteBuf/ReadBuf

view details

push time in 5 days

push eventwithoutboats/iou

Without Boats

commit sha c75a3f88cfaabcebb649e8853cb1da419ad9c836

inline registrar::registered module

view details

push time in 5 days

PR opened withoutboats/iou

Add RegisteredBuf API to manage registered buffers

cc @mxxo

Generalizes RegisteredFd to also support RegisteredBuf with a similar strategy. Now, users can pre-register both FDs and buffers and pass either to prep_read and prep_write to get a correctly prepared IO event.

+525 -121

0 comment

7 changed files

pr created time in 5 days

push eventwithoutboats/iou

Without Boats

commit sha 3a91d132d843f56c5d49474ff841a7719a1ae0b5

improve tests a bit

view details

push time in 5 days

create barnchwithoutboats/iou

branch : registered-bufs

created branch time in 5 days

PR opened withoutboats/iou

IoUring::raw_mut should be unsafe
+1 -1

0 comment

1 changed file

pr created time in 5 days

create barnchwithoutboats/iou

branch : iouring-raw-is-unsafe

created branch time in 5 days

push eventwithoutboats/iou

Without Boats

commit sha 35d5900478c5a93e419e9e8318d363f4720782e0

Improve names and documentation of CQE methods

view details

push time in 5 days

more