Re: [PATCH v1] rtc/mc146818rtc: improve rtc performance
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
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
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