This patch was originally written by Bernard Blackham, and modified by Peter Chubb.
From 0d755af2f5bef22432da71f2fe0a9dce7d2882cd Mon Sep 17 00:00:00 2001 From: Bernard Blackham <bernard.black...@nicta.com.au> Date: Fri, 24 Jul 2009 13:38:03 +1000 Subject: Disable line-based log buffering. There's no real reason for line-based buffering in log file output. If block buffering with a decent sized buffer is used, it can speed qemu up for -d all or -d exec significantly. The only thing you lose is that the last up to 4k of log output may be lost if qemu crashes. Signed-off-by: Peter Chubb <peter.ch...@nicta.com.au> Signed-off-by: Hans Jang <hsj...@ok-labs.com> Signed-off-by: Bernard Blackham <bernard.black...@nicta.com.au> --- exec.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) Index: qemu-working/exec.c =================================================================== --- qemu-working.orig/exec.c 2011-09-29 09:03:35.866233828 +1000 +++ qemu-working/exec.c 2011-09-29 12:40:56.668973550 +1000 @@ -1594,29 +1594,28 @@ void cpu_single_step(CPUState *env, int /* enable or disable low levels log */ void cpu_set_log(int log_flags) { loglevel = log_flags; if (loglevel && !logfile) { logfile = fopen(logfilename, log_append ? "a" : "w"); if (!logfile) { perror(logfilename); _exit(1); } + +/* Don't use line-based buffering: it hurts -d exec */ #if !defined(CONFIG_SOFTMMU) /* must avoid mmap() usage of glibc by setting a buffer "by hand" */ { static char logfile_buf[4096]; - setvbuf(logfile, logfile_buf, _IOLBF, sizeof(logfile_buf)); + setvbuf(logfile, logfile_buf, _IOFBF, sizeof(logfile_buf)); } -#elif !defined(_WIN32) - /* Win32 doesn't support line-buffering and requires size >= 2 */ - setvbuf(logfile, NULL, _IOLBF, 0); #endif log_append = 1; } if (!loglevel && logfile) { fclose(logfile); logfile = NULL; } } void cpu_set_log_filename(const char *filename) -- Dr Peter Chubb http://www.gelato.unsw.edu.au peterc AT gelato.unsw.edu.au http://www.ertos.nicta.com.au ERTOS within National ICT Australia