Skip to content

Commit a711591

Browse files
authored
Merge pull request #1 from metaspace/nvme
update NVMe page
2 parents 88c191a + 8c69c00 commit a711591

File tree

4 files changed

+4045
-4
lines changed

4 files changed

+4045
-4
lines changed

SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
## Users
2222

23-
- [NVMe driver](NVMe-driver.md)
23+
- [NVMe Driver](NVMe-driver.md)
2424

2525
# Links
2626

src/NVMe-driver.md

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,59 @@
1-
# NVMe driver
1+
# NVMe Driver
22

3-
The Rust [NVMe driver](https://github.com/metaspace/linux/tree/nvme) is an effort to implement a PCI NVMe driver in safe Rust for use in the Linux Kernel. The purpose of the driver is to provide a vehicle for development of safe Rust abstractions and to prove feasibility of Rust as an implementation language for high performance device drivers.
3+
The Rust NVMe driver is an effort to implement a PCI NVMe driver in safe Rust
4+
for use in the Linux Kernel. The purpose of the driver is to provide a vehicle
5+
for development of safe Rust abstractions and to prove feasibility of Rust as an
6+
implementation language for high performance device drivers.
47

5-
The Rust NVMe driver was originally authored by Wedson Almeida Filho and is now maintained by Andreas Hindborg (Samsung).
8+
The Linux Rust NVMe driver lives
9+
[here](https://github.com/metaspace/linux/tree/nvme). Please be aware that the
10+
nvme branch is force pushed without notice. The Rust NVMe driver was originally
11+
authored by Wedson Almeida Filho and is now maintained by Andreas Hindborg
12+
(Samsung).
13+
14+
The driver is not currently suitable for general use.
15+
16+
# Resources
17+
- LPC 2022
18+
[slides](https://lpc.events/event/16/contributions/1180/attachments/1017/1961/deck.pdf)
19+
and [video](https://lpc.events/event/16/contributions/1180/attachments/1017/2249/go)
20+
21+
# Performance
22+
23+
Performance evaluation as of January 2023.
24+
25+
## Setup
26+
27+
- Dell PowerEdge R6525
28+
- 1 CPU socket populated - EPYC 7313, 16 cores
29+
- 128 GB DRAM
30+
- 3x P5800x 16GT/s x4 7.88 GB/s (PCIe 4)
31+
- Debian bullseye (linux 5.19.0+)
32+
33+
## Results
34+
35+
![iops](./iops.svg)
36+
![relative](./relative.svg)
37+
38+
## Analysis
39+
40+
For 4 KiB block size, the Rust NVMe driver performs similar to the C driver. For
41+
this configuration the target drive is bandwidth limited.
42+
43+
For 512 B block size, the C driver outperforms the Rust driver by up to 6%. In
44+
this configuration the drive is not bandwidth limited, but the benchmark becomes
45+
compute limited. The Rust driver has a higher overhead and thus performs worse.
46+
47+
# Planned Work Items
48+
49+
- Remove all unsafe code from the driver
50+
- Support device removal
51+
- Verify functionality by executing `blktests` and `xfstests` in CI
52+
- Add sys-fs nodes to allow use of nvme-cli with Rust NVMe driver
53+
- Support more kernel configurations by deferring initialization to a task queue
54+
- Improve performance of Rust NVMe driver
55+
56+
# Contact
57+
58+
Please contact Andreas Hindborg through
59+
[Zulip](Contact.md#zulip-chat).

0 commit comments

Comments
 (0)