- 博客(629)
- 收藏
- 关注
原创 kvm使用virt-clone克隆虚拟机-主机和虚拟机之间共享文件
f是生成的新的虚拟机磁盘文件路径(一般是/var/lib/libvirt/images/这个路径)如果创建虚拟机过多,导致系统无法开机,可参考如下链接解决。使用命令查看磁盘空间,大概可以知道最多创建多少个虚拟机。克隆好以后,再次通过命令可以看到新增的虚拟机。-o后面要克隆的虚拟机名称。-n是新的虚拟机的名称。
2024-04-24 16:10:33
619
1
原创 在驱动中,利用Makefile增加宏定义
即在驱动源代码当中添加了DEBUG宏定义。即在驱动源代码当中添加了DEBUG宏定义。可以通过增加打印进行验证。可以通过增加打印进行验证。
2024-03-25 16:59:20
731
原创 linux deadline调度算法源码阅读记录
内核版本:3.13deadline-iosched.c#include <linux/kernel.h>#include <linux/fs.h>#include <linux/blkdev.h>#include <linux/elevator.h>#include <linux/bio.h>#include <linux/module.h>#include <linux/slab.h>#include &
2023-12-26 10:43:03
245
原创 linux block-plug形式的io合并代码分析
具体的合并代码就不分析了,比较重要的是,合并过程当中还有考虑一些值的限制情况,在符合这些值的限制下,才会进行合并,如果合并不了,则要重新分配一个request了。
2023-12-15 16:27:01
218
原创 struct queue_limits结构体参数学习
参考:内核版本:4.19.1内核提供了相关的API接口去设置这些相关的参数,在blk-settings.c文件。
2023-12-05 18:02:07
254
原创 linux内核bio子系统学习记录一:
主要源码目录 :block/bio.c include/linux/bio.h内核版本:4.19.1这部分先总结下bio子系统的初始化部分,后续再总结bio的申请以及释放,还有其它api的使用等介绍。bio的涉及到频繁的内存申请以及释放,包括bio结构体本身以及它比较重要的成员bi_io_vec*的内存申请和释放,所以初始化部分主要是相关的内存池的初始化,用于后面bio和bi_io_vec的内存申请和释放。defined。
2023-12-03 16:37:14
488
原创 blk_mq_init_queue函数学习记录
blk-mq编程,主要要调用两个函数进行初始化工作,blk_mq_init_queue这是第二个。该函数先是申请了struct request_queue结构,这个请求队列后面用于赋值给磁盘那个结构体的相应成员。
2023-11-24 11:04:05
558
原创 linux 3.13版本nvme驱动阅读记录二
内核3.13版本。该函数主要做了4减事情。1:nvme_dev_map,主要就是pci bar 那一套编程套路2:管理队列的配置3:dev_list?4:io队列的配置。
2023-11-06 09:17:10
411
原创 linux 3.13版本nvme驱动阅读记录一
2:dev->entry申请内存,大小是num_possible_cpus() * sizeof(*dev->entry),后面用于保存向量的相关信息,因为nvme是支持多队列的,所以后面可以将队列和特定的中断向量进行绑定,这个后面遇到相关代码再说。5:nvme_set_instance函数的调用,里面怎么实现的不用管,主要知道调用完它以后,dev->instance得到一个值就行了,这个值用于磁盘的命名,比如在dev目录下看到的/dev/nvmexxx就和这个值有关系。
2023-11-02 17:33:22
528
原创 scsi READ CAPACITY (10)命令总结
READ CAPACITY(10)命令(参见表119)请求设备服务器将描述直接访问块设备的容量和介质格式的8字节参数数据传输到数据缓存中。这个命令可以被处理,就好像它有一个HEAD OF QUEUE任务属性。如果逻辑单元支持保护信息,应用客户端应使用READ CAPACITY(16)命令,而不应使用theREAD CAPACITY(10)命令。
2023-10-12 18:06:21
940
原创 scsi MODE SENSE(6)命令 和 MODE SENSE(10)命令总结
MODE SENSE(6)命令(参见表73)为设备服务器向应用程序客户机报告参数提供了一种方法。它是MODE SELECT(6)命令的补充命令。执行MODE SENSE(6)命令的设备服务器也应执行MODE SELECT(6)命令。
2023-10-12 16:58:23
1868
原创 nvme prp模型代码处理流程分析
一般来说,如果sge只有1个时,那么只需要在下发的nvme rw命令时填写prp1字段的值,这个值是64bit的,所以这个64bit的字段即需要有dma的地址,也需要有传输的长度,这个64bit所以它需要一些特定的bit记录地址,一些特定的bit记录长度,同理prp2也是。2:需要多个prp时,因为prp_list是只记录地址的,但是有时候一个IO请求时,数据量没那么巧怎么办?1:怎么知道prp2记录的是数据的地址还是prp_list的起始地址?最后看一下,关于选择sgl还是prp的依据。
2023-09-22 09:35:56
528
1
原创 nvme_queue_rq函数分析一
先说结论,这个是为了后面通过pool申请内存时记录这些内存用的,因为这些内存地址是64位的所以这里要用 sizeof(__le64 *) 乘以 nvme_pci_npages_sgl(nseg),至于nvme_pci_npages_sgl(nseg)这个函数不多说了,自己看看也很容易理解,这里要说的是NVME_MAX_KB_SZ和NVME_MAX_SEGS值的大小是可以调整的。接着先看nvme_pci_setup_sgls函数,然后在看nvme_pci_setup_prps函数。这个值是怎么来的呢?
2023-09-21 18:07:24
648
原创 nvme各模块间的关系总结
其中,在nvme-core.ko当中,trace.c,multipath.c, multipath.c fault_inject.c是可选的。目录:driver/host/nvme/makefile。
2023-09-20 09:53:47
254
原创 中断和cpu的绑定,驱动代码实现
最后通过irq_set_affinity_hint函数,将cpumask设置到中断向量号里,这样就完成了,中断和特定cpu的绑定。所以,zalloc_cpumask_var函数是为cpu_mask变量申请内存的,如果cpumask_set_cpu(1, cpu_mask);其中cpu_mask变量的类型为cpumask_var_t。那么cpu_mask的值变为2,,也就是第1个bit是1。而cpumask_set_cpu函数,来看看怎么使用吧。该函数调用完以后,cpu_mask变量的值为0.
2023-09-02 12:26:00
945
原创 linux scatterlist阅读三
函数实现比较复杂,还涉及了struct sg_mapping_iter 结构体,这里比较重要的是skip参数,是指拷贝时跳过的字节数。
2023-08-26 11:40:02
1019
1
原创 virt_to_page和page_address使用总结
其余的还有类似于页帧号转struct page结构的函数。内核逻辑地址转struct page 结构体指针。truct page 结构体指针转内核逻辑地址。
2023-08-26 00:12:22
344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人