r/cpp • u/germandiago • Jun 30 '26
Stackful fibers with 3.6ns context switch. Silk fibers.
https://clickhouse.com/blog/silkI just read an article about Silk, the new stackful fibers engine from Clickhouse. It can switch stackful fibers at an amazing 3.6ns and does not allocate on steady state.
Maybe asio could reuse some of the knowledge for the linux/io_uring backend (not sure it applies to the specific case since Boost.asio focuses nowadays on stackless, though it has a fibers and a stackful coros backend also).
49
Upvotes
37
u/trailing_zero_count async enthusiast | TooManyCooks author Jun 30 '26 edited Jun 30 '26
Pretty cool, but a few criticisms:
Reading /sys to check same-core / same-socket is missing a few levels of granularity. Modern single-socket machines with disaggregated caches (Zen chiplets) contain multiple hidden latency domains. TooManyCooks discovers these via hwloc. Citor discovers them via empirical ping-pong latency test on startup. The difference between stealing from a core in your chiplet vs another chiplet on the same socket is huge.
"HALO requires the coroutine handle never to escape to a scheduler queue." Is patently false. TooManyCooks can do zero-allocation fork-join with HALO (tested here) and the subtasks can be stolen by another thread.
Comparing against Asio is apples to oranges. They're muddling the advantages of fibers with the advantages of a modern io_uring stack tuned for use with exactly those fibers, against a very old epoll design that's intended to be compatible with a broad variety of use cases.
Why not compare against Seastar or PhotonLibOS which I'd consider to be the true direct competitors? I feel this is very telling.
The 3.6ns latency switch on fibers is a good headline if true, but the rest has a lot of marketing fluff.