CFQ:完全公平排队 IO 调度器结构简析

block layer 的最核心功能可分为两部分——接受上层提交的请求;对请求进行调度。其中 block layer 的入口函数为:submit_bio。如下图所示:文件系统请求提交 - submit_bio接口函数 submit_bio 被调用后,将对 bio 进行合并,然后尝试合并 request,期间会调用调度器中定义的方法,完成合并后,请求将等待被调度。调度阶段,将决定哪个请求被下发执行,

- 阅读全文 -

FIOS:Linux IO 公平调度器论文解读

FIOS,即 Flash IO Scheduler,出自 FAST'2012的一篇论文 FIOS: a fair, efficient flash I/O scheduler,致力于解决在 NAND Flash 上存在的公平性问题。我们知道 Linux 已有一个着重公平性的 IO 调度器:CFQ,并且已经发展的非常成熟,那为何又出来一个 FIOS 呢,且听我一一道来。SSD 面临的调度问题要突出一

- 阅读全文 -

Femu 源码简析与测试环境配置

Femu 来自于 fast-18 上发布的一篇论文The CASE of FEMU: Cheap, Accurate, Scalable and Extensible Flash Emulator[1]。首先 Femu 基于 Qemu 虚拟机实现的,在 Qemu 虚拟机中,对模拟 nvme 的模块进行了部分扩展,以支持更加高级别的针对 Lightnvm 的仿真功能。与原生的 Qemu-nvme 相

- 阅读全文 -

Linux 实验内容设计:向内核中插入虚拟块设备

大三【Linux 操作系统】课的实验内容设计二:向内核中插入虚拟块设备。事情是这样的,课题教学组有位老师抱怨实验无趣,4 个实验课内容从古沿用至今,每学期的助教都是直接拿往届的实验内容去上,都尽量能少一事就少一事,然后再加上已经上了的实验一,是一如既往的“编译内核与添加系统调用”,被班里的大神们抱怨没啥意思。作为萌新的我只能龟缩在角落玩扫雷,并不断的观察着黑下脸的任课老师。大概这位老师觉得被学生看

- 阅读全文 -

UFS Host Controller 工作流程

该文档描述了 UFS Host Controller 的主要运作流程以及 qemu 中,host controller 的接口函数设计。该文档的内容均参考自 JEDEC STANDARD JESD223C 标准配置文档以及 qemu 中设备模拟源代码。UFS 架构图JESD223C 为 UFS 设备定义了一个通用的 host controller interface(HCI), 主机的驱动程序通过

- 阅读全文 -

LightNVM 自顶向下的 IO 通路简析

这篇 IO 通路简析主要偏向于模块之间的衔接,不涉及模块内的细节,主要回答下面的 4 个问题:在何处向请求队列注册 make request function 函数(这里是 pblk_make_rq)在何处调用了(1)注册的 make request function 函数在何处向请求队列注册了 request function 函数(这里是 pci.c 中的 nvme_queue_rq)在何处调

- 阅读全文 -

LightNVM 移植到 Open Channel UFS 设备的实现分析

基于 UFS 的 Open Channel FTL 实现与基于 NVMe 的实现思路类似,可按层划分为三个大步骤,自下而上分别为:UFS 设备侧的 FTL 相关功能修改;主机侧 UFS 驱动程序的操作命令扩展;主机侧软件定义的 FTL 功能实现。此外我们还需要一个工具用于获取运行数据和验证,例如获取设备的详细参数,例如 channels,luns,blocks,pages 等固有属性,以及 bad

- 阅读全文 -

LightNVM - pblk 源码解析(基于 linux-4.12-rc2)

基本结构图下图是 pblk 的结构图,其中给出了 read 请求和 write 请求的操作示意图,以及 pblk 核心的几个数据结构——L2P table、write buffer、write context。关于具体操作的细节我们在后面的小节给出:Buffer 包含两块内容:write buffer 和 write context。write buffer 存储 4KB 为单位(sector)的

- 阅读全文 -

LightNVM 简介

LightNVM[1] 是 CNEXLabs 针对 Open Channel SSD(以下简称 OCSSD)在 Linux 内核中的一种实现,分支托管在 GitHub 上,目前能找到最早的提交记录是 2015-10-29。LightNVM 的程序栈由三层组成,每一层都向用户空间提供了 OCSSD 的抽象(即用户可以直接与这三层进行 IO 交互而不用经过文件系统,后面会细提到)。示意图如下图所示:最

- 阅读全文 -

Open-Channel SSD 简介

SSD 的特点SSD 设备的存储单元主要是 NAND Flash[1],按 page 写入,按 block 擦除,一个 block 内有多个 page,并且擦除的次数有限。根据以上的特点,在使用设备时,必然存在这样的情况:在一个 block 中,有部分 page 保存了有效数据,剩下的 page 全被标记为无效,如果要擦除这个 block,就必须首先将其中的有效数据转移到其他 block,然后才能

- 阅读全文 -