RE: [question] lots of interrupts injected to vm when pressing some key w/o releasing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>>>>>> I tested win-server-2008 with "-cpu 
>>>>>> core2duo,hv_spinlocks=0xffff,hv_relaxed,hv_time",
>>>>>> this problem still happened, about 200,000 vmexits per-second, 
>>>>>> bringing very bad experience, just like being stuck.
>>>>> 
>>>>> Please upload a full trace somewhere, or at least the "perf report" output.
>>>>> 
>>>> 
>>>> And, if I remove the commit of 0bc830b0, the problem disappeared.
>>> 
>>> Please send the full trace file.  If you compress it, it should be small.
>>> 
>> See the attach 1, please.
>> 
>>> Paolo
>
>Can you try the follow draft patch to see whether it solve your problem? This patch is based on commit 0bc830b0.
>
After applying this patch, VM got stuck with black-screen at boot stage,
# trace-cmd report:
version = 6
CPU 0 is empty
CPU 1 is empty
CPU 2 is empty
CPU 3 is empty
CPU 5 is empty
CPU 7 is empty
cpus=8
             kvm-1266  [004] 14399.834397: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [004] 14399.834403: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [004] 14399.834411: kvm_apic_accept_irq:  apicid 0 vec 177 (LowPrio|level)
             kvm-1266  [004] 14399.834412: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [004] 14402.180013: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [004] 14402.180019: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [004] 14402.180028: kvm_apic_accept_irq:  apicid 1 vec 177 (LowPrio|level)
             kvm-1266  [004] 14402.180029: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [004] 14404.525627: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [004] 14404.525634: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [004] 14404.525641: kvm_apic_accept_irq:  apicid 0 vec 177 (LowPrio|level)
             kvm-1266  [004] 14404.525642: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [004] 14406.871238: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [004] 14406.871245: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [004] 14406.871254: kvm_apic_accept_irq:  apicid 1 vec 177 (LowPrio|level)
             kvm-1266  [004] 14406.871256: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [006] 14409.216849: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [006] 14409.216855: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [006] 14409.216862: kvm_apic_accept_irq:  apicid 0 vec 177 (LowPrio|level)
             kvm-1266  [006] 14409.216863: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [006] 14411.562475: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [006] 14411.562481: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [006] 14411.562489: kvm_apic_accept_irq:  apicid 1 vec 177 (LowPrio|level)
             kvm-1266  [006] 14411.562491: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)
             kvm-1266  [004] 14413.908074: kvm_set_irq:          gsi 9 level 1 source 0
             kvm-1266  [004] 14413.908080: kvm_pic_set_irq:      chip 1 pin 1 (edge|masked)
             kvm-1266  [004] 14413.908088: kvm_apic_accept_irq:  apicid 0 vec 177 (LowPrio|level)
             kvm-1266  [004] 14413.908089: kvm_ioapic_set_irq:   pin 9 dst 3 vec=177 (LowPrio|logical|level)

Thanks,
Zhang Haoyu

>diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
>index 25e16a6..8f4e211 100644
>--- a/virt/kvm/ioapic.c
>+++ b/virt/kvm/ioapic.c
>@@ -305,6 +305,7 @@ static int ioapic_service(struct kvm_ioapic *ioapic, int irq, bool line_status)
>        return ret;
> }
> 
>+static int irq_status[256];
> int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
>                       int level, bool line_status)
> {
>@@ -312,10 +313,13 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
>        u32 mask = 1 << irq;
>        union kvm_ioapic_redirect_entry entry;
>        int ret, irq_level;
>+       int old_irq;
> 
>        BUG_ON(irq < 0 || irq >= IOAPIC_NUM_PINS);
> 
>        spin_lock(&ioapic->lock);
>+       old_irq = irq_status[irq];
>+       irq_status[irq] = level;
>        old_irr = ioapic->irr;
>        irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq],
>                                         irq_source_id, level);
>@@ -332,6 +336,10 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
>                        goto out;
>                }
>                ioapic->irr |= mask;
>+               if (edge && old_irq == irq_status[irq] && old_irq) {
>+                       ret = 0;
>+                       goto out;
>+               }
>                if ((edge && old_irr != ioapic->irr) ||
>                    (!edge && !entry.fields.remote_irr))
>                        ret = ioapic_service(ioapic, irq, line_status);
>
>Best regards,
>Yang

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux