Scipio Versions Save

Glommio is a thread-per-core crate that makes writing highly parallel asynchronous applications in a thread-per-core architecture easier for rustaceans.

v0.7.0

2 years ago

This new version of Glommio brings new APIs, performance improvements, stability fixes, and refactoring, making Glommio's APIs more discoverable and closer to the other async crates such as async-std or Tokio.

Notable changes:

  • #427, #480, #500: Executor builders are now more reliable and flexible;
  • #412, #413 : Task<T>::local() and Local::local() are removed in favor of the glommio::spawn_* set of free functions, glommio::executor() is now the main way to interact with the executor;
  • #414: Closing a file now returns whether the underlying file descriptor was closed;
  • #416: read_many now takes a stream as input instead of an iterator;
  • #460, #491: read_many is now able to limit concurrency based on in-flight IO memory and/or number of in-flight IO requests;
  • #497: read_many now uses better, system-specific IO coalescing defaults from sysfs;
  • #434: Foreign wakers now trigger a remote preemption, according to their latency requirements;
  • #449, #474: DmaStreamReader may now be consumed trivially without copies;
  • #462: GlommioStream is reimplemented using poll+recv for faster network IO;
  • #463: IO ring depth is now configurable;
  • #469: liburing may now be vendored;
  • #476, #496: Glommio can now collect queued, IO, and scheduler latencies;
  • #489: Glommio now detect the proper IO alignments based on sysfs values;
  • #499, #517: A stall detector can now collect stack traces of unyielding tasks;
  • #501, #519: spawn_blocking is now the preferred way to schedule blocking operations;

Rust/Linux support:

The minimum supported kernel remains 5.8, and we now require at least Rust 1.58.

Contributors:

Andrey Lomakin <[email protected]>
Cody P Schafer <[email protected]>
David Blewett <[email protected]>
Duarte Nunes <[email protected]>
Glauber Costa <[email protected]>
Hippolyte Barraud <[email protected]>
jianghua <[email protected]>
laa <[email protected]>
Matthieu Le brazidec (r3v2d0g) <[email protected]>
Nikolay Kim <[email protected]>
Ruihang Xia <[email protected]>
Seiichi Uchida <[email protected]>
thirstycrow <[email protected]>
trtsl <[email protected]>
Yongsheng Xu <[email protected]>

Thank you to all our contributors!

v0.6.0

2 years ago

We will still give some time before we call this 1.0, but in this version the alpha wording was removed.

There are no new user visible features in this release. Only bug fixes!

v0.5.1

2 years ago

The work on buffer reuse unfortunately caused two regressions:

#391 and #396.

This release fixes them

v0.5.0

2 years ago

I am removing the beta tag from this release, and if all goes well, the next one should reach 1.0. If you have objections let me know

There are three big feature changes in this release:

  • There is now an ImmutableFile type, that encodes the fact that a file will never change, opening the door for file-level optimizations like metadata caching and request deduplication
  • There is an API to submit I/O in bulk (read_many)
  • There is way to create many executors at once, executing homogeneous code LocalExecutorPool

v0.4.1-beta

3 years ago

Unfortunately as noticed by one of our contributors right after the release, ScopedThread is unsound. We will look for a better alternative, inspired by what crossbeam is doing, but in the mean time the interface is marked as unsafe.

v0.4.0-beta

3 years ago

This is the first beta (post-alpha) release of Glommio, and the first to have a Changelog.

The main change is the addition of the ScopedTask, which allows a user to create a task that is not 'static, simplifying lifetime management.

The main experimental change is the addition of the LocalExecutorPoolBuilder, which allow the user to create a group of executors all at once. This is useful in scenarios where the executors are symmetric and can all be generated from the same function.

Other notable changes:

  • Using io_uring's linked SQEs, we can now timeout network requests.
  • There is also a generic timeout function that can timeout any task.
  • There are statistics about CPU usage coming from the LocalExecutor, so you can see which tasks are using CPU the most.
  • There are statistics bout storage I/O usage coming from the Reactor, so you can see how I/O is being generated, and by each tasks.
  • The mesh channel now has a send_to function, useful when you want to send one-shot messages.
  • The Glommio wakers can now be used remotely from other threads. In particular, that means that Tokio channels can now be used to communicate with Glommio executors.