I am looking at some SSDs and try to benchmark them. In particular, I wanted to see if I can reproduce the numbers in the datasheet. Currently I am looking at a HUSSL4040BSS600 SSD which is SAS. With this particular SSD, I can enable or disable the write cache of the disk, using sdparm. With
sdparm /dev/sdb -p ca
one can query the write cache, and I get the cache status, and according to the output
Caching (SBC) mode page:
IC 0 [cha: y, def: 0, sav: 0]
ABPF 0 [cha: y, def: 0, sav: 0]
CAP 0 [cha: y, def: 0, sav: 0]
DISC 0 [cha: y, def: 0, sav: 0]
SIZE 0 [cha: y, def: 0, sav: 0]
WCE 1 [cha: y, def: 1, sav: 1]
MF 0 [cha: y, def: 0, sav: 0]
RCD 0 [cha: y, def: 0, sav: 0]
DRRP 0 [cha: y, def: 0, sav: 0]
WRP 0 [cha: y, def: 0, sav: 0]
DPTL -1 [cha: y, def: -1, sav: -1]
MIPF 0 [cha: y, def: 0, sav: 0]
MAPF -1 [cha: y, def: -1, sav: -1]
MAPFC -1 [cha: y, def: -1, sav: -1]
FSW 0 [cha: y, def: 0, sav: 0]
LBCSS 0 [cha: y, def: 0, sav: 0]
DRA 0 [cha: y, def: 0, sav: 0]
SYNC_PROG 0 [cha: n, def: 0, sav: 0]
NV_DIS 0 [cha: n, def: 0, sav: 0]
NCS 0 [cha: y, def: 0, sav: 0]
CSS 0 [cha: y, def: 0, sav: 0]
and the explanations in this document on page 281, the write cache is currently enabled (WCE=1). According to the product manual of this SSD, it should have the following specs:
so for example, with 4K random writes and QD1, I should get around 11K IOPS. I test that with the following fio command line
fio --name=iops --rw=randwrite --bs=4k --iodepth=1 --ioengine=io_uring --direct=1 --fsync=1 --numjobs=1 --time_based --runtime=20 --group_reporting --filename=/dev/sdb
and fio reports:
write: IOPS=4197, BW=16.4MiB/s (17.2MB/s)(328MiB/20001msec); 0 zone resets
This is quite a lot worse than the specification of 11K. So, now, for test purposes I will disable the write cache of the SSD
sdparm --set WCE=0 /dev/sdb
and run the exact same fio command as above, and now I get
write: IOPS=11.8k, BW=46.0MiB/s (48.2MB/s)(919MiB/20001msec); 0 zone resets
so actually spot-on to the specification. However, I don't understand this behaviour. Why is this the case? why is the SSD faster if the write cache is disabled? and furthermore, if I am using this SSD to run VMs from it (which will give a high IOPS demand) should I, therefore, set WCE=0 to have better IOPS performance?
