From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:50046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Si2tE-0008Mo-U6 for qemu-devel@nongnu.org; Fri, 22 Jun 2012 08:23:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Si2t8-0001GY-51 for qemu-devel@nongnu.org; Fri, 22 Jun 2012 08:23:04 -0400 Received: from mail-ob0-f173.google.com ([209.85.214.173]:58411) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Si2t7-0001GJ-W6 for qemu-devel@nongnu.org; Fri, 22 Jun 2012 08:22:58 -0400 Received: by obbta14 with SMTP id ta14so2111247obb.4 for ; Fri, 22 Jun 2012 05:22:54 -0700 (PDT) Message-ID: <4FE4639B.5070805@codemonkey.ws> Date: Fri, 22 Jun 2012 07:22:51 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <4FE240B2.4070907@codemonkey.ws> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 1/1] virtio-rng: hardware random number generator device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Amit Shah , qemu list On 06/22/2012 07:12 AM, Markus Armbruster wrote: > Anthony Liguori writes: >> Nack. >> >> Use a protocol. This is not what QMP events are designed for! >> >> No human is going to launch nc to a unix domain socket to launch QEMU. >> That's a silly use-case to design for. > > To be honest, I'm a bit surprised to see working code that got an ACK > from the guys with the problem it solves rejected out of hand over > something that feels like artistic license to me. This is an ABI! We have to support it for the rest of time. Everything else is a detail that is fixable but ABIs need to not suck from the beginning. And using a QMP event here is sucks. It disappoints me that this is even something I need to explain. QMP events occur over a single socket. If you trigger them from guest initiated activities (that have no intrinsic rate limit), you run into a situation where the guest could flood the management tool and/or queue infinite amounts of memory (because events have to be queued before they're sent). So we have rate limiting for QMP events. That means QMP events (like this one) are unreliable. But since QMP events aren't acked, there's no way for the management tool to know whether a QMP event was dropped or not. So you can run into the following scenario: - Guest sends randomness request for 10 bytes - QMP event gets sent for 10 bytes - Guest sends randomness request for 4 bytes - QMP is dropped Now what happens? With the current virtio-rng, nothing. It gets stuck in read() for ever. Now what do we do? The solution is simple--don't use a shared resource for virtio-rng events such that you don't need to worry about rate limiting or event queueing. You process one request, then one piece of data, all over the same socket. Regards, Anthony Liguori