**What is NVMe short for?** NVMe is short for *NVM Express.* > **What does NVM stand for?** [(1)](https://en.wikipedia.org/wiki/NVM_Express) > NVM stands for *Non-Volatile Memory.* **What are NVMe devices?** NVMe devices are *flash memory chips connected to a system through the PCI-E bus.* # Installation **What kernel option needs to be activated in order for NVMe devices to be supported?** The kernel option that needs to be activated in order for NVMe devices to be supported is *NVM Express block device or `CONFIG_BLK_DEV_NVME`.* > **How will NVMe devices show up under `/dev`?** > NVMe devices will show up under `/dev` as *`/dev/nvme*`.* > [!todo] > This section includes the default kernel settings for NVMe devices on other GNU / Linux distributions. # Emerge **What package includes user space tools for NVMe devices?** The package that includes user space tools for NVMe devices is *`sys-apps/nvme-cli`.* # Identifying the device **What do NVMe partitions show before the partition number?** Before the partition number, NVMe partitions show *the letter p.* > **What do NVMe devices also support aside from partitions?** > Aside from partitions, NVMe devices also support *namespaces.* > > **What do NVMe namespaces show before the namespace number?** > > Before the namespace number, NVMe namespaces show *the letter n.* > [!example] Example of how the first partition in the first namespace of the first NVMe device will appear in `/dev` > ```sh > /dev/nvme0n1p1 > ``` # Usage **What program can be used to get the raw read / write speed of an NVMe device?** The program that can be used to get the raw read / write speed of an NVMe device is *`hdparam`.* > **What are the three options you pass to `hdparam` to test the raw read / write speed of an NVMe device and what do they instruct `hdparam` to do?** > The three options you pass to `hdparam` to test the raw read / write speed of an NVMe device and what they instruct `hdparam` to do are: > 1. `-t` - Perform timings of device reads. > 2. `-T` - Perform timings of cache reads. > 3. `--direct` - Bypass the page cache and cause reads to go directly from the drive into `hdparam`'s buffers in raw mode. > [!example] Example of testing the raw read / write speed of `/dev/nvme0n1` > ```sh > hdparam -tT --direct /dev/nvme0n1 > ``` # Performance and maintenance **Since NVMe devices share the flash memory technology basis with common SSDs, the same ... and ... ... apply.** Since NVMe devices share the flash memory technology basis with common SSDs, the same *performance* and *longevity considerations* apply. # Kernel I/O scheduler **What kernel I/O scheduling strategy should you use with NVMe devices and why?** With NVMe devices, the kernel I/O scheduling strategy you should use is *the simplest strategy available because of their really high read speed.* > **What is the name of the simplest kernel I/O scheduling strategy on recent kernels?** > On recent kernels, the name of the simplest kernel I/O scheduling strategy is *none.* **How do you get the name of the current kernel I/O scheduling strategy?** To get the name of the current kernel I/O scheduling strategy, *you can use `cat` to read the `scheduler` file from the sysfs.* > [!example] Example of reading the `scheduler` file from the sysfs for `nvme0n1` > ```sh > $ cat /sys/block/nvme0n1/queue/scheduler > none > ``` **What are the two ways you can change the scheduler for a device?** The two ways you can change the scheduler for a device are: 1. Writing the name of the desired scheduler to the sysfs `scheduler` file. 2. Creating udev rules in `/etc/udev/rules.d`. > [!example] Example of changing the scheduler for `nvme0n1` by writing to the sysfs `scheduler` file > `echo "none" > /sys/block/nvme0n1/queue/scheduler` > [!example] Example of changing the scheduler for `nvme0n1` by creating udev rules in the file `/etc/udev/rules.d/60-ioschedulers.rules` > ``` > # Set scheduler for NVMe devices > ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none" > ```