参考
独家发布 | Linux NVMe Driver学习笔记大合集
linux内核源码分析 - nvme设备的初始化
强势回归,Linux blk用实力证明自己并不弱!
驱动初始化
nvme_probe -> nvme_async_probe -> nvme_dev_add -> nvme_alloc_ns
中断与轮询
schedule_timeout与mdelay的区别
schedule_timeout函数
linux时间—延迟和定时
内核定时机制API之__round_jiffies_relative
在4.1版本的内核,有一个内核线程nvme_kthread,负责1s轮询一下所以NVMe盘,看有没有队列完成,在4.14版本的内核中,blk mq增加了poll接口,该功能由函数nvme_timeout
和nvme_poll
取代,nvme_timeout
调用nvme_poll
会查看当前是否有没有处理的完成队列,4.1版本的nvme_timeout
直接取消当前的request。
static const struct blk_mq_ops nvme_mq_admin_ops = {
.queue_rq = nvme_queue_rq,
.complete = nvme_pci_complete_rq,
.init_hctx = nvme_admin_init_hctx,
.exit_hctx = nvme_admin_exit_hctx,
.init_request = nvme_init_request,
.timeout = nvme_timeout,
};
static const struct blk_mq_ops nvme_mq_ops = {
.queue_rq = nvme_queue_rq,
.complete = nvme_pci_complete_rq,
.init_hctx = nvme_init_hctx,
.init_request = nvme_init_request,
.map_queues = nvme_pci_map_queues,
.timeout = nvme_timeout,
.poll = nvme_poll,
};