yiyeguzhou100
专注,探索,分享
展开
-
分析内核中对nvme测试性能下降的一个优化
优化commit如下,在blk_poll函数最后加上__set_current_state(TASK_RUNNING);目的是如果当前正在poll的线程要被抢占(need_resched() = true),就先把当前线程状态设置为TASK_RUNNING,这样线程在被抢占后就不会从cpu的runqueue队列中删除,等到该线程vruntime变为最小时,就又可以被cpu运行了,这样该线程就不依赖任何线程或中断对其进行唤醒操作了。而如果不设置__set_current_state(TASK_RUNN原创 2020-07-29 19:51:51 · 1184 阅读 · 0 评论 -
What “Did we miss an interrupt?” means - nvme_timeout
"Did we miss an interrupt" mean?https://lkml.org/lkml/2018/4/26/623Question:We are testing NVMe cards on ARM64 platform, the card uses legacy interrupts.Intermittently we are hitting following case in drivers/nvme/host/pci.c /* * Did we ...原创 2020-06-16 10:23:48 · 1239 阅读 · 0 评论 -
nvme设备中断的申请与注册过程
cc原创 2020-05-17 22:48:43 · 1063 阅读 · 0 评论 -
nvme req的dma映射与提交流程注释
1,nvme_setup_cmd用于构造nvme cmd:nvme_setup_rw函数用于设置nvme读写命令:2,nvme_map_data函数为req的bio中所有vector建立dma散列表映射原创 2020-04-28 23:04:13 · 1728 阅读 · 0 评论 -
nvme设备queue的创建
nvme_create_io_queues: ->1, nvme_alloc_queue 2, nvme_create_queue: ->1,adapter_alloc_cq ->2,adapter_alloc_sqNVME协议:...原创 2020-04-12 22:37:13 · 1346 阅读 · 1 评论 -
nvme 内核调用栈
nvme_queue_rq:nvme_irq:原创 2020-03-29 15:05:56 · 479 阅读 · 0 评论 -
nvme queue-pair for poll
来自NVME协议文档的图:原创 2020-03-24 21:38:46 · 505 阅读 · 0 评论 -
nvme dev&interrupts naming conventions
紧随字符串“nvme”之后的数字是设备编号示例:nvme0n1 - 这里的设备编号为 0分区使用前缀“p”追加在设备名称后面示例:nvme0n1p1 - 分区 1nvme1n1p2 - 分区 2示例:nvme0n1p1 - 设备 0 的分区 1nvme0n1p2 - 设备 0 的分区 2nvme1n1p1 - 设备 1 的分区 1nvme1n1p2 ...原创 2020-03-21 14:31:23 · 820 阅读 · 0 评论 -
nvme cq work flow注释
nvme_poll -> nvme_process_cq ->1, nvme_update_cq_head, write_cq_head_doorbell2, nvme_complete_cqes -> nvme_complete_cqe->nvme_end_request->blk_mq_complete_request原创 2020-03-17 22:19:08 · 563 阅读 · 0 评论 -
NVMe协议SSD控制器端实现浅析
http://www.dostor.com/p/48121.html一.NVMe 协议NVMe协议是在PCIe SSD开始大量出现在市场上后,因为各个厂家的私有协议不具有兼容性,无法和现有操作系统无缝衔接,INTEL为了统一接口协议建立生态,而在2011年发布了NVMe协议。NVMe采用了多命令队列 (最大65536个命令队列),每个命令可变数据长度(512B到2MB),同时数据在...转载 2020-02-12 18:16:17 · 2728 阅读 · 0 评论