From owner-freebsd-emulation@FreeBSD.ORG Sun Dec 7 03:02:38 2008 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B1EF9106564A for ; Sun, 7 Dec 2008 03:02:38 +0000 (UTC) (envelope-from anthony@codemonkey.ws) Received: from yw-out-2324.google.com (yw-out-2324.google.com [74.125.46.31]) by mx1.freebsd.org (Postfix) with ESMTP id 7138F8FC0A for ; Sun, 7 Dec 2008 03:02:38 +0000 (UTC) (envelope-from anthony@codemonkey.ws) Received: by yw-out-2324.google.com with SMTP id 9so267881ywe.13 for ; Sat, 06 Dec 2008 19:02:37 -0800 (PST) Received: by 10.100.31.10 with SMTP id e10mr840733ane.12.1228617135303; Sat, 06 Dec 2008 18:32:15 -0800 (PST) Received: from ?192.168.0.103? (cpe-24-28-0-183.austin.res.rr.com [24.28.0.183]) by mx.google.com with ESMTPS id d38sm1660844and.23.2008.12.06.18.32.13 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 06 Dec 2008 18:32:14 -0800 (PST) Message-ID: <493B35AB.1050301@codemonkey.ws> Date: Sat, 06 Dec 2008 20:32:11 -0600 From: Anthony Liguori User-Agent: Thunderbird 2.0.0.17 (X11/20080925) MIME-Version: 1.0 To: qemu-devel@nongnu.org, freebsd-emulation@FreeBSD.org References: <20081206220906.GA34210@saturn.kn-bremen.de> In-Reply-To: <20081206220906.GA34210@saturn.kn-bremen.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Subject: Re: [Qemu-devel] testing qemu svn r5890 on FreeBSD - virtio, and a patch enabling -clock dynticks X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Dec 2008 03:02:38 -0000 Juergen Lock wrote: > Hi! > > Jung-uk Kim sent me a patch to enable -clock dynticks on FreeBSD hosts > (the configure check is mine, only FreeBSD >= 7.x has posix timers that > this uses), I'll append it below. > > This is the experimental qemu-devel port update I used: > http://people.freebsd.org/~nox/qemu/qemu-devel-20081206.patch > As already mentioned I had to add a missing `#include ' > (files/patch-qemu-common.h), as also posted here: > http://lists.gnu.org/archive/html/qemu-devel/2008-12/msg00216.html > > I only had one (type of) guest that actually had virtio drivers (three > versions of sidux isos), and the speed difference between virtio-blk and > scsi was small. (I tested dd bs=64k count=500 /dev/null and > similar with a raw image, both scsi and virtio were always faster than ide.) > I noted tho that even virtio there was not half as fast as ide (and scsi) > on KNOPPIX_V5.3.1DVD-2008-03-26-EN.iso, so either overhead has increased > greatly from 2.6.24.4 to 2.6.26, or this has something to do with > the sidux kernel using CONFIG_NO_HZ and the Knoppix one (apparently) not > and qemu (possibly, I also suspected that with the usb slowness) not > handling CONFIG_NO_HZ guests too well. scsi on a FreeBSD > 7.1-BETA-i386-livefs.iso guest btw was even yet (noticeably) faster than > on the Knoppix iso. It will be interesting how virtio-net will fare once > that gets committed... > I don't have much experience with perf benchmarking and TCG. TCG may has interesting side effects. For instance, it's more expensive to do things in the guest instead of the host so the emulation overhead of IDE/SCSI shouldn't matter much. A straight dd test is not the best test BTW. If you want to measure performance, you should use O_DIRECT in the guest (iflag=direct) and probably O_DIRECT in the host (cache=none). Regards, Anthony Liguori > Here comes the dynticks patch (files/patch-dynticks), it assumes that > NetBSD either always has posix timers, or -lrt is not needed otherwise > there. (FreeBSD before 7.x doesn't have -lrt.) > > --- qemu/Makefile.target.orig 2008-11-21 11:49:37.000000000 -0500 > +++ qemu/Makefile.target 2008-12-03 15:46:24.000000000 -0500 > @@ -598,7 +598,7 @@ > OBJS+=block-raw-posix.o > endif > > -LIBS+=-lz > +LIBS += $(RTLIBS) -lz > ifdef CONFIG_ALSA > LIBS += -lasound > endif > Index: qemu/configure > @@ -99,6 +99,7 @@ > fmod_lib="" > fmod_inc="" > oss_lib="" > +rt_lib="" > vnc_tls="yes" > bsd="no" > linux="no" > @@ -157,13 +158,15 @@ > if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then > kqemu="yes" > fi > +rt_lib="-lrt" > ;; > NetBSD) > bsd="yes" > audio_drv_list="oss" > audio_possible_drivers="oss sdl esd" > oss_lib="-lossaudio" > -aio_lib="-lrt -lpthread" > +aio_lib="-lpthread" > +rt_lib="-lrt" > ;; > OpenBSD) > bsd="yes" > @@ -231,6 +234,7 @@ > kqemu="yes" > audio_possible_drivers="$audio_possible_drivers fmod" > fi > +rt_lib="-lrt" > ;; > esac > > @@ -1053,6 +1057,20 @@ > iovec=yes > fi > > +########################################## > +# posix timer probe > +cat > $TMPC < +#include > +int main(void) { timer_create(CLOCK_REALTIME, (struct sigevent *)NULL, (timer_t *)NULL); return 0; } > +EOF > +posixtimer=no > +if $cc $ARCH_CFLAGS -o $TMPE $TMPC $rt_lib 2> /dev/null ; then > + posixtimer=yes > +else > + rt_lib="" > +fi > +RTLIBS="$rt_lib" > + > # Check if tools are available to build documentation. > if [ "x$NOPORTDOCS" != "x" -o -x "`which texi2html 2>/dev/null`" ] && \ > [ -x "`which pod2man 2>/dev/null`" ]; then > @@ -1174,6 +1192,7 @@ > echo "LDFLAGS=$LDFLAGS" >> $config_mak > echo "EXESUF=$EXESUF" >> $config_mak > echo "AIOLIBS=$AIOLIBS" >> $config_mak > +echo "RTLIBS=$RTLIBS" >> $config_mak > case "$cpu" in > i386) > echo "ARCH=i386" >> $config_mak > @@ -1425,6 +1444,9 @@ > if test "$iovec" = "yes" ; then > echo "#define HAVE_IOVEC 1" >> $config_h > fi > +if test "$posixtimer" = "yes" ; then > + echo "#define HAVE_POSIX_TIMER 1" >> $config_h > +fi > > # XXX: suppress that > if [ "$bsd" = "yes" ] ; then > Index: qemu/vl.c > @@ -918,12 +918,16 @@ > static int unix_start_timer(struct qemu_alarm_timer *t); > static void unix_stop_timer(struct qemu_alarm_timer *t); > > -#ifdef __linux__ > +#ifdef HAVE_POSIX_TIMER > > static int dynticks_start_timer(struct qemu_alarm_timer *t); > static void dynticks_stop_timer(struct qemu_alarm_timer *t); > static void dynticks_rearm_timer(struct qemu_alarm_timer *t); > > +#endif > + > +#ifdef __linux__ > + > static int hpet_start_timer(struct qemu_alarm_timer *t); > static void hpet_stop_timer(struct qemu_alarm_timer *t); > > @@ -1001,9 +1005,11 @@ > > static struct qemu_alarm_timer alarm_timers[] = { > #ifndef _WIN32 > -#ifdef __linux__ > +#ifdef HAVE_POSIX_TIMER > {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer, > dynticks_stop_timer, dynticks_rearm_timer, NULL}, > +#endif > +#ifdef __linux__ > /* HPET - if available - is preferred */ > {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL}, > /* ...otherwise try RTC */ > @@ -1361,7 +1367,7 @@ > return delta; > } > > -#if defined(__linux__) || defined(_WIN32) > +#if defined(HAVE_POSIX_TIMER) || defined(_WIN32) > static uint64_t qemu_next_deadline_dyntick(void) > { > int64_t delta; > @@ -1506,6 +1512,10 @@ > close(rtc_fd); > } > > +#endif /* defined(__linux__) */ > + > +#ifdef HAVE_POSIX_TIMER > + > static int dynticks_start_timer(struct qemu_alarm_timer *t) > { > struct sigevent ev; > @@ -1577,7 +1587,7 @@ > } > } > > -#endif /* defined(__linux__) */ > +#endif /* defined(HAVE_POSIX_TIMER) */ > > static int unix_start_timer(struct qemu_alarm_timer *t) > { > > >