From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] KVM: avoid taking ioapic mutex for non-ioapic EOIs Date: Mon, 28 Dec 2009 22:47:20 +0200 Message-ID: <4B391958.8090602@redhat.com> References: <1262002110-4240-1-git-send-email-avi@redhat.com> <20091228203757.GA20508@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Gleb Natapov , kvm@vger.kernel.org To: Marcelo Tosatti Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33772 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751330AbZL1UrY (ORCPT ); Mon, 28 Dec 2009 15:47:24 -0500 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBSKlOGh023255 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 28 Dec 2009 15:47:24 -0500 In-Reply-To: <20091228203757.GA20508@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: On 12/28/2009 10:37 PM, Marcelo Tosatti wrote: > On Mon, Dec 28, 2009 at 02:08:30PM +0200, Avi Kivity wrote: > >> When the guest acknowledges an interrupt, it sends an EOI message to the local >> apic, which broadcasts it to the ioapic. To handle the EOI, we need to take >> the ioapic mutex. >> >> On large guests, this causes a lot of contention on this mutex. Since large >> guests usually don't route interrupts via the ioapic (they use msi instead), >> this is completely unnecessary. >> >> Avoid taking the mutex by introducing a handled_vectors bitmap. Before taking >> the mutex, check if the ioapic was actually responsible for the acked vector. >> If not, we can return early. >> > Can't you skip IOAPIC EOI for edge triggered interrupts (in the LAPIC > code), instead? > That's a lot cleaner, yes. Indeed there's the TMR which holds this info. Gleb suggested doing this in the local apic but we didn't think of using the TMR. There's a small race there - the TMR is set after the IRR, so the interrupt can be injected and acked before the TMR is updated, but that can be fixed by switching the order. But what about kvm_notify_acked_irq() in __kvm_ioapic_update_eoi()? -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.