blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id) { struct request_queue *uninit_q, *q; uninit_q = blk_alloc_queue_node(GFP_KERNEL, node_id); if (!uninit_q) return NULL; q = blk_init_allo
void *wd_blkpool_create(struct wd_queue *q, struct wd_blkpool_setup *setup); 函数功能 在Warpdrive队列上使用Warpdrive内存或用户的内存创建块内存池 输入说明 q:Warpdrive算法队列 setup:用户给出的规格与内存信息 输出说明 setup->block_num:当用户使用WD的内存来创建池时,block_num将作为实际创建了多...
blk_mq_init_queue:初始化IO请求队列--request_queue。函数的主要流程如下: 调用blk_alloc_queue_node分配请求队列的内存,分配的内存节点与设备连接的NUMA节点一致,避免远端内存访问问题。 调用blk_mq_init_allocated_queue初始化分配的请求队列(request_queue),blk-mq的request_queue中包含两层队列,即percpu的软件队...
spin_lock_irq(q->queue_lock); @@ -1520,7 +1520,6 @@ struct request *blk_get_request(struct request_queue *q, unsigned int op, 15201520 req=blk_mq_alloc_request(q,op, 15211521 (gfp_mask&__GFP_DIRECT_RECLAIM) ? 15221522 0:BLK_MQ_REQ_NOWAIT); ...
比如读取硬盘。取得virtqueue队列,virtio-blk就一个队列。然后往里面添加3条结构化数据。 struct addr_size { unsigned long vp_addr; /*物理地址*/ u32 vp_size; /* 大小 */ u32 vp_flag; /*标记,如读,写*/ }; 第一条是请求命令数据:
blk_queue_exit(q); return ERR_PTR(-EXDEV); }cpu = cpumask_first(alloc_data.hctx->cpumask);cpu = cpumask_first_and(alloc_data.hctx->cpumask, cpu_online_mask); alloc_data.ctx = __blk_mq_get_ctx(q, cpu);rq = blk_mq_get_request(q, NULL, op, &alloc_data); ...
然后,我们创建三个描述符(virtio_alloc_desc( ) 使用 desc_free 变量和下一个指针来跟踪一大串空闲描述符索引)。我们填充每个描述符的标志和长度,然后将它们连接起来形成一个链。最后,我们将描述符链放入 avail 数组,并通知设备。 The only major difference between reading and writing is the permission on the...
iowrite写寄存器VIRTIO_PCI_QUEUE_SEL来通知QEMU端,当前初始化的是第index号vring_virtqueue;ioread则从QEMU端读取vring_desc表,共有多少项(virtio block设备设置为128项)。 根据之前ioread获得的表项数来确定vring共享区域的大小,并调用alloc_pages_exact在虚拟机里为vring_virtqueue分配内存空间。
vblk->disk = alloc_disk(1 << PART_BITS); memset(&vblk->tag_set, 0, sizeof(vblk->tag_set)); vblk->tag_set.ops = &virtio_mq_ops; vblk->tag_set.queue_depth = virtblk_queue_depth; vblk->tag_set.numa_node = NUMA_NO_NODE; ...
vDPA 设备是一种遵循virtio 数据路径规范但具有特定于供应商的控制路径的设备。 vDPA 设备既可以物理位于硬件上,也可以通过软件模拟。 图片 主机内核中只需要一个小型 vDPA 父驱动程序来处理控制路径。主要优点是所有 vDPA 设备都具有统一的软件堆栈: 用于用户空间或客户 virtio 驱动程序的vhost 接口(vhost-vdpa),例如...