FEMU是弗吉尼亚理工学院的Huaicheng LI教授团队开发的一款SSD模拟器。基于QEMU,所以模拟出来的SSD设备可以被qemu使用。FEMU可用于模拟多种SSD,个人研究更关注ZNS SSD ,所以找到了相关部分的代码。
代码路径:FEMU/hw/femu/zns
该路径中有两个文件:
0.需要明确的一些概念
- Namespace是NVMe SSD中的一个概念,它是将闪存空间划分成若干个独立的逻辑空间,每个空间逻辑块的地址范围为0到N-1(N是逻辑空间大小),这样划分的每个逻辑空间叫做Namespace。每个Namespace都有一个名称和ID,系统是通过NS的ID来区分不同的NS。
- Zone,NVMe Zoned Namespaces是NVMe规范中的一套新命令集,该命令集暴露了一套接口(zoned block storage interface)给主机,该接口将其容量划分为多个Zone,在每个Zone内允许随机读,但只允许顺序写。每个Zone都有一段LBA (Logical Block Address, 逻辑地址空间)区间,这段区间只能顺序写,而且如果要覆盖写,则必须显示的进行一次擦除操作。在这套命令集中,NS由zone组成。似乎官方文档中并没有明确的说明同一NS中的zone大小必须一致。
1. 头文件zns.h
该文件包含了许多与NVMe Zoned 命名空间的相关定义和结构。其中有很多结构的名称全面都加了一个宏QEMU_PACKED
。该宏定义用于指定结构体的对齐方式。在使用QEMU时可以使用这个宏来指定结构体的对齐方式。
2. 源文件zns.c
未完待续。。。。。