kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Zachary Amsden <zamsden@redhat.com>
To: "David S. Ahern" <daahern@cisco.com>
Cc: kvm@vger.kernel.org
Subject: Re: KVM timekeeping and TSC virtualization
Date: Mon, 23 Aug 2010 15:44:47 -1000	[thread overview]
Message-ID: <4C73240F.5010902@redhat.com> (raw)
In-Reply-To: <4C707E23.80209@cisco.com>

On 08/21/2010 03:32 PM, David S. Ahern wrote:
>
> On 08/20/10 17:24, Zachary Amsden wrote:
>    
>> On 08/20/2010 03:26 AM, David S. Ahern wrote:
>>      
>>> On 08/20/10 02:07, Zachary Amsden wrote:
>>>
>>>        
>>>> This patch set implements full TSC virtualization, with both
>>>> trapping and passthrough modes, and intelligent mode switching.
>>>> As a result, TSC will never go backwards, we are stable against
>>>> guest re-calibration attempts, VM reset, and migration.  For guests
>>>> which require it, the TSC khz can even be preserved on migration
>>>> to a new host.
>>>>
>>>> The TSC will never be trapped on UP systems unless the host TSC
>>>> actually runs faster than the guest; other conditions, including
>>>> bad hardware and changing speeds are accomodated by using catchup
>>>> mode to keep the guest passthrough TSC in line with the host clock.
>>>>
>>>>          
>>> What's the overhead of trapping TSC reads for Nehalem-type processors?
>>>
>>> gettimeofday() in guests is the biggest performance problem with KVM for
>>> me, especially for older OSes like RHEL4 which is a supported OS for
>>> another 2 years. Even with RHEL5, 32-bit, I had to force kvmclock off to
>>> get the VM to run reliably:
>>>
>>> http://article.gmane.org/gmane.comp.emulators.kvm.devel/51017/match=kvmclock+rhel5.5
>>>
>>>
>>>        
>> Correctness is the biggest timekeeping problem with KVM for me.  The
>> fact that you had to force kvmclock off is evidence of that.  Slightly
>> slower applications are fine.  Broken ones are not acceptable.
>>      
> I have been concerned with speed and correctness for a while:
>
> http://www.mail-archive.com/kvm@vger.kernel.org/msg02955.html
> http://www.mail-archive.com/kvm@vger.kernel.org/msg07231.html
>
>    
>> TSC will not be trapped with kvmclock, and the bug you hit with RHEL5
>> kvmclock has since been fixed.  As you can see, it is not a simple and
>> straightforward issue to get all the issues sorted out.
>>      
> kvmclock is for guests running RHEL5.5+some update and or some guest
> running a very recent linux kernel. There's a lot of products running on
> OS'es older than that.
>
>    
>> Also, TSC will not be trapped with UP VMs, only SMP.  If you seriously
>> believe RHEL4 will perform better as an SMP guest than several instances
>> of coordinated UP guests, you would worry about this issue.  I don't.
>> The amount of upstream scalability and performance work done since that
>> timeframe is enormous, to the point that it's entirely plausible that
>> KVM governed UP RHEL4 guests as a cluster are faster than a RHEL4 SMP host.
>>      
> Products built on RHEL3, RHEL4 or earlier RHEL5 were developed in the
> past, and performance expectations set for that version based on SMP -
> be it bare metal or virtual. You can't expect a product to be redesigned
> to run on KVM.
>    

You can expect people to measure and use the system appropriately.  
Products built on RHEL3, 4, etc will not have the inherent SMP 
scalability and therefore won't benefit as hugely from an SMP VM.

>> So the answer is - it depends.  Hardware is always getting faster, and
>> trap / exit cost is going down.   Right now, it is anywhere from a few
>> hundred to multiple thousands of cycles, depending on your hardware.  I
>> don't have an exact benchmark number I can quote, although in a couple
>> of hours, I probably will.  I'll guess 3,000 cycles.
>>
>> I agree, gettimeofday is a huge issue, for poorly written applications.
>>      
> I understand it is not a simple problem, and "poorly written
> applications" is a bit of reach don't you think? There are a number of
> workloads that depend on time stamps; that does not make them poorly
> designed.
>    

