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`
+![version 0.5.0 8 producers](/thread-per-core-io_uring/pp_8_0.5_rl.png)
+
+**v0.6.1** with `thread-per-core` + `io_uring`
+![version 0.6.1 8 producers](/thread-per-core-io_uring/pp_8_0.6_rl.png)
+
+**v0.7.0** with _shared *something*_
+![version 0.7.0 8 producers](/thread-per-core-io_uring/pp_8_0.7_rl.png)
+
+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`
+![version 0.5.0 16 producers](/thread-per-core-io_uring/pp_16_0.5_rl.png)
+
+**v0.6.1** with `thread-per-core` + `io_uring`
+![version 0.6.1 16 producers](/thread-per-core-io_uring/pp_16_0.6.png)
+
+**v0.7.0** with _shared *something*_
+![version 0.7.0 16 producers](/thread-per-core-io_uring/pp_16_0.7.png)
+
+### 32 Partitions 
+
+The gains compound further as partition count doubles:
+
+**v0.5.0** with `tokio`
+![version 0.5.0 32 producers](/thread-per-core-io_uring/pp_32_0.5_rl.png)
+
+**v0.6.1** with `thread-per-core` + `io_uring`
+![version 0.6.1 32 producers](/thread-per-core-io_uring/pp_32_0.6.png)
+
+**v0.7.0** with _shared *something*_
+![version 0.7.0 32 producers](/thread-per-core-io_uring/pp_32_0.7.png)
+
+### Strong Consistency Mode (`fsync`)
+
+Flush the data to disk on every batch write.
+
+#### 16 Partitions
+
+**v0.5.0** with `tokio`
+![version 0.5.0 16 producers](/thread-per-core-io_uring/pp_16_0.5_fsync.png)
+
+**v0.7.0** with _shared *something*_
+![version 0.7.0 16 producers](/thread-per-core-io_uring/pp_16_0.7_fsync.png)
+
+#### 32 Partitions
+
+**v0.5.0** with `tokio`
+![version 0.5.0 32 producers](/thread-per-core-io_uring/pp_32_0.5_fsync.png)
+
+**v0.7.0** with _shared *something*_
+![version 0.7.0 32 producers](/thread-per-core-io_uring/pp_32_0.7_fsync.png)
 
 ## 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

Reply via email to