![](https://img-blog.csdnimg.cn/3da9188c4e644db2bc90876cd1c7db0a.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
zns ssd-femu-nvme-spdk-dpdk
文章平均质量分 96
zns ssd-femu-nvme-spdk-dpdk学习记录
最佳损友1020
xdu 计科毕业
xjtu 计科在读
种一棵树的最好时机是十年前,其次是现在
展开
-
spdk记录
在调用栈需要特别关注的就是bdev_write_blocks_with_md函数,在这个函数中创建了spdk_bdev_io结构体,当一个IO请求完成,都会调用spdk_bdev_free_io释放对应空间。简要看json的解析过程,全局查询json_config_file,找到spdk_subsystem_init_from_json_config函数。猜测rpc_bdev_malloc_create函数与spdk_subsystem_init_from_json_config中的。原创 2023-05-30 23:10:34 · 1219 阅读 · 0 评论 -
fio引发的一些问题
,加载自己写的模块,加载nvme-core模块时没出现啥问题,加载nvme模块时显示内核地址访问错误,__slab_alloc not-present page,这有可能与模块的签名,小版本不符合之类的问题有关,但懒得研究了,直接源码编译内核然后切换。却发现驱动的请求队列处理函数的请求字节数为130560,也就是255扇区,这是一个莫名其妙的数字,甚至不是4k的倍数,后逐渐增大bs查看下发的请求大小,发现超过128k后扇区数就会成许多个255,例如2个128k会拆分成255+1,原创 2023-05-20 18:10:52 · 1086 阅读 · 0 评论 -
femu使用记录
自己制作镜像,但失败了,故选择第一种方法,下载femu提供的镜像,下载完成后直接运行run_zns.sh脚本,不需要第二种方法的安装操作系统,修改grub等操作。可使用ssh连接虚拟机,端口号即为hostfwd定义的端口号(8080),vscode连接更方便。以root权限运行nvme list能看到zns ssd,则表示搭建环境成功。这篇博客用于记录femu搭建与使用过程中遇到的问题。首先是搭建环境,刚开始按照博客。原创 2023-05-09 10:25:13 · 1810 阅读 · 0 评论 -
spdk环境搭建
本来21年就写了这篇博客,但因为在博客中放了vmware的密钥,违规了,最近正好又要用到spdk,就重新搭建一下spdk,简单改一下博客再发一遍。原创 2023-04-16 21:24:55 · 1845 阅读 · 3 评论 -
linux UIO驱动实践
想了想,还是自己写一个简单的demo,加深一下印象。由于没有实际的设备,为了触发驱动的探测函数,就需要借助platform设备与platform驱动。一直以为使用镜像安装的Ubuntu没有内核源码,不能编译驱动,只能由源码编译内核后切换内核才能编译驱动,没想到一安装完就可以编译了,错误的印象。用户态代码首先读取内存数据,而后写入一些数据,驱动在设备移除函数中读取内存数据,验证用户程序是否成功写入。相较于platform的demo,只是加入了一些uio_info相关的代码,函数构成一致。原创 2023-03-07 22:25:33 · 1507 阅读 · 0 评论 -
NVMe驱动注释(持续更新)
整合了之前文章的一些内容。原创 2023-03-06 10:26:57 · 3159 阅读 · 0 评论 -
NVMe驱动学习记录-2
NVMe驱动学习记录-2参考源代码变量函数结构体参考源码地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.90.tar.gzlinux-4.19.90\drivers\nvme\host源码阅读环境:Windows 搭建 opengrok|极客教程 (geek-docs.com)书籍:《LINUX设备驱动程序》初始化参考链接:linux里的nvme驱动代码分析(加载初始化) nvme_reset_work()函数后原创 2022-05-12 16:34:08 · 4408 阅读 · 1 评论 -
NVMe驱动 请求路径学习记录
NVMe驱动 DMA学习记录由深入浅出SSD 6.5节trace分析可知,主机读请求的执行流程如下:主机准备好命令放在SQ主机通过写SQ的Tail DB,通知SSD来取命令(Memory Write TLP)SSD收到通知,去主机端的SQ取指令(Memory Read TLP)SSD执行命令,把数据传给主机(Memory Write TLP)SSD往主机的CQ中返回状态SSD采用中断的方式告诉主机去处理CQ主机处理相应CQ,更新CQ Head DB(Memory Write TLP)可原创 2022-05-25 21:05:52 · 1734 阅读 · 1 评论 -
NVMe驱动学习记录-1
NVMe驱动学习记录-1初始化nvme-core模块解释nvme模块解释初始化nvme-core模块创建工作队列分配设备号创建class类型的对象解释工作队列workqueue是对内核线程封装的用于处理各种工作项的一种处理方法, 由于处理对象是用链表拼接一个个工作项, 依次取出来处理, 然后从链表删除,就像一个队列排好队依次处理一样, 所以也称工作队列所谓封装可以简单理解一个中转站, 一边指向“合适”的内核线程, 一边接受你丢过来的工作项, 用结构体 workqueue_srtuc原创 2022-05-12 16:30:45 · 1293 阅读 · 0 评论