1 协议关键点
1.1 Identify Controller structure
- Atomic Write Unit Normal (AWUN):原子写命令的大小
- Atomic Write Unit Power Fail (AWUPF):供电异常情况下原子写命令的大小
- Atomic Compare & Write Unit (ACWU):原子比较&写命令的大小
1.2 Identify Namespace structure
Namespace Atomic Write Unit Normal (NAWUN):NS的原子写命令的大小
Namespace Atomic Write Unit Power Fail (NAWUPF):供电异常情况下NS原子写命令的大小
Namespace Atomic Compare & Write Unit (NACWU):NS原子比较&写命令的大小
Namespace Atomic Boundary Size Normal (NABSN):NS原子写边界大小
Namespace Atomic Boundary Offset (NABO):NS第一个原子写边界开始的LBA
Namespace Atomic Boundary Size Power Fail (NABSPF):指示特定于NAWUPF的原子边界大小
1.3 说明
- Namespace Features (NSFEAT) 字段的NSABP(bit1)为0时,所有NS使用Controller的原子写参数,NS的原子写相关参数无效。
- NS原子写的Boundary Offset和Boundary Size用于约束主机原子写命令的范围。不满足该约束的原子写命令当做普通写处理。
- 两个并发的原子写命令存在空间重叠时,命令执行完成后的结果。不可以出现A、B命令的数据在重叠空间共存的情况。
- 掉电情况下,原子写命令A(写LBA0~LBA1)的执行结果。
2 SSD实现Atomic Write的关键点
2.1 协议实现
- 设置Identify Controller structure的3个字段AWUN、AWUPF和ACWU。
- Namespace Features (NSFEAT)字段的Bit 1 (NSABP) 清零,不支持NS的不同Atomic属性(Atomic相关的字段也要清零)。
- 设置NABSN、NABO和NABSPF字段。
2.2 代码实现
比较典型的实现方式由2种思路:
- 思路一:先将所有原子写的数据从Host的内存DMA到SSD的缓存,再写入NAND FLASH。
优点:错误处理简单,只需要保证数据全部DMA进入SSD缓存后,能够写入NAND FLASH。
缺点:需要较多的SSD缓存,限制了支持的原子写大小。
- 思路二:与普通写命令写入数据的方式相同,先按照Page大小从Host DMA数据,并以流水的方式写入NAND FLASH。
优点:不需要比普通写额外的SSD缓存,不用单独限制原子写大小。
缺点:错误处理复杂,如果出现中途DMA数据失败(如PCIe相关错误、掉电等),需要将已经写入NAND FLASH的数据、元数据回退。如果支持的原子写大小很大,掉电的场景数据的写入消耗较多时间,也存在数据丢失的风险。