-
Notifications
You must be signed in to change notification settings - Fork 85
Home
dnvme is the kernel component of the NVMe Compliance Test Suite. The user space application tnvme wires up components within dnvme to create various compliance test cases.
dnvme is not the nvme driver embedded within the Linux kernel. These 2 separate code bases target different audiences and greatly differ in the support they offer to a user space application. Some of the major differences can be summarized as follows:
dnvme driver
- Allows sending illegal commands and allows creating illegal states to verify proper hardware error code generation.
- Supports every feature of the NVMe specification.
a) Meta data support.
b) All Admin and NVM command set commands.
c) Allows using MSI, MSI-X, and polling for reaping CE's from IOCQ's. - Opens kernel level resources like queues and memory facilitating maximum visibility for debugging support.
- Doesn't do anything automatically, must be specifically instructed by a user space application.
- Allows situations which could crash the kernel, an undesirable side affect as a result of allowing maximum interaction with user space applications.
a) Mostly this is alleviated by the implementation of tnvme's framework to guide test development. - Promotes functionality over speed, it is less efficient to allow maximum versatility.
nvme driver
- Prevents sending illegal commands and disallows creating illegal states to hardware.
- Currently, as of 1/18/2012, it doesn't support certain features of the NVMe specification.
a) Discontiguous memory to back an IOQ.
b) Meta data support.
c) MSI interrupt support. - Purposely hides kernel level constructs like queues and contiguous memory and thus it may not allow detailed debugging.
- Automates sending commands and reaping CE's from queues on behalf of a user space applications.
- Safe guards any application from kernel level catastrophic actions.
- Targets maximum efficiency and speed for greater throughput.
Dnvme logic is platform specific and targets Linux kernel versions based on 2.6.35. It has been developed on Ubuntu distributions only. However, the driver design is generic and should support other Linux kernel versions by changes in the required kernel API's. Additionally, tnvme could be used without modifications on other platforms if one were to implement the IOCTL's within dnvme on those other platforms.
Dnvme is a test driver with a goal to verify hardware compliance against a written set of specifications. Functionality, not speed, was the main target for the driver. It was seen that satisfying both speed and functionality could not be addressed simultaneously in all aspects of this design. Thus when a decision had to be made as to which one to choose, functionality always won. As a result we ended up making dnvme driver a character driver rather than a block driver with an advanced range of IOCTL's to improve user space control required for testing.
- Learn git; find a tutorial
- Create an account on github
-
Fork repos(s) of interest
a) After forking, clone the repo(s) on a local machine. - Modify code, commit, and push to the local repo(s); normal git usage.
- Contribute your logic to the mainline github repo(s)
[Design] (https://github.com/nvmecompliance/dnvme/wiki/Design)
[Coding Standards] (https://github.com/nvmecompliance/dnvme/wiki/Coding-Standards)
[Compiling] (https://github.com/nvmecompliance/dnvme/wiki/Compiling)