This is an automated email from the ASF dual-hosted git repository. gkoszyk pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/iggy-website.git
commit 44990a8d76f6f0ed93c62bfe47096d962f013d3e Author: numinex <[email protected]> AuthorDate: Thu Feb 26 23:57:38 2026 +0100 add benchmark section --- content/blog/thread-per-core-io_uring.mdx | 63 ++++++++++++++++++++- .../thread-per-core-io_uring/pp_16_0.5_fsync.png | Bin 0 -> 490566 bytes public/thread-per-core-io_uring/pp_16_0.5_rl.png | Bin 0 -> 163205 bytes public/thread-per-core-io_uring/pp_16_0.6.png | Bin 0 -> 174074 bytes .../thread-per-core-io_uring/pp_16_0.6_fsync.png | Bin 0 -> 448910 bytes public/thread-per-core-io_uring/pp_16_0.7.png | Bin 0 -> 236428 bytes .../thread-per-core-io_uring/pp_16_0.7_fsync.png | Bin 0 -> 292373 bytes .../thread-per-core-io_uring/pp_32_0.5_fsync.png | Bin 0 -> 494242 bytes public/thread-per-core-io_uring/pp_32_0.5_rl.png | Bin 0 -> 173302 bytes public/thread-per-core-io_uring/pp_32_0.6.png | Bin 0 -> 156460 bytes public/thread-per-core-io_uring/pp_32_0.7.png | Bin 0 -> 167854 bytes .../thread-per-core-io_uring/pp_32_0.7_fsync.png | Bin 0 -> 432903 bytes public/thread-per-core-io_uring/pp_4_0.5_rl.png | Bin 0 -> 265914 bytes public/thread-per-core-io_uring/pp_64_0.6.png | Bin 0 -> 139175 bytes public/thread-per-core-io_uring/pp_8_0.5_rl.png | Bin 0 -> 156545 bytes public/thread-per-core-io_uring/pp_8_0.6_rl.png | Bin 0 -> 147937 bytes public/thread-per-core-io_uring/pp_8_0.7_rl.png | Bin 0 -> 245574 bytes 17 files changed, 60 insertions(+), 3 deletions(-) diff --git a/content/blog/thread-per-core-io_uring.mdx b/content/blog/thread-per-core-io_uring.mdx index 3b4fc572..c344680d 100644 --- a/content/blog/thread-per-core-io_uring.mdx +++ b/content/blog/thread-per-core-io_uring.mdx @@ -2,7 +2,7 @@ title: Our migration journey to thread-per-core architecture powered by io_uring author: grzegorz tags: ["engineering", "performance", "io_uring", "thread-per-core", "rust"] -date: 2026-02-25 +date: 2026-02-27 draft: true --- @@ -185,9 +185,66 @@ It seems like we are not the only ones that are aware of that problem: [Microsof It's worth noting that one of the key reasons we ended up going with `compio` is that they want to move with the times and expose more and more `io_uring` APIs. Their codebase is structured so that the driver is decoupled from the executor, I would push the pluggability even further. A very hot topic in distributed systems these days is `DST` (Deterministic Simulation Testing): the idea is to replace all non-deterministic sources in your system (network, block devices, time, etc.) with d [...] -## Benchmarking +## Benchmarks -// TODO: run benchmarks on AWS +Scaling is where the thread-per-core architecture truly shines, the more partitions and producers you throw at it, the better it performs. + +### 8 Partitions + +**v0.5.0** with `tokio` + + +**v0.6.1** with `thread-per-core` + `io_uring` + + +**v0.7.0** with _shared *something*_ + + +The difference wasn't that big, `tokio` managed to keep up decently well with 8 producers, but as we increase the load, the gap widens significantly. + +### 16 Partitions + +**v0.5.0** with `tokio` + + +**v0.6.1** with `thread-per-core` + `io_uring` + + +**v0.7.0** with _shared *something*_ + + +### 32 Partitions + +The gains compound further as partition count doubles: + +**v0.5.0** with `tokio` + + +**v0.6.1** with `thread-per-core` + `io_uring` + + +**v0.7.0** with _shared *something*_ + + +### Strong Consistency Mode (`fsync`) + +Flush the data to disk on every batch write. + +#### 16 Partitions + +**v0.5.0** with `tokio` + + +**v0.7.0** with _shared *something*_ + + +#### 32 Partitions + +**v0.5.0** with `tokio` + + +**v0.7.0** with _shared *something*_ + ## Closing words Finally, even though we went into significant detail in this blog post, we have only scratched the surface of what is possible, and several subsections could easily be blog posts on their own. If you are interested in learning more about thread-per-core shared-nothing design, check out the `Seastar` framework, it is the SOTA in this space. For now we shift our attention to the [on-going work on clustering](https://github.com/apache/iggy/releases/tag/server-0.7.0), using [Viewstamped Repl [...] diff --git a/public/thread-per-core-io_uring/pp_16_0.5_fsync.png b/public/thread-per-core-io_uring/pp_16_0.5_fsync.png new file mode 100644 index 00000000..f6b8d13d Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.5_fsync.png differ diff --git a/public/thread-per-core-io_uring/pp_16_0.5_rl.png b/public/thread-per-core-io_uring/pp_16_0.5_rl.png new file mode 100644 index 00000000..3c4eed8f Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.5_rl.png differ diff --git a/public/thread-per-core-io_uring/pp_16_0.6.png b/public/thread-per-core-io_uring/pp_16_0.6.png new file mode 100644 index 00000000..06757674 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.6.png differ diff --git a/public/thread-per-core-io_uring/pp_16_0.6_fsync.png b/public/thread-per-core-io_uring/pp_16_0.6_fsync.png new file mode 100644 index 00000000..367edfe6 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.6_fsync.png differ diff --git a/public/thread-per-core-io_uring/pp_16_0.7.png b/public/thread-per-core-io_uring/pp_16_0.7.png new file mode 100644 index 00000000..81a19b64 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.7.png differ diff --git a/public/thread-per-core-io_uring/pp_16_0.7_fsync.png b/public/thread-per-core-io_uring/pp_16_0.7_fsync.png new file mode 100644 index 00000000..d8b285ab Binary files /dev/null and b/public/thread-per-core-io_uring/pp_16_0.7_fsync.png differ diff --git a/public/thread-per-core-io_uring/pp_32_0.5_fsync.png b/public/thread-per-core-io_uring/pp_32_0.5_fsync.png new file mode 100644 index 00000000..7ea05dc9 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_32_0.5_fsync.png differ diff --git a/public/thread-per-core-io_uring/pp_32_0.5_rl.png b/public/thread-per-core-io_uring/pp_32_0.5_rl.png new file mode 100644 index 00000000..c239aa7c Binary files /dev/null and b/public/thread-per-core-io_uring/pp_32_0.5_rl.png differ diff --git a/public/thread-per-core-io_uring/pp_32_0.6.png b/public/thread-per-core-io_uring/pp_32_0.6.png new file mode 100644 index 00000000..07852505 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_32_0.6.png differ diff --git a/public/thread-per-core-io_uring/pp_32_0.7.png b/public/thread-per-core-io_uring/pp_32_0.7.png new file mode 100644 index 00000000..98bd6ed5 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_32_0.7.png differ diff --git a/public/thread-per-core-io_uring/pp_32_0.7_fsync.png b/public/thread-per-core-io_uring/pp_32_0.7_fsync.png new file mode 100644 index 00000000..48123150 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_32_0.7_fsync.png differ diff --git a/public/thread-per-core-io_uring/pp_4_0.5_rl.png b/public/thread-per-core-io_uring/pp_4_0.5_rl.png new file mode 100644 index 00000000..c78b53a5 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_4_0.5_rl.png differ diff --git a/public/thread-per-core-io_uring/pp_64_0.6.png b/public/thread-per-core-io_uring/pp_64_0.6.png new file mode 100644 index 00000000..baba1294 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_64_0.6.png differ diff --git a/public/thread-per-core-io_uring/pp_8_0.5_rl.png b/public/thread-per-core-io_uring/pp_8_0.5_rl.png new file mode 100644 index 00000000..a3406c3b Binary files /dev/null and b/public/thread-per-core-io_uring/pp_8_0.5_rl.png differ diff --git a/public/thread-per-core-io_uring/pp_8_0.6_rl.png b/public/thread-per-core-io_uring/pp_8_0.6_rl.png new file mode 100644 index 00000000..527d01a9 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_8_0.6_rl.png differ diff --git a/public/thread-per-core-io_uring/pp_8_0.7_rl.png b/public/thread-per-core-io_uring/pp_8_0.7_rl.png new file mode 100644 index 00000000..351b7f24 Binary files /dev/null and b/public/thread-per-core-io_uring/pp_8_0.7_rl.png differ
