Skip to content

Commit b26560b

Browse files
authored
Merge pull request #39 from metaspace/block-march-2025
Block march 2025
2 parents 1438391 + 55d0d64 commit b26560b

11 files changed

+27320
-6
lines changed

src/NVMe-driver.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,111 @@ The driver is not currently suitable for general use.
2424
[slides](https://lpc.events/event/16/contributions/1180/attachments/1017/1961/deck.pdf)
2525
and [video](https://lpc.events/event/16/contributions/1180/attachments/1017/2249/go)
2626

27+
## 6.14-rc5 Rebase Performance ([`rnvme-v6.14-rc5`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnvme-v6.14-rc5))
28+
29+
### Setup
30+
31+
- AMD Ryzen 5 7600
32+
- 32 GB 4800 MT/s DDR5 on one channel
33+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
34+
- NixOS 24.11
35+
36+
### Results
37+
38+
- 40 samples
39+
- Difference of means modeled with t-distribution
40+
- P95 confidence intervals
41+
42+
![](rnvme/nvme-v6.14-rc5-absolute.svg)
43+
44+
![](rnvme/nvme-v6.14-rc5-relative.svg)
45+
46+
The graph shows
47+
<math>
48+
<mfrac>
49+
<mrow>
50+
<mi>R</mi>
51+
<mo>-</mo>
52+
<mi>C</mi>
53+
</mrow>
54+
<mrow>
55+
<mi>C</mi>
56+
</mrow>
57+
</mfrac>
58+
</math>
59+
where C is IO/s for the C driver and R is IO/s for the Rust driver. Thus, negative
60+
means the C driver is faster while positive means the Rust driver is faster.
61+
62+
## 6.13 Rebase Performance ([`rnvme-v6.13`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnvme-v6.13))
63+
64+
### Setup
65+
66+
- AMD Ryzen 5 7600
67+
- 32 GB 4800 MT/s DDR5 on one channel
68+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
69+
- NixOS 24.11
70+
71+
### Results
72+
73+
- 40 samples
74+
- Difference of means modeled with t-distribution
75+
- P95 confidence intervals
76+
77+
![](rnvme/nvme-v6.13-absolute.svg)
78+
79+
![](rnvme/nvme-v6.13-relative.svg)
80+
81+
The graph shows
82+
<math>
83+
<mfrac>
84+
<mrow>
85+
<mi>R</mi>
86+
<mo>-</mo>
87+
<mi>C</mi>
88+
</mrow>
89+
<mrow>
90+
<mi>C</mi>
91+
</mrow>
92+
</mfrac>
93+
</math>
94+
where C is IO/s for the C driver and R is IO/s for the Rust driver. Thus, negative
95+
means the C driver is faster while positive means the Rust driver is faster.
96+
97+
## 6.12 Rebase Performance ([`rnvme-v6.12`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnvme-v6.12))
98+
99+
### Setup
100+
101+
- AMD Ryzen 5 7600
102+
- 32 GB 4800 MT/s DDR5 on one channel
103+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
104+
- NixOS 24.04
105+
106+
### Results
107+
108+
- 40 samples
109+
- Difference of means modeled with t-distribution
110+
- P95 confidence intervals
111+
112+
![](rnvme/nvme-v6.12-absolute.svg)
113+
114+
![](rnvme/nvme-v6.12-relative.svg)
115+
116+
The graph shows
117+
<math>
118+
<mfrac>
119+
<mrow>
120+
<mi>R</mi>
121+
<mo>-</mo>
122+
<mi>C</mi>
123+
</mrow>
124+
<mrow>
125+
<mi>C</mi>
126+
</mrow>
127+
</mfrac>
128+
</math>
129+
where C is IO/s for the C driver and R is IO/s for the Rust driver. Thus, negative
130+
means the C driver is faster while positive means the Rust driver is faster.
131+
27132
## 6.12-rc2 Rebase Performance ([`rnvme-v6.12-rc2`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnvme-v6.12-rc2))
28133

29134
### Setup

src/Null-Block-Driver.md

Lines changed: 96 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ candidate for rewriting in Rust.
2828
The driver is implemented entirely in safe Rust, with all unsafe code fully
2929
contained in the abstractions that wrap the C APIs.
3030

31+
Please note that the performance measurements on this page might be misleading
32+
due to the results not being normally distributed. [This
33+
analysis](https://metaspace.github.io/2024/12/02/problems-in-benchmark-land.html)
34+
has more details. We observe that issue is resovled for v6.14-rc5, but we are
35+
monitoring the situation going forward.
36+
3137
## Features
3238

3339
Implemented features:
@@ -38,17 +44,17 @@ Implemented features:
3844
- Timer completion
3945
- Read and write requests
4046
- Optional memory backing
41-
42-
Features available in the C `null_blk` driver that are currently not implemented
43-
in this work:
44-
4547
- Bio-based submission
4648
- NUMA support
4749
- Block size configuration
4850
- Multiple devices
4951
- Dynamic device creation/destruction
50-
- Queue depth configuration
5152
- Queue count configuration
53+
54+
Features available in the C `null_blk` driver that are currently not implemented
55+
in this work:
56+
57+
- Queue depth configuration
5258
- Discard operation support
5359
- Cache emulation
5460
- Bandwidth throttling
@@ -67,9 +73,93 @@ in this work:
6773
- [Mailing List Post](https://lore.kernel.org/all/[email protected]/)
6874
- [Subset merged in v6.11-rc1](https://lore.kernel.org/all/[email protected]/)
6975

76+
## 6.14-rc5 Rebase ([`rnull-v6.14-rc5`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnull-v6.14-rc5))
77+
78+
Changes from `rnull-v6.13`:
79+
80+
- Change reference counting scheme for `Request`.
81+
- Move `rnull` driver to separate directory.
82+
- Rename `RawWriter` to `BufferWriter` and move it.
83+
- Enable configuration of `rnull` via `configfs`.
84+
- Enable dynamic createion/destruction of devices via `configfs`.
85+
- Use `Owned` for rust managed `Page` objects.
86+
- Change segment iterator to prevent concurrent mutable access to pages.
87+
- Use `GFP_NOIO` flag for backing rnull pages.
88+
- Add `user_per_node_hctx` rnull config option.
89+
- Add NUMA home node rnull config option.
90+
- Add submit queue count rnull config option.
91+
- Fix a bug where unwritten bytes were not zeroed on read.
92+
- Properly handle IO requests that are not equal in size to one block.
93+
94+
### Performance
95+
96+
#### Setup
97+
98+
- AMD Ryzen 5 7600
99+
- 32 GB 4800 MT/s DDR5 on one channel
100+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
101+
- NixOS 24.11
102+
103+
#### Results
104+
105+
- Plot shows `(mean_iops_r - mean_iops_c) / mean_iops_c`
106+
- 40 samples for each configuration
107+
- Difference of means modeled with t-distribution
108+
- P95 confidence intervals
109+
110+
![](rnull/rnull-v6.14-rc5.svg)
111+
112+
## 6.13 Rebase ([`rnull-v6.13`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnull-v6.13))
113+
114+
Changes from `rnull-v6.12`:
115+
116+
- None
117+
118+
### Performance
119+
120+
#### Setup
121+
122+
- AMD Ryzen 5 7600
123+
- 32 GB 4800 MT/s DDR5 on one channel
124+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
125+
- NixOS 24.05
126+
127+
#### Results
128+
129+
- Plot shows `(mean_iops_r - mean_iops_c) / mean_iops_c`
130+
- 40 samples for each configuration
131+
- Difference of means modeled with t-distribution
132+
- P95 confidence intervals
133+
134+
![](rnull/rnull-v6.13.svg)
135+
136+
## 6.12 Rebase ([`rnull-v6.12`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnull-v6.12))
137+
138+
Changes from `rnull-v6.12-rc2`:
139+
140+
- None
141+
142+
### Performance
143+
144+
#### Setup
145+
146+
- AMD Ryzen 5 7600
147+
- 32 GB 4800 MT/s DDR5 on one channel
148+
- 1x Samsung 990 Pro 1TB (PCIe 4.0 x4 16 GT/S)
149+
- NixOS 24.05
150+
151+
#### Results
152+
153+
- Plot shows `(mean_iops_r - mean_iops_c) / mean_iops_c`
154+
- 40 samples for each configuration
155+
- Difference of means modeled with t-distribution
156+
- P95 confidence intervals
157+
158+
![](rnull/rnull-v6.12.svg)
159+
70160
## 6.12-rc2 Rebase ([`rnull-v6.12-rc2`](https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnull-v6.12-rc2))
71161

72-
Changes from `rnull-v6.10`:
162+
Changes from `rnull-v6.11`:
73163

74164
- Make `QueueData` references pinned.
75165

0 commit comments

Comments
 (0)