linux nvme的那些workqueue
目前nvme三个常见的使用的workqueue ,主要有nvme_workq,nvme_rdma_wq ,nvme_fc_wq,下面一一描述一下初始化及使用的场景。分别对应于NVME over PCIE,NVMe over RDMA ,NVMe over Fabrics这三种部署场景。
nvme_workq,workqueue名称为nvme,一个nvme设备会创建一个,由于alloc_workqueue最后一个参数味0,表示不限制个数。
初始化在:
static int __init nvme_init(void)
{
int result; nvme_workq = alloc_workqueue("nvme", WQ_UNBOUND | WQ_MEM_RECLAIM, );
if (!nvme_workq)//创建工作队列,参数为0表示不限制个数,弹性
return -ENOMEM; result = pci_register_driver(&nvme_driver);//nvme属于PCI,注册pci 驱动
if (result)
destroy_workqueue(nvme_workq);
return result;
}
主要的使用在:
static int nvme_reset(struct nvme_dev *dev)
{
if (!dev->ctrl.admin_q || blk_queue_dying(dev->ctrl.admin_q))
return -ENODEV;
if (work_busy(&dev->reset_work))
return -ENODEV;
if (!queue_work(nvme_workq, &dev->reset_work))-----------主要执行reset_work,也就是nvme_reset_work函数
return -EBUSY; return ; }
nvme_rdma_wq ,workqueue名称为nvme_rdma_wq,只创建一个。主要完成nvme_rdma_ctrl这类结构的work,如
static int __init nvme_rdma_init_module(void)
{
int ret; nvme_rdma_wq = create_workqueue("nvme_rdma_wq");----------只创建一个。
if (!nvme_rdma_wq)
return -ENOMEM; ret = ib_register_client(&nvme_rdma_ib_client);
if (ret) {
destroy_workqueue(nvme_rdma_wq);
return ret;
} nvmf_register_transport(&nvme_rdma_transport);
return ;
}
主要的使用在:
static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
struct nvmf_ctrl_options *opts)
{
... //这三个work,都是交给nvme_rdma_wq
INIT_WORK(&ctrl->err_work, nvme_rdma_error_recovery_work);
INIT_WORK(&ctrl->delete_work, nvme_rdma_del_ctrl_work);
INIT_WORK(&ctrl->reset_work, nvme_rdma_reset_ctrl_work);
....
nvme_fc_wq,workqueue名称为nvme_fc_wq,
static int __init nvme_fc_init_module(void)
{
mark_tech_preview("NVMe over FC", THIS_MODULE); nvme_fc_wq = create_workqueue("nvme_fc_wq");----只创建一个
if (!nvme_fc_wq)
return -ENOMEM; nvmf_register_transport(&nvme_fc_transport);
return ;
}
主要用在:
static struct nvme_ctrl *
__nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
struct nvme_fc_lport *lport, struct nvme_fc_rport *rport)
{ INIT_WORK(&ctrl->delete_work, nvme_fc_del_ctrl_work);-----目前只有nvme_fc_del_ctrl_work 交给这个工作队列完成
}
linux nvme的那些workqueue的更多相关文章
- Linux中断管理 (3)workqueue工作队列
目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...
- Linux中断管理 (3)workqueue工作队列【转】
转自:https://www.cnblogs.com/arnoldlu/p/8659988.html 目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机 ...
- Linux内核中的Workqueue机制分析
1. 什么是workqueue Linux中的workqueue(工作队列)主要是为了简化在内核创建线程而设计的.通过相应的工作队列接口,可以使开发人员只关心与特定功能相关的处理流程,而不必关心内核线 ...
- linux nvme的sendfile流程
在nvme的硬盘上使用sendfile系统调用,到底需要经过哪些流程? do_sendfile--->do_splice_direct-->splice_direct_to_actor-- ...
- [内核]Linux workqueue
转自:http://blog.chinaunix.net/uid-24148050-id-296982.html 一.workqueue简介workqueue与tasklet类似,都是允许内核代码请求 ...
- Linux workqueue疑问【转】
转自:http://blog.csdn.net/angle_birds/article/details/9387365 各位大神,你们好.我在使用workqueue的过程中遇到一个问题. 项目采用uC ...
- Linux workqueue工作原理 【转】
转自:http://blog.chinaunix.net/uid-21977330-id-3754719.html 转自:http://bgutech.blog.163.com/blog/static ...
- linux workqueue的名字长度小问题
在排查一个nvme的的workqueue的问题的时候,发现nvme的queue的进程名被截断了, [root@localhost caq]# ps -ef |grep -i nvme root : ? ...
- 工作队列(workqueue) create_workqueue/schedule_work/queue_work
--- 项目需要,在驱动模块里用内核计时器timer_list实现了一个状态机.郁闷的是,运行时总报错"Scheduling while atomic",网上搜了一下:" ...
随机推荐
- Anaconda使用
转自PeterYuan 序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python, ...
- findhex
FindPattern(hD3D, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86&qu ...
- 【LCT】BZOJ3091 城市旅行
3091: 城市旅行 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1927 Solved: 631[Submit][Status][Discuss ...
- 【倍增】洛谷P3379 倍增求LCA
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- IO多路复用
1.事件驱动模型 上一篇写的协程仅仅是切换,本身不能实现并发,什么时候切换也不知道 那么什么时候切回去呢?怎么确定IO操作完了?通过回调函数 对于事件驱动型程序模型,它的流程大致如下: 开始---& ...
- 批量将webp格式的图片转成png的图片 https://cn.office-converter.com/WEBP-to-PNG
https://cn.office-converter.com/WEBP-to-PNG
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...
- Nginx配置文件(2)
一.配置文件结构 1.全局块:配置影响nginx全局的指令.一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等. 2 ...
- CSS基础知识(颜色、伪类、盒子模型)
6.设置颜色单位 L 普通英文单词 {color : 属性值red;} 此方法简单,便捷.但设置的颜色在不同浏览器中,可能显示的颜色出现差异 * 三原色 - 红.绿.蓝 L 颜色的八进制方式 ...
- 应用服务器GC回收常见问题总结
近一段时间多次发现因GC问题造成系统性能问题(应用服务间歇性响应缓慢.应用服务器CPU占用较高等),在此总结一下: 1.代码中直接调用GC.Collect() 2.字符串等操作频繁的内存申请 3.频繁 ...