The timestamp will never be unique or completely accurate.  Therefore it 
is not necessary to issue calls to get timestamps from the kernel at an 
extreme rate.

A 64-bit counter and a timestamp fetched approximately once per second 
IS unique and accurate to a 1-second value.

On any virtualized system, unless you have dedicated virtual machines 
and a real time host operating system, you can't really guarantee better 
than 1-second time resolution to any guest.  (Pick some other resolution 
than 1-second; same argument applies).

Therefore, workloads which issue kernel calls to repeatedly get less 
than useful information are in fact, poorly designed, unless they are 
written to run on real time host environments for dedicated RT use.

>> Not that this means we won't speed it up, in fact, I have already done
>> quite a bit of work on ways to reduce the exit cost.  Let's, however,
>> get things correct before trying to make them aggressively fast.
>>
>> Zach
>>      
> I have also looked at time keeping and performance of getimeofday on a
> certain proprietary hypervisor. KVM lags severely here and workloads
> dependent on timestamps are dramatically impacted. Evaluations and
> decisions are made today based on current designs - both KVM and
> product. Severe performance deltas raise a lot of flags.
>    

This is laughably incorrect.

Gettimeofday is faster on KVM than anything else using TSC based clock 
because it passes the TSC through directly.   VMware traps the TSC and 
is actually slower.

Can you please define your "severe performance delta" and tell us your 
benchmark methodology?  I'd like to help you figure out how it is flawed.

Zach

  reply	other threads:[~2010-08-24  1:44 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-20  8:07 KVM timekeeping and TSC virtualization Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 01/35] Drop vm_init_tsc Zachary Amsden
