4 ms·
As someone quite familiar with SCSI and who watched the rise of NVMe essentially throwing out SCSI in favour of doing something new, I feel like this was a fore
by hlandau 5y ago
As someone quite familiar with SCSI and who watched the rise of NVMe essentially throwing out SCSI in favour of doing something new, I feel like this was a foreseeable need in retrospect.
SCSI is split into an Architectural Model, a Primary Command Set implemented by all devices, several device type-specific Command Sets, and various interconnect standards. This reorganisation of NVMe into a core document, various transports and various command sets seems to basically do the same thing, but flipping briefly through these specs, I suspect SCSI is still better written, especially the SCSI Architectural Model document.
It's interesting to note that there was a competing proposal to NVMe, SOP-PQI, essentially a standardised PCIe interface for SCSI (e.g. SAS) HBAs. Arguably this was long long overdue with even today every single SAS HBA's vendor using its own driver rather than providing a standardised interface. Some companies threw their support behind SOP-PQI, some behind NVMe. Ultimately NVMe won and it's hard to find much information about the competing SOP-PQI proposal; this was around 2012 as I recall.
Ultimately I wonder whether it was a good thing to throw out the SCSI architecture wholesale. Was it desirable to start with a fresh sheet and none of SCSI's legacy concerns, or was it (as is not uncommon) just new generations of developers wanting to throw out an old and venerable (but well designed) system because they don't understand it? It's claimed that NVMe, by being "designed for flash from the outset" is able to be faster than SCSI, but I'm skeptical about this if we're comparing like for like (i.e., NVMe vs. SOP-PQI).
Not only that NVMe is now getting support for HDDs, as though focusing on supporting only flash was a mistake. The assumption of SSD-like read latencies also causes a problem IIRC with e.g. AWS Nitro, where block devices are exposed as emulated NVMe devices, even for magnetic storage; as I recall, AWS's own docs advise you to manually increase the read timeout on NVMe accesses via Linux kernel arguments to work around this.
Is there anything about the SCSI architecture that would actually preclude SCSI over PCIe from being as performant? People repeat "NVMe is faster because it was designed for flash" but I'd like to know what the substance is to this.