summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-04-01 13:29:06 +0100
committerRichard W.M. Jones <rjones@redhat.com>2011-04-01 16:05:30 +0100
commit02971adc3b0f07f3820d0c5e973fabf16d16deb3 (patch)
tree58817368552e55051fa7be994cd80d7d8f4fdd2b
parent1bf970cb0e7fc0f9d8c10b567c6c7b4a66e43c17 (diff)
downloadlibguestfs-02971adc3b0f07f3820d0c5e973fabf16d16deb3.tar.gz
libguestfs-02971adc3b0f07f3820d0c5e973fabf16d16deb3.tar.xz
libguestfs-02971adc3b0f07f3820d0c5e973fabf16d16deb3.zip
protocol: Sleep for 1ms before reading log messages.
As explained in the comment: /* QEMU's console emulates a 16550A serial port. The real 16550A * device has a small FIFO buffer (16 bytes) which means here we see * lots of small reads of 1-16 bytes in length, usually single * bytes. Sleeping here for a very brief period groups reads * together (so we usually get a few lines of output at once) and * improves overall throughput, as well as making the event * interface a bit more sane for callers. With a virtio-serial * based console (not yet implemented) we may be able to remove * this. XXX */
-rw-r--r--src/proto.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/proto.c b/src/proto.c
index 39f30ae4..7cd1d313 100644
--- a/src/proto.c
+++ b/src/proto.c
@@ -251,8 +251,15 @@ read_log_message_or_eof (guestfs_h *g, int fd, int error_if_eof)
/* QEMU's console emulates a 16550A serial port. The real 16550A
* device has a small FIFO buffer (16 bytes) which means here we see
* lots of small reads of 1-16 bytes in length, usually single
- * bytes.
+ * bytes. Sleeping here for a very brief period groups reads
+ * together (so we usually get a few lines of output at once) and
+ * improves overall throughput, as well as making the event
+ * interface a bit more sane for callers. With a virtio-serial
+ * based console (not yet implemented) we may be able to remove
+ * this. XXX
*/
+ usleep (1000);
+
n = read (fd, buf, sizeof buf);
if (n == 0) {
/* Hopefully this indicates the qemu child process has died. */