2010-08-20 16:54   ` Glauber Costa
2010-08-20  8:07 ` [KVM timekeeping 02/35] Convert TSC writes to TSC offset writes Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 03/35] Move TSC offset writes to common code Zachary Amsden
2010-08-20 17:06   ` Glauber Costa
2010-08-24  0:51     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 04/35] Fix SVM VMCB reset Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 05/35] Move TSC reset out of vmcb_init Zachary Amsden
2010-08-20 17:08   ` Glauber Costa
2010-08-24  0:52     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 06/35] TSC reset compensation Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 07/35] Make cpu_tsc_khz updates use local CPU Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 08/35] Warn about unstable TSC Zachary Amsden
2010-08-20 17:28   ` Glauber Costa
2010-08-24  0:56     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 09/35] Unify TSC logic Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 10/35] Fix deep C-state TSC desynchronization Zachary Amsden
2010-08-20 17:30   ` Glauber Costa
2010-09-14  9:10   ` Jan Kiszka
2010-09-14  9:27     ` Avi Kivity
2010-09-14 10:40       ` Jan Kiszka
2010-09-14 10:47         ` Avi Kivity
2010-09-14 19:32         ` Zachary Amsden
2010-09-14 22:26           ` Jan Kiszka
2010-09-14 23:40             ` Zachary Amsden
2010-09-15  5:34               ` Jan Kiszka
2010-09-15  7:55                 ` Avi Kivity
2010-09-15  8:04                   ` Jan Kiszka
2010-09-15 12:29               ` Glauber Costa
2010-09-15  4:07     ` Zachary Amsden
2010-09-15  8:09       ` Jan Kiszka
2010-09-15 12:32         ` Glauber Costa
2010-09-15 18:27           ` Jan Kiszka
2010-09-17 22:09             ` Zachary Amsden
2010-09-17 22:31               ` Zachary Amsden
2010-09-18 23:53                 ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 11/35] Add helper functions for time computation Zachary Amsden
2010-08-20 17:34   ` Glauber Costa
2010-08-24  0:58     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 12/35] Robust TSC compensation Zachary Amsden
2010-08-20 17:40   ` Glauber Costa
2010-08-24  1:01     ` Zachary Amsden
2010-08-24 21:33   ` Daniel Verkamp
2010-08-20  8:07 ` [KVM timekeeping 13/35] Perform hardware_enable in CPU_STARTING callback Zachary Amsden
2010-08-27 16:32   ` Jan Kiszka
2010-08-27 23:43     ` Zachary Amsden
2010-08-30  9:10       ` Jan Kiszka
2010-08-20  8:07 ` [KVM timekeeping 14/35] Add clock sync request to hardware enable Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 15/35] Move scale_delta into common header Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 16/35] Fix a possible backwards warp of kvmclock Zachary Amsden
2011-09-02 18:34   ` Philipp Hahn
2011-09-05 14:06     ` [BUG, PATCH-2.6.32] " Philipp Hahn
2011-09-12 11:32       ` Marcelo Tosatti
2010-08-20  8:07 ` [KVM timekeeping 17/35] Implement getnsboottime kernel API Zachary Amsden
2010-08-20 18:39   ` john stultz
2010-08-20 23:37     ` Zachary Amsden
2010-08-21  0:02       ` john stultz
2010-08-21  0:52         ` Zachary Amsden
2010-08-21  1:04           ` john stultz
2010-08-21  1:22             ` Zachary Amsden
2010-08-27 18:05   ` Jan Kiszka
2010-08-27 23:48     ` Zachary Amsden
2010-08-30 18:07       ` Jan Kiszka
2010-08-20  8:07 ` [KVM timekeeping 18/35] Use getnsboottime in KVM Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 19/35] Add timekeeping documentation Zachary Amsden
2010-08-20 17:50   ` Glauber Costa
2010-08-20  8:07 ` [KVM timekeeping 20/35] Make math work for other scales Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 21/35] Track max tsc_khz Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 22/35] Track tsc last write in vcpu Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 23/35] Set initial TSC rate conversion factors Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 24/35] Timer request function renaming Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 25/35] Add clock catchup mode Zachary Amsden
2010-08-25 17:27   ` Marcelo Tosatti
2010-08-25 20:48     ` Zachary Amsden
2010-08-25 22:01       ` Marcelo Tosatti
2010-08-25 23:38         ` Glauber Costa
2010-08-26  0:17         ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 26/35] Catchup slower TSC to guest rate Zachary Amsden
2010-09-07  3:44   ` Dong, Eddie
2010-09-07 22:14     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 27/35] Add TSC trapping Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 28/35] Unstable TSC write compensation Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 29/35] TSC overrun protection Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 30/35] IOCTL for setting TSC rate Zachary Amsden
2010-08-20 17:56   ` Glauber Costa
2010-08-21 16:11     ` Arnd Bergmann
2010-08-20  8:07 ` [KVM timekeeping 31/35] Exit conditions for TSC trapping Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 32/35] Entry " Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 33/35] Indicate reliable TSC in kvmclock Zachary Amsden
2010-08-20 17:45   ` Glauber Costa
2010-08-24  1:14     ` Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 34/35] Remove dead code Zachary Amsden
2010-08-20  8:07 ` [KVM timekeeping 35/35] Add some debug stuff Zachary Amsden
2010-08-20 13:26 ` KVM timekeeping and TSC virtualization David S. Ahern
2010-08-20 23:24   ` Zachary Amsden
2010-08-22  1:32     ` David S. Ahern
2010-08-24  1:44       ` Zachary Amsden [this message]
2010-08-24  3:04         ` David S. Ahern
2010-08-24  5:47           ` Zachary Amsden
2010-08-24 13:32             ` David S. Ahern
2010-08-24 23:01               ` Zachary Amsden
2010-08-25 16:55                 ` Marcelo Tosatti
2010-08-25 20:32                   ` Zachary Amsden
2010-08-24 22:13 ` Marcelo Tosatti
2010-08-25  4:04   ` Zachary Amsden

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=4C73240F.5010902@redhat.com \
    --to=zamsden@redhat.com \
    --cc=daahern@cisco.com \
    --cc=kvm@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).