[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] fix vcpu long time io blocking on tap, when too man
From: |
Wangkai |
Subject: |
[Qemu-devel] [PATCH] fix vcpu long time io blocking on tap, when too many packets was delivered to the guest os via tap interface. |
Date: |
Tue, 29 Jul 2014 19:20:16 +0800 |
Signed-off-by: Wangkai <address@hidden>
---
net/tap.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/net/tap.c b/net/tap.c
index a40f7f0..9a59934 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -189,6 +189,7 @@ static void tap_send(void *opaque)
{
TAPState *s = opaque;
int size;
+ int packets = 0;
while (qemu_can_send_packet(&s->nc)) {
uint8_t *buf = s->buf;
@@ -210,6 +211,19 @@ static void tap_send(void *opaque)
} else if (size < 0) {
break;
}
+
+ /*
+ * When receive packets on tap, QEMU io was locked, if too many
+ * packets was delivered to the guest os via tap interface,
+ * tap_send() would keep looping, if then the VM required a io
+ * operation, would be blocked for a long time.
+ * Here we set the number to limit one tap interface receive time,
+ * keep io events fair and lock time little.
+ */
+ packets++;
+ if (packets >= 50) {
+ break;
+ }
}
}
--
1.7.2.5
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] fix vcpu long time io blocking on tap, when too many packets was delivered to the guest os via tap interface.,
Wangkai <=