Ming Lei <ming.lei@xxxxxxxxxx> writes: > Hello, > > Libublk-rs(Rust)[1][2] 0.1.0 is released. Hi Ming, Do you intend to effectively deprecate the code in ubdsrv in favor of libublk-rs or do you intend to keep the C library? I'm asking because I'm looking into how to enable ublk in distributions. Thanks, > > The original idea is to use Rust to write ublk target for covering all > kinds of block queue limits/parameters combination easily when talking > with Andreas and Shinichiro about blktests in LSFMM/BPF 2023. > > Finally it is evolved into one generic library. Attributed to Rust's > some modern language features, libublk interfaces are pretty simple: > > - one closure(tgt_init) for user to customize device by providing all > kind of parameter > > - the other closure(io handling) for user to handling IO which is > completely io_uring CQE driven: a) IO command CQE from ublk driver, > b) target IO CQE originated from target io handling code, c) eventfd > CQE if IO is offloaded to other context > > With low level APIs, <50 LoC can build one ublk-null, and if high level > APIs are used, 30 LoC is enough. > > Performance is basically aligned with pure C ublk implementation[3]. > > The library has been verified on null, ramdisk, loop and zoned target. > The plan is to support async/await in 0.2 or 0.3 so that libublk can > be used to build complicated target easily and efficiently. > > Thanks Andreas for reviewing and providing lots of good ideas for > improvement & cleanup. Thanks German Maglione for some suggestions, such > as eventfd support. Thanks Joe for providing excellent Rust programming > guide. > > Any feedback is welcome! > > [1] https://crates.io/crates/libublk > [2] https://github.com/ming1/libublk-rs > [3] https://github.com/osandov/blktests/blob/master/src/miniublk.c > > Thanks, > Ming > -- Gabriel Krisman Bertazi