[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/28] vhost: add trace for IOTLB miss
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 04/28] vhost: add trace for IOTLB miss |
Date: |
Wed, 23 May 2018 17:42:46 +0300 |
From: Peter Xu <address@hidden>
Add some trace points for IOTLB translation for vhost. After vhost-user
is setup, the only IO path that QEMU will participate should be the
IOMMU translation, so it'll be good we can track this with explicit
timestamps when needed to see how long time we take to do the
translation, and whether there's anything stuck inside. It might be
useful for triaging vhost-user problems.
Signed-off-by: Peter Xu <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/virtio/vhost.c | 7 +++++++
hw/virtio/trace-events | 1 +
2 files changed, 8 insertions(+)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 9d5850a..b082900 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -894,12 +894,15 @@ int vhost_device_iotlb_miss(struct vhost_dev *dev,
uint64_t iova, int write)
rcu_read_lock();
+ trace_vhost_iotlb_miss(dev, 1);
+
iotlb = address_space_get_iotlb_entry(dev->vdev->dma_as,
iova, write);
if (iotlb.target_as != NULL) {
ret = vhost_memory_region_lookup(dev, iotlb.translated_addr,
&uaddr, &len);
if (ret) {
+ trace_vhost_iotlb_miss(dev, 3);
error_report("Fail to lookup the translated address "
"%"PRIx64, iotlb.translated_addr);
goto out;
@@ -911,10 +914,14 @@ int vhost_device_iotlb_miss(struct vhost_dev *dev,
uint64_t iova, int write)
ret = vhost_backend_update_device_iotlb(dev, iova, uaddr,
len, iotlb.perm);
if (ret) {
+ trace_vhost_iotlb_miss(dev, 4);
error_report("Fail to update device iotlb");
goto out;
}
}
+
+ trace_vhost_iotlb_miss(dev, 2);
+
out:
rcu_read_unlock();
diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index 1422ff0..07bcbe9 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -6,6 +6,7 @@ vhost_region_add_section(const char *name, uint64_t gpa,
uint64_t size, uint64_t
vhost_region_add_section_merge(const char *name, uint64_t new_size, uint64_t
gpa, uint64_t owr) "%s: size: 0x%"PRIx64 " gpa: 0x%"PRIx64 " owr: 0x%"PRIx64
vhost_region_add_section_aligned(const char *name, uint64_t gpa, uint64_t
size, uint64_t host) "%s: 0x%"PRIx64"+0x%"PRIx64" @ 0x%"PRIx64
vhost_section(const char *name, int r) "%s:%d"
+vhost_iotlb_miss(void *dev, int step) "%p step %d"
# hw/virtio/vhost-user.c
vhost_user_postcopy_end_entry(void) ""
--
MST
- [Qemu-devel] [PULL 00/28] pc, pci, virtio, vhost: fixes, features, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 03/28] virtio-balloon: add hugetlb page allocation counts, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 01/28] hw/pci-host/q35: Replace hardcoded value with macro, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 02/28] allocate pci id for mdpy, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 04/28] vhost: add trace for IOTLB miss,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 05/28] update-linux-headers.sh: drop kvm_para.h hacks, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 06/28] include/standard-headers: add asm-x86/kvm_para.h, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 08/28] linux-headers: drop kvm_para.h, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 09/28] update-linux-headers.sh: unistd.h, kvm consistency, Michael S. Tsirkin, 2018/05/23
- [Qemu-devel] [PULL 07/28] x86/cpu: use standard-headers/asm-x86.kvm_para.h, Michael S. Tsirkin, 2018/05/23