search for: nvmesqueue

Displaying 10 results from an estimated 10 matches for "nvmesqueue".

2015 Nov 18
0
[PATCH -qemu] nvme: support Google vendor extension
...b_addr) { + pci_dma_read(&cq->ctrl->parent_obj, cq->db_addr, + &cq->head, sizeof(cq->head)); + } +} + static void nvme_post_cqes(void *opaque) { NvmeCQueue *cq = opaque; @@ -168,6 +177,8 @@ static void nvme_post_cqes(void *opaque) NvmeSQueue *sq; hwaddr addr; + nvme_update_cq_head(cq); + if (nvme_cq_full(cq)) { break; } @@ -350,6 +361,8 @@ static void nvme_init_sq(NvmeSQueue *sq, NvmeCtrl *n, uint64_t dma_addr, QTAILQ_INSERT_TAIL(&(sq->req_list), &sq->io_req[i], en...
2015 Nov 19
2
[PATCH -qemu] nvme: support Google vendor extension
On 18/11/2015 06:47, Ming Lin wrote: > @@ -726,7 +798,11 @@ static void nvme_process_db(NvmeCtrl *n, hwaddr addr, int val) > } > > start_sqs = nvme_cq_full(cq) ? 1 : 0; > - cq->head = new_head; > + /* When the mapped pointer memory area is setup, we don't rely on > + * the MMIO written values to update the head pointer. */ >
2015 Nov 19
2
[PATCH -qemu] nvme: support Google vendor extension
On 18/11/2015 06:47, Ming Lin wrote: > @@ -726,7 +798,11 @@ static void nvme_process_db(NvmeCtrl *n, hwaddr addr, int val) > } > > start_sqs = nvme_cq_full(cq) ? 1 : 0; > - cq->head = new_head; > + /* When the mapped pointer memory area is setup, we don't rely on > + * the MMIO written values to update the head pointer. */ >
2015 Nov 20
2
[PATCH -qemu] nvme: support Google vendor extension
...me_cq_notifier); > + memory_region_add_eventfd(&n->iomem, > + 0x1000 + offset, 4, true, cq->cqid*2+1, &cq->notifier); should be 0x1000 + offset, 4, false, 0, &cq->notifier > +} > + > +static void nvme_sq_notifier(EventNotifier *e) > +{ > + NvmeSQueue *sq = > + container_of(e, NvmeSQueue, notifier); > + > + nvme_process_sq(sq); > +} > + > +static void nvme_init_sq_eventfd(NvmeSQueue *sq) > +{ > + NvmeCtrl *n = sq->ctrl; > + uint16_t offset = sq->sqid * 2 * NVME_CAP_DSTRD(n->bar.cap); > + &gt...
2015 Nov 20
2
[PATCH -qemu] nvme: support Google vendor extension
...me_cq_notifier); > + memory_region_add_eventfd(&n->iomem, > + 0x1000 + offset, 4, true, cq->cqid*2+1, &cq->notifier); should be 0x1000 + offset, 4, false, 0, &cq->notifier > +} > + > +static void nvme_sq_notifier(EventNotifier *e) > +{ > + NvmeSQueue *sq = > + container_of(e, NvmeSQueue, notifier); > + > + nvme_process_sq(sq); > +} > + > +static void nvme_init_sq_eventfd(NvmeSQueue *sq) > +{ > + NvmeCtrl *n = sq->ctrl; > + uint16_t offset = sq->sqid * 2 * NVME_CAP_DSTRD(n->bar.cap); > + &gt...
2015 Nov 20
0
[PATCH -qemu] nvme: support Google vendor extension
...t_notifier_init(&cq->notifier, 0); + event_notifier_set_handler(&cq->notifier, nvme_cq_notifier); + memory_region_add_eventfd(&n->iomem, + 0x1000 + offset, 4, true, cq->cqid*2+1, &cq->notifier); +} + +static void nvme_sq_notifier(EventNotifier *e) +{ + NvmeSQueue *sq = + container_of(e, NvmeSQueue, notifier); + + nvme_process_sq(sq); +} + +static void nvme_init_sq_eventfd(NvmeSQueue *sq) +{ + NvmeCtrl *n = sq->ctrl; + uint16_t offset = sq->sqid * 2 * NVME_CAP_DSTRD(n->bar.cap); + + event_notifier_init(&sq->notifier, 0); +...
2015 Nov 18
3
[RFC PATCH 0/2] Google extension to improve qemu-nvme performance
Hi Rob & Mihai, I wrote vhost-nvme patches on top of Christoph's NVMe target. vhost-nvme still uses mmio. So the guest OS can run unmodified NVMe driver. But the tests I have done didn't show competitive performance compared to virtio-blk/virtio-scsi. The bottleneck is in mmio. Your nvme vendor extension patches reduces greatly the number of MMIO writes. So I'd like to push it
2015 Nov 18
3
[RFC PATCH 0/2] Google extension to improve qemu-nvme performance
Hi Rob & Mihai, I wrote vhost-nvme patches on top of Christoph's NVMe target. vhost-nvme still uses mmio. So the guest OS can run unmodified NVMe driver. But the tests I have done didn't show competitive performance compared to virtio-blk/virtio-scsi. The bottleneck is in mmio. Your nvme vendor extension patches reduces greatly the number of MMIO writes. So I'd like to push it
2015 Nov 21
1
[PATCH -qemu] nvme: support Google vendor extension
...gt;= cq->size)" and the similar one for "if (new_ tail >= sq->size". But, I have a possible culprit. In your nvme_cq_notifier you are not doing the equivalent of: start_sqs = nvme_cq_full(cq) ? 1 : 0; cq->head = new_head; if (start_sqs) { NvmeSQueue *sq; QTAILQ_FOREACH(sq, &cq->sq_list, entry) { timer_mod(sq->timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 500); } timer_mod(cq->timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 500); } Instead, you are just calling nvme_post_...
2015 Nov 20
0
[PATCH -qemu] nvme: support Google vendor extension
...eventfd(&n->iomem, > > + 0x1000 + offset, 4, true, cq->cqid*2+1, &cq->notifier); > > should be 0x1000 + offset, 4, false, 0, &cq->notifier > > > +} > > + > > +static void nvme_sq_notifier(EventNotifier *e) > > +{ > > + NvmeSQueue *sq = > > + container_of(e, NvmeSQueue, notifier); > > + > > + nvme_process_sq(sq); > > +} > > + > > +static void nvme_init_sq_eventfd(NvmeSQueue *sq) > > +{ > > + NvmeCtrl *n = sq->ctrl; > > + uint16_t offset = sq->sqid *...