public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Ulrich Schreiner <ulrich.schreiner-sZDnKEZIvs8b1SvskN2V4Q@public.gmane.org>
To: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	Avi Kivity <avik-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Subject: Re: kvm very slow
Date: Wed, 08 Aug 2007 08:28:52 +0200	[thread overview]
Message-ID: <1186554533.3294.11.camel@vaio> (raw)
In-Reply-To: <20070807204922.GA27976-sTXFmx6KbOnUXq0IF5SVAZ4oGUkBHcCu@public.gmane.org>

ok,

patched kvm-33, compile, install

i started qemu-system-x86_64 with "-no-rtc -use-hpet" and ... well the
time drift is unchanged. ok, the warning for "dev.rtc..." has gone.

doing a date (guest) gives me (for example):

8:08:59

after 10 (real!) seconds, date (guest) gives me

8:09:04

--> 10 real seconds are about 5 seconds in the guest. working about 5
minutes in the guest and the clock drifts a few minutes in the past. 

</usc>

ps: the line

"-use-rtc        use /dev/hpet (HPET) for timer alarm (do use
gettimeofday)\n"


should be

"-use-hpet        use /dev/hpet (HPET) for timer alarm (do use
gettimeofday)\n"

because "use-hpet" is the option which is aksed in the code

Am Dienstag, den 07.08.2007, 22:49 +0200 schrieb Luca Tettamanti:
> Il Tue, Aug 07, 2007 at 02:08:08PM +0200, Luca ha scritto: 
> > On 8/7/07, Dor Laor <dor.laor-atKUWr5tajBWk0Htik3J/w@public.gmane.org> wrote:
> > > Luca claims the HPET intefer the RTC. Can it be disabled? ( I know some
> > > new chipsets implement rtc using HPET).
> > 
> > Basically HPET can operate in legacy mode - where it uses the same IRQ
> > as the RTC (and RTC won't deliver any interrupt) - or in "standard"
> > mode where the IO-APIC can be configured to deliver the interrupt on
> > any line. ATM Linux can only use the legacy mode.
> > You can of course disable HPET, but then it won't be available for
> > in-kernel timekeeping (in case e.g. the TSC is not stable/synced). I'd
> > rather add support for HPET as timer in QEMU...
> 
> Something like this. Ulrich can you give it a try:
> 
> ---
> Patch against current GIT, but also applies to kvm-33.
> Run kvm with -use-hpet.
> 
>  qemu/vl.c |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 60 insertions(+), 2 deletions(-)
> 
> diff --git a/qemu/vl.c b/qemu/vl.c
> index 4ad39f1..36628af 100644
> --- a/qemu/vl.c
> +++ b/qemu/vl.c
> @@ -54,6 +54,7 @@
>  #include <pty.h>
>  #include <malloc.h>
>  #include <linux/rtc.h>
> +#include <linux/hpet.h>
>  #include <linux/ppdev.h>
>  #endif
>  #endif
> @@ -996,8 +997,9 @@ static void host_alarm_handler(int host_signum)
>  
>  static int use_rtc = 1;
>  static int rtc_fd;
> +static int use_hpet;
>  
> -static int start_rtc_timer(void)
> +static int enable_rtc(void)
>  {
>      rtc_fd = open("/dev/rtc", O_RDONLY);
>      if (rtc_fd < 0)
> @@ -1017,6 +1019,56 @@ static int start_rtc_timer(void)
>      return 0;
>  }
>  
> +static char default_hpet[] = "/dev/hpet";
> +
> +static int enable_hpet(void)
> +{
> +    struct hpet_info info;
> +    int r;
> +
> +    rtc_fd = open(default_hpet, O_RDONLY);
> +    if (rtc_fd < 0)
> +        return -1;
> +
> +    /* Set frequency */
> +    r = ioctl(rtc_fd, HPET_IRQFREQ, RTC_FREQ);
> +    if (r < 0) {
> +        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024 Hz timer. This is not a fatal\n"
> +                "error, but for better emulation accuracy type:\n"
> +                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
> +        goto fail;
> +    }
> +
> +    /* Check capabilities */
> +    r = ioctl(rtc_fd, HPET_INFO, &info);
> +    if (r < 0)
> +        goto fail;
> +    
> +    /* Enable peridic mode */
> +    r = ioctl(rtc_fd, HPET_EPI, 0);
> +    if (info.hi_flags && (r < 0))
> +        goto fail;
> +
> +    /* Enable interrupt */
> +    r = ioctl(rtc_fd, HPET_IE_ON, 0);
> +    if (r < 0)
> +        goto fail;
> +
> +    pit_min_timer_count = PIT_FREQ / RTC_FREQ;
> +
> +    return 0;
> +fail:
> +    close(rtc_fd);
> +    return -1;
> +}
> +
> +static int start_rtc_timer(void)
> +{
> +    if (use_hpet)
> +        return enable_hpet();
> +    else
> +        return enable_rtc();
> +}
>  #else
>  
>  static int start_rtc_timer(void)
> @@ -1090,7 +1142,7 @@ static void init_timer_alarm(void)
>             2.6 kernels */
>          if (itv.it_interval.tv_usec > 1000 || 1) {
>              /* try to use /dev/rtc to have a faster timer */
> -            if (!use_rtc || (start_rtc_timer() < 0))
> +            if ((!use_rtc && !use_hpet) || (start_rtc_timer() < 0))
>                  goto use_itimer;
>              /* disable itimer */
>              itv.it_interval.tv_sec = 0;
> @@ -6482,6 +6534,7 @@ void help(void)
>             "-tdf            inject timer interrupts that got lost\n"
>  #if defined(__linux__)
>             "-no-rtc         don't use /dev/rtc for timer alarm (do use gettimeofday)\n"
> +           "-use-rtc        use /dev/hpet (HPET) for timer alarm (do use gettimeofday)\n"
>  #endif
>  	   "-option-rom rom load a file, rom, into the option ROM space\n"
>             "\n"
> @@ -6574,6 +6627,7 @@ enum {
>      QEMU_OPTION_tdf,
>  #if defined(__linux__)
>      QEMU_OPTION_no_rtc,
> +    QEMU_OPTION_use_hpet,
>  #endif
>      QEMU_OPTION_cpu_vendor,
>  };
> @@ -6671,6 +6725,7 @@ const QEMUOption qemu_options[] = {
>      { "tdf", 0, QEMU_OPTION_tdf }, /* enable time drift fix */
>  #if defined(__linux__)
>      { "no-rtc", 0, QEMU_OPTION_no_rtc },
> +    { "use-hpet", 0, QEMU_OPTION_use_hpet },
>  #endif
>      { "cpu-vendor", HAS_ARG, QEMU_OPTION_cpu_vendor },
>      { NULL },
> @@ -7395,6 +7450,9 @@ int main(int argc, char **argv)
>  	    case QEMU_OPTION_no_rtc:
>  		use_rtc = 0;
>  		break;
> +	    case QEMU_OPTION_use_hpet:
> +		use_hpet = 1;
> +		break;
>  #endif
>  	    case QEMU_OPTION_cpu_vendor:
>  		cpu_vendor_string = optarg;
> 
> 
> 
> Luca


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

  parent reply	other threads:[~2007-08-08  6:28 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-01  5:22 kvm very slow Ulrich Schreiner
2007-08-01 16:41 ` Avi Kivity
     [not found]   ` <46B0B7D0.9080203-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-01 19:45     ` Ulrich Schreiner
     [not found]       ` <46B0E2F0.1070701-sZDnKEZIvs8b1SvskN2V4Q@public.gmane.org>
2007-08-02  8:24         ` Avi Kivity
     [not found]           ` <46B194C5.5040508-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-02 19:31             ` Ulrich Schreiner
2007-08-07  7:20             ` Ulrich Schreiner
2007-08-07  7:44               ` Dor Laor
     [not found]                 ` <64F9B87B6B770947A9F8391472E032160D17A0EA-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-08-07  9:43                   ` Ulrich Schreiner
2007-08-07 11:32                     ` Luca
2007-08-07 11:51                     ` Dor Laor
     [not found]                       ` <64F9B87B6B770947A9F8391472E032160D17A197-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-08-07 12:08                         ` Luca
     [not found]                           ` <68676e00708070508w3d9e5ab8gd26263c44bf59f0d-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-08-07 12:30                             ` Dor Laor
     [not found]                               ` <64F9B87B6B770947A9F8391472E032160D17A1C2-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-08-07 12:50                                 ` Ulrich Schreiner
2007-08-07 14:38                                 ` Dong, Eddie
     [not found]                                   ` <10EA09EFD8728347A513008B6B0DA77A01E45A1D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-07 14:50                                     ` Dor Laor
2007-08-07 20:49                             ` Luca Tettamanti
     [not found]                               ` <20070807204922.GA27976-sTXFmx6KbOnUXq0IF5SVAZ4oGUkBHcCu@public.gmane.org>
2007-08-08  6:28                                 ` Ulrich Schreiner [this message]
2007-08-07 12:25                         ` Ulrich Schreiner
2007-08-09 23:23 ` Matthew Kent
2007-08-10  0:09   ` Matthew Kent
2007-08-10  5:32     ` Ulrich Schreiner
2007-08-10  6:39     ` Ulrich Schreiner
2007-08-16  9:56   ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1186554533.3294.11.camel@vaio \
    --to=ulrich.schreiner-szdnkezivs8b1svskn2v4q@public.gmane.org \
    --cc=avik-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
    --cc=kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox