Block设备驱动
RadarSong
这个作者很懒,什么都没留下…
展开
-
硬盘中的扇区,Linux Driver 中Block的块,以及内存中的段和页
扇区是硬件设备传送数据的基本单位,而块是VFS和文件系统传送数据的基本单位一个块对应磁盘上一个或多个相邻的扇区,而VFS系统将其看成是一个单一的数据单元。扇区:为了达到可接受的性能,硬盘和类似的设备快速传送几个相邻字节的数据。块设备的每次数据传输操作都是作用于一组称为扇区的相邻字节。大部分磁盘设备中,一个扇区的大小是512字节。块:在Linux中,块的大小必须四原创 2014-11-13 15:45:19 · 3523 阅读 · 0 评论 -
Linux3.19内核block层出现新变化,增加 multi-queue block layer
最近Linux的最新内核已经release到Linux-3.19-rc6,根据Linus的release note,大约再经过一次rc7版本就可以正式release了。Linux 3.19内核在block层的最大变化就是增加了一个multi-queue block layer,来更好的支持类似于NVME等支持multi-queue机制的设备。所谓的multi-queue机制就是在多核CPU的情况下原创 2015-01-29 09:24:31 · 8181 阅读 · 0 评论 -
NVME协议栈剖析
从代码上来看,NVME的协议栈直接从Block层下来,不原创 2014-11-14 15:10:24 · 10536 阅读 · 2 评论 -
NVME Drive分析之 Detailed IO Process
原创 2014-11-14 14:53:17 · 2215 阅读 · 0 评论 -
NVME Driver分析之nvme_submit_sync_cmd
前面在分支创建 I/O Completion Queue 命令时我们提到了,Admin command的提交,使用了nvme_submit_admin_cmd函数,该函数其实是调用了nvme_submit_sync_cmd(dev, 0, cmd, result, ADMIN_TIMEOUT);,即提交了一个同步的命令。原创 2014-11-13 17:29:52 · 3575 阅读 · 0 评论 -
NVME Driver解析之init与probe
本文说使用的代码版本是Linux3.16.3代码位置drivers\block\nvme-core.c include/linux/nvme.hNVMe driver的init过程,nvme的初始化过程主要跟两个函数有关,一个是nvme_init,另一个还nvme_probe,本文主要讲一下nvme_init和nvme_probe分别做了什么以及如何从nvme_init进入到nv原创 2014-11-13 15:51:48 · 7669 阅读 · 1 评论 -
NVME Driver分析之nvme_dev_add函数分析
nvme_dev_add @ nvme_probe①int shift = NVME_CAP_MPSMIN(readq(&dev->bar->cap)) + 12;//计算shift,为2的shift次幂②mem = dma_alloc_coherent(&pdev->dev, 8192, &dma_addr, GFP_KERNEL);//这块空间用于读取identifier cont原创 2014-11-13 16:12:32 · 3534 阅读 · 0 评论 -
NVME Driver 解析之Create I/O Completion Queue command
NVME Driver 解析之Create I/O Completion Queue command先看一下spec中对Create I/O Completion Queue command的说明Create I/O Completion Queue command就是把上面各个结构体填充好,然后发命令写到queue的tail中,然后按一下dooorbell的门铃s原创 2014-11-13 16:39:33 · 4717 阅读 · 0 评论 -
NVME driver分析之nvme_dev_start函数分析
3.1 nvme_dev_start函数分析3.1.1 nvme_dev_map@nvme_dev_start函数分析①pci_enable_device_mem(pdev)//为user初始化pci device的memory space②dev->entry[0].vector = pdev->irq;//给中断向量赋值③pci_set_master(p原创 2014-11-13 16:01:55 · 5464 阅读 · 1 评论 -
bio与bio_vec
通用块层的核心数据结构称为bio描述符,它描述了块设备的io操作。每一个bio结构都包含一个磁盘存储区标识符(存储区中的起始扇区号和扇区数目)和一个或多个描述与IO操作相关的内存区段(bio_vec数组)原创 2014-12-25 14:34:26 · 6253 阅读 · 0 评论