Releases: DataDog/glommio
Glommio v0.7.0
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()
andLocal::local()
are removed in favor of theglommio::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 fromsysfs
; - #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 usingpoll+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!
First production grade release
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!
Fixing two regressions
Very few changes. Good!
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
Fixing the Scoped Thread issue
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
.
first beta!
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.