FIOS 调度器实现

核心数据结构分析fios 队列结构:struct fios_queue { pid_t pid; // 进程的pid struct rb_node fiosq_node; // 将fios queue插入到fios rb-tree,主要用于在dispatch阶段,快速的取出下一个要被处理的fios queue struct rb_node

- 阅读全文 -

LightNVM 代码分析总结

内核版本:Linux-4.19Lightnvm 与 pblkLightnvm 与 pblk 的关系,类似于 linux 块层与 IO 调度器之间的关系。即在 lightnvm 中可以有多种 FTL 的实现,这里 pblk 就是一种 FTL 的实现。Lightnvm 子系统在支持PPA接口的块设备的基础上进行初始化。该模块使内核能够通过内部 nvm_dev 数据结构和 sysfs 等来暴露设备的几何

- 阅读全文 -

FIOS 调度器的实现思路整理

时间片管理CFQ的时间片管理CFQ 的时间片管理如下图。每个请求队列 cfq queue 的时间片用完后,都要通过【选择 cfq group -> 选择 service tree -> 选择 cfq queue】的流程,从其自身维护的数据结构中找出下一个要被调度的请求队列,整个选择相当于根据一个优先级顺序不断地遍历这个数据结构。当一个 cfq queue 的时间片用尽,就要等到下一轮遍

- 阅读全文 -

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

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

- 阅读全文 -

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 与 Open Channel SSD 的关系以及在 IO 栈上的位置

Open-Channel SSD 是一种设备,与 SSD 不同之处在于,前者将 SSD 的 FTL(Flash Translation Layer) 提出来,交给主机管理与维护,其优点是:高吞吐,低延迟,高并行。LightNVM 则是 Open-Channel SSD 在主机上的驱动程序扩展。OCSSD 的特性I/O 分离:将 SSD 划分为数个 channels, 映射到设备的并行单元上。应用举

- 阅读全文 -