|
From: | Luigi Rizzo |
Subject: | Re: [Qemu-devel] unbounded qemu NetQue's ? |
Date: | Mon, 7 Jan 2013 15:27:30 +0100 |
On Sun, Jan 06, 2013 at 08:23:56PM +0100, Luigi Rizzo wrote:Hi Luigi,
> Hi,
> while testing the tx path in qemu without a network backend connected,
> i noticed that qemu_net_queue_send() builds up an unbounded
> queue, because QTAILQ* have no notion of a queue length.
>
> As a result, memory usage of a qemu instance can grow to extremely
> large values.
>
> I wonder if it makes sense to implement a hard limit on size of
> NetQue's. The patch below is only a partial implementation
> but probably sufficient for these purposes.
>
> cheers
> luigi
Good idea, we should bound the queues to prevent rare situations or bugs
from hogging memory.
Ideally we would do away with queues completely and make net clients
hand buffers to each other ahead of time to impose flow control. I've
thought about this a few times and always reached the conclusion that
it's not quite possible.
> diff -urp qemu-1.3.0-orig/net/queue.c qemu-1.3.0/net/queue.cPlease also do it for qemu_net_queue_append_iov().
> --- qemu-1.3.0-orig/net/queue.c 2012-12-03 20:37:05.000000000 +0100
> +++ qemu-1.3.0/net/queue.c 2013-01-06 19:38:12.000000000 +0100
> @@ -92,6 +92,9 @@ static void qemu_net_queue_append(NetQue
> {sent_cb() must be invoked. It's best to do this in a QEMUBH in case the
> NetPacket *packet;
>
> + if (queue->packets.tqh_count > 10000)
> + return; // XXX drop
> +
caller is not prepared for reentrancy.
> packet = g_malloc(sizeof(NetPacket) + size);Please don't modify qemu-queue.h. It's a generic queue data structure
> packet->sender = sender;
> packet->flags = flags;
> diff -urp qemu-1.3.0-orig/qemu-queue.h qemu-1.3.0/qemu-queue.h
> --- qemu-1.3.0-orig/qemu-queue.h 2012-12-03 20:37:05.000000000 +0100
> +++ qemu-1.3.0/qemu-queue.h 2013-01-06 19:34:01.000000000 +0100
used by all of QEMU. Instead, keep a counter in the NetQueue.
Stefan
[Prev in Thread] | Current Thread | [Next in Thread] |