2

To optimize performance of an SSD, the Arch wiki says to run nvme id-ns /dev/nvme0n1 and evaluate the output, specifically of the last lines starting with lbaf. If there's more than one lbaf entry, then the drive supports more than one sector size option. The most pertinent information from the Arch wiki here is,

The rp (Relative Performance) value indicates which format will provide the best performance, with 0 being the best.

My NVMe SSD does have two lbaf entries, but it's unclear which one is more optimal. Here's the relevant output of the above nvme command on my system:

lbaf  0 : ms:0   lbads:9  **rp**:0x2 (in use)
lbaf  1 : ms:0   lbads:12 **rp**:0x1

So both options display an rp starting with 0. How am I to understand the significance of x2 and x1 at the ends?

1 Answer 1

3

Use the -H option with the command to get the results in a human-readable format. It should look about like this:

# nvme id-ns -H /dev/nvme0n1
...
LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes - Relative Performance: 2 Good (in use)
LBA Format  1 : Metadata Size: 0   bytes - Data Size: 4096 bytes - Relative Performance: 1 Better

The prefix 0x is a common indicator that the following number is in hexadecimal, so the actual numbers after the rp are simply 2 and 1 respectively.

The SSD performance is affected by so-called write amplification as a SSD erase block is usually larger than a common filesystem 512-byte block, so in order to re-write one block, the SSD must erase and re-write the entire erase block (encompassing multiple filesystem blocks) each time. If the block size seen by the filesystem matches the erase block size of the SSD, this can be avoided. (It can also be minimized but perhaps not fully eliminated if the operating system is aware of the erase block size and will use a write caching strategy that groups writes to larger contiguous chunks to compensate.)

So with SSDs, configuring them for a larger-than-classic block size will usually improve performance. However, there are a lot of (old) operating systems and software that cannot yet take advantage of the possibility to use larger block sizes, so some SSDs are just optimized to deal with the 512-byte block size with internal buffering as best as they can.

However, there are a lot of other factors that can affect the performance of a disk or SSD, so some manufactures apparently want to avoid claiming that a particular block size would surely be the "best" for all possible situations. And so, the rp value of 0 might not be used at all by some SSDs.

2
  • I assume you ran the command on your own machine. Hence, you're not using the "better" setting either. Well, if you're not, then I won't. Thanks!
    – Pound Hash
    Dec 22, 2021 at 2:10
  • Actually, I translated your nvme id-ns output into the human-readable format as best as I could. But yes, I also have a system with a NVMe that could use the 4096-byte blocks but isn't currently doing that... and it labels the 512-byte size with a rp value of 3, degraded. Although it has performed well enough for my purposes, I might someday make a full backup, switch the block size, and restore. Maybe at the next major OS upgrade...
    – telcoM
    Dec 22, 2021 at 3:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.