<story><title>Writing an NVMe Driver in Rust [pdf]</title><url>https://db.in.tum.de/~ellmann/theses/finished/24/pirhonen_writing_an_nvme_driver_in_rust.pdf</url></story><parent_chain></parent_chain><comment><author>ajross</author><text>For those curious: this is a userspace driver, written to open&amp;#x2F;mmap the PCI BAR via sysfs.  It doesn&amp;#x27;t attempt to hook interrupts from the device and has to resort to polling for completion[1].  Also AFAICT there&amp;#x27;s really no attempt being made at parallel design: all the hardware interaction is handled by a single manager thread responding to queued commands from workers.  That&amp;#x27;s a fine choice for simplicity and reliability but a very poor one for scalability in a storage backend that needs to be handling requests from filesystem drivers serving dozens or hundreds of CPUs.&lt;p&gt;Basically: this is good work (great work for an undergraduate thesis).  But it&amp;#x27;s very much &amp;quot;solving the easy part&amp;quot; and not really showing off Rust in any particularly impressive way.  You can write very similar userspace &amp;quot;drivers&amp;quot; (and I have!) in Python.&lt;p&gt;[1] Though on modern hardware designed to manage arbitrary scatter&amp;#x2F;gather command queues on its own, that&amp;#x27;s not really such a big deal.  In performance situations the hardware will always have something to do anyway, and idle hardware can be sent a command synchronously.  Fixing this amounts to a power optimization only.</text></comment>
<story><title>Writing an NVMe Driver in Rust [pdf]</title><url>https://db.in.tum.de/~ellmann/theses/finished/24/pirhonen_writing_an_nvme_driver_in_rust.pdf</url></story><parent_chain></parent_chain><comment><author>Kydlaw</author><text>Really cool and impressive work! I&amp;#x27;m more on the software (high level) side than on the hardware, but I always wondered how USBs and other ports were truly working. It is an area of knowledge that I&amp;#x27;m shamefully lacking...&lt;p&gt;Does anyone have nice resources to share like this one that focuses on a specific port&amp;#x2F;connection and implement a driver&amp;#x2F;reader&amp;#x2F;parser? I&amp;#x27;d very like to learn more of this.</text></comment>