Liblightnvm, 在用户态操作Open-Channel SSD

作者简介

刘孝冬,存储软件工程师,主要从事SPDK以及ISA-L软件开发工作。 

    

    Open-Channel SSD 是由Host深度控制和维护的一种SSD. 相对于NVMe SSD, Host所能够看到的不再是一段逻辑块地址(Logical Block Address, LBA),而是间隔排列的NAND存储单元的物理页地址(Physical Page Address, PPA)。Open-Channel SSD 将内部NAND介质的诸多细节暴露给Host,由Host来实现自定义的FTL(Flash Translation Layer),根据实际工作负载的特点,最大化,且有区别的实现高吞吐,低时延,或IO隔离等特性。

    LightNVM 是Linux 内核中操作Open-Channel SSD的子系统的名称,并作为实际操作Open-Channel SSD的driver。既然Open-Channel SSD的愿景是希望Host是基于实际工作负载的特点,来调配操作盘上NAND资源。那就意味着,开发者需要基于业务需求,灵活实现定制化的FTL。这些定制化的软件则更有可能会被实现在用户态,而非内核态。

    由此,用户态定制化FTL需要一套能够提供操作Open-Channel SSD的API。从名称可知liblightnvm就是这样一套在用户态操作Open-Channel SSD的函数库。

Liblightnvm 的组成

    libIightnvm 提供了Open-Channel SSD与用户空间交互的方法,和获取信息的手段。它的组成部分由图1所示

640?wx_fmt=png

Figure 1 liblightnvm的组成部分

1. liblightnvm.a与相关头文件

    它的核心是函数库 liblightnvm.a与相关头文件 , 其中定义了Open-Channel SSD所需的各种结构,向上提供出封装好的nvm_dev_XXX和nvm_cmd_XXX系列函数。

  • nvm_dev_XXX用于打开、关闭Open-Channel SSD,获取盘上资源信息,设置相关配置。

  • nvm_cmd_XXX用于执行相关的admin命令和IO命令。

    为了简便用户态应用 操作Open-Channel SSD,函数库 liblightnvm.a与相关头文件也包含了基本的辅助功能, nvm_addr_XXX,nvm_buf_XXX,以及nvm_vblk_XXX系列函数。

  • nvm_buf_XXX封装了内存申请、释放填充等操作。由于liblightnvm的后端对内存类型有不同的需求,使用nvm_buf系列API可以屏蔽掉不同类型内存操作的差异。

  • nvm_addr_XXX 包括了很多非常方便的地址转换结构的方法。Open-Channel 涉及到的地址表示方法主要有4类:NAND成员结构地址(Generic address, gen),  设备物理页地址 (device physical page address, dev), Chunk信息偏移地址(Chunk information log page offset, lpo), 以及块设备偏移地址(Linux Block Device offset, off)。

  • nvm_vblk_XXX包括了对Virtual Block的定义和操作。

2. liblightnvm的后端nvm_be

    Liblightnvm 将具体的执行过程隐藏在不同的后端nvm_be中。当前liblightnvm的nvm_be有多个,nvm_be_ioctl、nvm_be_lbd 和nv

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值