Re: [PATCH v1] rtc/mc146818rtc: improve rtc performance

2023-09-25 Thread Michael S. Tsirkin
On Mon, Jul 24, 2023 at 04:54:22PM +0800, Evanzhang wrote:
> under heavy workloads,irq_coalesced could up to 30+,
> after modification EXTERNAL_INTERRUPT reduce by 40%
> 
> before:
> Analyze events for all VMs, all VCPUs:
>  VM-EXITSamples  Samples% Time%
> 
>EPT_VIOLATION983398463.41%15.96%
>   IO_INSTRUCTION216084313.93%50.07%
>   EXTERNAL_INTERRUPT194926712.57% 0.89%
>   APIC_WRITE 767795 4.95% 0.55%
>  EOI_INDUCED 615308 3.97% 0.30%
>  HLT 130821 0.84%31.77%
> 
> after:
> Analyze events for all VMs, all VCPUs:
>  VM-EXITSamples  Samples% Time%
> 
>EPT_VIOLATION523803150.91% 6.44%
>   IO_INSTRUCTION225765821.94%54.88%
>   EXTERNAL_INTERRUPT116008611.28% 0.61%
>   APIC_WRITE 780454 7.59% 0.54%
>  EOI_INDUCED 615309 5.98% 0.28%
>  HLT 179703 1.75%36.87%
> 
> Signed-off-by: Evanzhang 



Paolo do you mind picking this old patch up?

Reviewed-by: Michael S. Tsirkin 

> ---
>  hw/rtc/mc146818rtc.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
> index c27c362..2995078 100644
> --- a/hw/rtc/mc146818rtc.c
> +++ b/hw/rtc/mc146818rtc.c
> @@ -96,8 +96,8 @@ static void rtc_coalesced_timer_update(MC146818RtcState *s)
>  if (s->irq_coalesced == 0) {
>  timer_del(s->coalesced_timer);
>  } else {
> -/* divide each RTC interval to 2 - 8 smaller intervals */
> -int c = MIN(s->irq_coalesced, 7) + 1;
> +/* divide each RTC interval to 2 - 32 smaller intervals */
> +int c = MIN(s->irq_coalesced, 31) + 1;
>  int64_t next_clock = qemu_clock_get_ns(rtc_clock) +
>  periodic_clock_to_ns(s->period / c);
>  timer_mod(s->coalesced_timer, next_clock);
> -- 
> 2.9.5




[PATCH v1] rtc/mc146818rtc: improve rtc performance

2023-07-24 Thread Evanzhang
under heavy workloads,irq_coalesced could up to 30+,
after modification EXTERNAL_INTERRUPT reduce by 40%

before:
Analyze events for all VMs, all VCPUs:
 VM-EXITSamples  Samples% Time%

   EPT_VIOLATION983398463.41%15.96%
  IO_INSTRUCTION216084313.93%50.07%
  EXTERNAL_INTERRUPT194926712.57% 0.89%
  APIC_WRITE 767795 4.95% 0.55%
 EOI_INDUCED 615308 3.97% 0.30%
 HLT 130821 0.84%31.77%

after:
Analyze events for all VMs, all VCPUs:
 VM-EXITSamples  Samples% Time%

   EPT_VIOLATION523803150.91% 6.44%
  IO_INSTRUCTION225765821.94%54.88%
  EXTERNAL_INTERRUPT116008611.28% 0.61%
  APIC_WRITE 780454 7.59% 0.54%
 EOI_INDUCED 615309 5.98% 0.28%
 HLT 179703 1.75%36.87%

Signed-off-by: Evanzhang 
---
 hw/rtc/mc146818rtc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
index c27c362..2995078 100644
--- a/hw/rtc/mc146818rtc.c
+++ b/hw/rtc/mc146818rtc.c
@@ -96,8 +96,8 @@ static void rtc_coalesced_timer_update(MC146818RtcState *s)
 if (s->irq_coalesced == 0) {
 timer_del(s->coalesced_timer);
 } else {
-/* divide each RTC interval to 2 - 8 smaller intervals */
-int c = MIN(s->irq_coalesced, 7) + 1;
+/* divide each RTC interval to 2 - 32 smaller intervals */
+int c = MIN(s->irq_coalesced, 31) + 1;
 int64_t next_clock = qemu_clock_get_ns(rtc_clock) +
 periodic_clock_to_ns(s->period / c);
 timer_mod(s->coalesced_timer, next_clock);
-- 
2.9.5




[PATCH v1] rtc/mc146818rtc: improve rtc performance

2023-07-24 Thread Evanzhang
1.hw/rtc/mc146818rtc.c:48
  open #define DEBUG_COALESCEDOD
2.create win7 4u 4g vm
3.Play 1080p video full screen
4.observe qemu log message
  DPRINTF_C("cmos: coalesced irqs decreased to %d\n",
  s->irq_coalesced);
4.perf kvm stat record -a -p $(pidof qemu-kvm) sleep 600
  perf kvm stat report --event=vmexit
5.record EXTERNAL_INTERRUPT

Evanzhang (1):
  rtc/mc146818rtc: improve rtc performance

 hw/rtc/mc146818rtc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.9.5