From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54239) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UaoIT-0001C1-DV for qemu-devel@nongnu.org; Fri, 10 May 2013 10:27:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UaoIR-0004lo-QT for qemu-devel@nongnu.org; Fri, 10 May 2013 10:27:45 -0400 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:46651) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UaoIR-0004lH-8N for qemu-devel@nongnu.org; Fri, 10 May 2013 10:27:43 -0400 Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sat, 11 May 2013 00:19:28 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 7CE892BB004F for ; Sat, 11 May 2013 00:27:35 +1000 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4AEDVVO23724102 for ; Sat, 11 May 2013 00:13:32 +1000 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4AERYno006708 for ; Sat, 11 May 2013 00:27:34 +1000 From: Anthony Liguori In-Reply-To: <518CF130.2030402@redhat.com> References: <1368188203-3407-1-git-send-email-pbonzini@redhat.com> <874nebdm4r.fsf@codemonkey.ws> <518CF130.2030402@redhat.com> Date: Fri, 10 May 2013 09:27:28 -0500 Message-ID: <874neazz8v.fsf@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH for-1.5 0/9] Disable expensive QOM cast debugging for official releases List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: mst@redhat.com, qemu-devel@nongnu.org, Aurelien Jarno , Andreas Faerber Paolo Bonzini writes: > Il 10/05/2013 15:01, Anthony Liguori ha scritto: >> Paolo Bonzini writes: >> >>> Cast debugging can have a substantial cost (20% or more, measured by >>> Aurelien on qemu-system-ppc64). >> >> [Needs citation] > > Sure: http://permalink.gmane.org/gmane.comp.emulators.qemu/210830 > > 49,73% perf-10672.map [.] 0x7f7853ab4e0f > 13,23% qemu-system-ppc64 [.] cpu_ppc_exec > 13,16% libglib-2.0.so.0.3200.4 [.] g_hash_table_lookup > 8,18% libglib-2.0.so.0.3200.4 [.] g_str_hash > 2,47% qemu-system-ppc64 [.] object_class_dynamic_cast > 1,97% qemu-system-ppc64 [.] type_is_ancestor > 1,05% libglib-2.0.so.0.3200.4 [.] g_str_equal > > That's ~27%. > >>> Instead of adding special-cased "fast >>> casts" in the hot paths, we can just disable it in releases. At the >>> same time, add tracing facilities that simplify the analysys of those >>> problems that cast debugging would reveal. >> >> I'd prefer not to disable but instead focus on improving performance. > > For 1.5? This is a regression in 1.5 due to more and more usage of > foo_env_on_cpu. If this is a regression, then we should be able to show: 1) workload XYZ gets X in 1.4 and Y in 1.5 2) applying your series demonstrates that we go back to X performance I'm not convinced this is a true set of statements. 13% of time spent doing casts could simply suggest that the vcpu is largely idle and has nothing better to do. At any rate, given (1), we can at least try some other less invasive approachs to fixing the problem. Just removing the unnecessary cast might end up doing it. Regards, Anthony Liguori > > Paolo > >> I suspect any performance overhead is resolving the type string to >> typeimpl. One work around is to have a dynamic cast that takes a >> typeimpl and then use a function that returns a static similar to how >> glib works. >> >> If you've got a reproducible case where the overhead is high, it should >> be easy to check. >> >> Regards, >> >> Anthony Liguori >> >>> >>> At least patches 1-7 are for 1.5. >>> >>> Paolo Bonzini (9): >>> qom: improve documentation of cast functions >>> qom: allow casting of a NULL class >>> qom: add a fast path to object_class_dynamic_cast >>> qom: pass file/line/function to asserting casts >>> qom: trace asserting casts >>> qom: allow turning cast debugging off >>> build: disable QOM cast debugging for official releases >>> qom: simplify object_class_dynamic_cast, part 1 >>> qom: simplify object_class_dynamic_cast, part 2 >>> >>> configure | 20 ++++++++------ >>> include/qom/object.h | 40 ++++++++++++++++++++++----- >>> qom/object.c | 77 ++++++++++++++++++++++++++++++++++------------------ >>> trace-events | 3 ++ >>> 4 files changed, 99 insertions(+), 41 deletions(-) >>> >>> -- >>> 1.8.1.4 >>