JackKelly / light-speed-io

Read & decompress many chunks of files at high speed
MIT License
58 stars 0 forks source link
compression concurrency iouring ndimensional-arrays parallel-computing python scientific-computing zarr

Light Speed IO (LSIO)

Warning I've paused development on LSIO for now. I've shifted my focus to hypergrib. In its current state, LSIO is a very minimal proof-of-concept that io_uring is faster than object_store when reading many small chunks of files from local PCIe 5 SSDs on Linux. There is no Python API yet.

The ultimate ambition is to enable folks to efficiently load and process large, multi-dimensional datasets as fast as modern CPUs & I/O subsystems will allow.

For now, this repo is just a place for me to tinker with ideas.

Under the hood, light-speed-io uses io_uring on Linux for local files, and will use object_store for all other data I/O.

My first use-case for light-speed-io is to help to speed up reading Zarr. After that, I'm interested in helping to create fast readers for "native" geospatial file formats like GRIB2 and EUMETSAT native files. And, even further than that, I'm interested in efficient & fast computation on out-of-core, chunked, labelled, multi-dimensional data.

See planned_design.md for more info on the planned design. And please see this blogpost for my motivations for wanting to help speed up Zarr.

Roadmap

(This will almost certainly change!)

The list below is in (rough) chronological order. This roadmap is also represented in the GitHub milestones for this project, when sorted alphabetically.

Throw-away prototype

Fresh start. Laying the foundations. New crates:

MVP IO layer

MVP Compute layer

MVP File format layer: Read from Zarr

Improve the IO layer:

Improve the compute layer

MVP End-user applications!

First release!

Implement writing

Improve IO:

Improve the file formats layer: Add GRIB support???

(Although maybe this won't be necessary because dynamical.org are converting datasets to Zarr)

Grow the team? (Only if the preceding work has shown promise)

Future work (in no particular order, and no promise any of these will be done!)

Project structure

Light Speed IO is organised as a Cargo workspace with multiple (small) crates. The crates are organised in a flat crate structure. The flat crate structure is used by projects such as Ruff, Polars, and rust-analyser.

LSIO crate names use snake_case, following in the footsteps of the Rust Book and Ruff. (The choice of snake_case versus hyphens is, as far as I can tell, entirely arbitrary: Polars and rust-analyser both use hyphens. I just prefer the look of underscores!)