From: Maxime Coquelin Date: Tue, 10 May 2022 20:17:18 +0000 (+0200) Subject: vhost: add statistics for guest notification X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=1ea74efd7fa447e737b81703739888b49edb5a63;p=dpdk.git vhost: add statistics for guest notification This patch adds a new virtqueue statistic for guest notifications. It is useful to deduce from hypervisor side whether the corresponding guest Virtio device is using Kernel Virtio-net driver or DPDK Virtio PMD. Signed-off-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index f8aa6194d1..1814599aaf 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -42,6 +42,7 @@ static const struct vhost_vq_stats_name_off vhost_vq_stat_strings[] = { {"size_512_1023_packets", offsetof(struct vhost_virtqueue, stats.size_bins[5])}, {"size_1024_1518_packets", offsetof(struct vhost_virtqueue, stats.size_bins[6])}, {"size_1519_max_packets", offsetof(struct vhost_virtqueue, stats.size_bins[7])}, + {"guest_notifications", offsetof(struct vhost_virtqueue, stats.guest_notifications)}, }; #define VHOST_NB_VQ_STATS RTE_DIM(vhost_vq_stat_strings) diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h index 01b97011aa..13c5c2266d 100644 --- a/lib/vhost/vhost.h +++ b/lib/vhost/vhost.h @@ -133,6 +133,7 @@ struct virtqueue_stats { uint64_t broadcast; /* Size bins in array as RFC 2819, undersized [0], 64 [1], etc */ uint64_t size_bins[8]; + uint64_t guest_notifications; }; /** @@ -871,6 +872,8 @@ vhost_vring_call_split(struct virtio_net *dev, struct vhost_virtqueue *vq) (vq->callfd >= 0)) || unlikely(!signalled_used_valid)) { eventfd_write(vq->callfd, (eventfd_t) 1); + if (dev->flags & VIRTIO_DEV_STATS_ENABLED) + vq->stats.guest_notifications++; if (dev->notify_ops->guest_notified) dev->notify_ops->guest_notified(dev->vid); } @@ -879,6 +882,8 @@ vhost_vring_call_split(struct virtio_net *dev, struct vhost_virtqueue *vq) if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT) && (vq->callfd >= 0)) { eventfd_write(vq->callfd, (eventfd_t)1); + if (dev->flags & VIRTIO_DEV_STATS_ENABLED) + vq->stats.guest_notifications++; if (dev->notify_ops->guest_notified) dev->notify_ops->guest_notified(dev->vid); }