From patchwork Tue May 24 13:56:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Douglas Goldstein X-Patchwork-Id: 9133727 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E190E6075E for ; Tue, 24 May 2016 13:59:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D3D6328233 for ; Tue, 24 May 2016 13:59:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C862628258; Tue, 24 May 2016 13:59:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 80E2D28233 for ; Tue, 24 May 2016 13:59:23 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b5CpU-00067Y-4t; Tue, 24 May 2016 13:57:04 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b5CpS-000670-RR for xen-devel@lists.xen.org; Tue, 24 May 2016 13:57:03 +0000 Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id 37/8E-02402-EAD54475; Tue, 24 May 2016 13:57:02 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrBIsWRWlGSWpSXmKPExsVyMXThQd21sS7 hBv9fSFos+biYxYHR4+ju30wBjFGsmXlJ+RUJrBnTOn0KTgVUzJo+m62B8ZVDFyMXh5DAREaJ TTtXMHUxcnKwCMxjlphzSAkkISHQzypxaeYGsISEQIzEtA2zoexqiUtL5jKC2EICChK/Jxxig rCnMEkc+OAGYrMJaEg8+TWDDcQWEZCWuPb5MiPIUGaBZ0wSrw93MYMkhAUcJX6uX8ECsVlVYu qT+WBDeYHiqzZdBhrKAbRMTmLBex8Qk1PASWLbN3mIVY4Sj+cfYZ7AKLCAkWEVo3pxalFZapG uoV5SUWZ6RkluYmaOrqGBqV5uanFxYnpqTmJSsV5yfu4mRmBI1TMwMO5gbOp1PsQoycGkJMpr oOUSLsSXlJ9SmZFYnBFfVJqTWnyIUYaDQ0mCtyAGKCdYlJqeWpGWmQMMbpi0BAePkgjvVZA0b 3FBYm5xZjpE6hSjJceW39fWMnF82ngHSG6bem8tkxBLXn5eqpQ4xDwBkIaM0jy4cbAIvMQoKy XMy8jAwCDEU5BalJtZgir/ilGcg1FJmHc5yBSezLwSuK2vgA5iAjrI/4szyEEliQgpqQZGpQn BVx62z9iw9vDadLMHxvPZK+3e6O9jWnlo4YRfyy7WJvEttg415VaaUD/hfOlS7coVTRfEfzKp BLeXTbnurvc86TvHivP7ig+vvs6sq/e0N24yt4h4MOfD1d2/DzqvrvetrEycWnjKLt7K58Pyh huTwpj5FR72vSxxeC4xpfroPN8V7YsElFiKMxINtZiLihMBed+UNbsCAAA= X-Env-Sender: cardoe@cardoe.com X-Msg-Ref: server-13.tower-206.messagelabs.com!1464098220!37416917!1 X-Originating-IP: [209.85.161.193] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 8.34; banners=-,-,- X-VirusChecked: Checked Received: (qmail 35415 invoked from network); 24 May 2016 13:57:01 -0000 Received: from mail-yw0-f193.google.com (HELO mail-yw0-f193.google.com) (209.85.161.193) by server-13.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 24 May 2016 13:57:01 -0000 Received: by mail-yw0-f193.google.com with SMTP id j74so2334561ywg.1 for ; Tue, 24 May 2016 06:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cardoe.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AXAOUrJj+I8oiLyJd7B3j7+cJpwbZNsTtwOGJEMRm3U=; b=GyDrlzKnJIWkFqaLhX6kryc2tZk/9gisVD3cmbHlkEW1J9aMrxCYYWUyDSSUoJba/J we9w72384pMN2Mf0fQkCOC1wY6ZDedYrn19k9MLQzekKk2x2/0PJqyn3vqEKUFAu2Gwu lR1b41ndmfcTAzOW99IgU43D9tdVcZjVPrDVQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AXAOUrJj+I8oiLyJd7B3j7+cJpwbZNsTtwOGJEMRm3U=; b=ECdh9CRbCf4cFZwN1JgUtU+J+w+LaQhZDWUk7HiTcuDPWYs8SJaI7Xon8iek5F1u1D vZ7VSvP8r32wOho5kLmXqpl3sJDNjDnpbq81LNW2OKvX8I9ayIuZQneWjzFzCQlT+G23 A9k0ggiJm7KGD06ckxdXs4jtJ/DOmaea1gRbneCTHh890qz94EYxUSd9NXo5u6tFK5aD vW2p8mwx5gcDi60bsKk8jcdf3QVt0oUabSsoFX89RCZaFXJ48P9Pwd74U2zRgZ7pwiqR Gc5ST/IDczD79Fo9DpDYBoxQPYOSoD5OHY7isogSVQKc69ysXcdJom4J78ZuJW+g8/8z NaUQ== X-Gm-Message-State: ALyK8tKxoVqVDsRZM07LQufdEzVz3Bws2+RB0hM9pMvJUe/piG1yZkCLK5Lep0+Yy+YM/g== X-Received: by 10.13.245.131 with SMTP id e125mr2632706ywf.175.1464098219890; Tue, 24 May 2016 06:56:59 -0700 (PDT) Received: from swanson.lan (c-68-46-196-185.hsd1.al.comcast.net. [68.46.196.185]) by smtp.gmail.com with ESMTPSA id i67sm22199641ywf.34.2016.05.24.06.56.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 May 2016 06:56:58 -0700 (PDT) From: Doug Goldstein To: xen-devel@lists.xen.org Date: Tue, 24 May 2016 08:56:38 -0500 Message-Id: <1464098199-19851-6-git-send-email-cardoe@cardoe.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1464098199-19851-1-git-send-email-cardoe@cardoe.com> References: <1464098199-19851-1-git-send-email-cardoe@cardoe.com> Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Doug Goldstein , Tim Deegan , Jan Beulich , Ian Jackson Subject: [Xen-devel] [PATCH v5 5/6] build: convert perfc{, _arrays} to Kconfig X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Convert the 'perfc' and 'perfc_arrays' options to Kconfig as CONFIG_PERF_COUNTERS and CONFIG_PERF_ARRAYS. Signed-off-by: Doug Goldstein Reviewed-by: Andrew Cooper Reviewed-by: Konrad Rzeszutek Wilk Reviewed-by: Jan Beulich --- CC: Andrew Cooper CC: George Dunlap CC: Ian Jackson CC: Jan Beulich CC: Konrad Rzeszutek Wilk CC: Stefano Stabellini CC: Tim Deegan CC: Wei Liu --- INSTALL | 2 -- xen/Kconfig.debug | 15 +++++++++++++++ xen/Rules.mk | 12 +++--------- xen/arch/x86/hvm/hvm.c | 2 +- xen/arch/x86/time.c | 4 ++-- xen/arch/x86/x86_64/asm-offsets.c | 2 +- xen/common/Makefile | 2 +- xen/common/keyhandler.c | 2 +- xen/common/perfc.c | 2 +- xen/common/sysctl.c | 2 +- xen/include/asm-x86/asm_defns.h | 2 +- xen/include/asm-x86/domain.h | 2 +- xen/include/xen/perfc.h | 8 ++++---- xen/include/xen/sched.h | 2 +- 14 files changed, 33 insertions(+), 26 deletions(-) diff --git a/INSTALL b/INSTALL index f55d42c..623887d 100644 --- a/INSTALL +++ b/INSTALL @@ -227,8 +227,6 @@ VGABIOS_REL_DATE="dd Mon yyyy" The following variables can be used to tweak some aspects of the hypervisor build. -perfc=y -perfc_arrays=y lock_profile=y lto=y diff --git a/xen/Kconfig.debug b/xen/Kconfig.debug index 664a67b..56d2c79 100644 --- a/xen/Kconfig.debug +++ b/xen/Kconfig.debug @@ -28,6 +28,21 @@ config FRAME_POINTER maybe slower, but it gives very useful debugging information in case of any Xen bugs. +config PERF_COUNTERS + bool "Performance Counters" + ---help--- + Enables software performance counters that allows you to analyze + bottlenecks in the system. To access this data you can use serial + console to print (and reset) using 'p' and 'P' respectively, or + the 'xenperf' tool. + +config PERF_ARRAYS + bool "Performance Counter Array Histograms" + depends on PERF_COUNTERS + ---help--- + Enables software performance counter array histograms. + + config VERBOSE_DEBUG bool "Verbose debug messages" default DEBUG diff --git a/xen/Rules.mk b/xen/Rules.mk index 418fc74..209c91a 100644 --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -3,8 +3,6 @@ # If you change any of these configuration options then you must # 'make clean' before rebuilding. # -perfc ?= n -perfc_arrays ?= n lock_profile ?= n lto ?= n @@ -12,11 +10,6 @@ lto ?= n include $(XEN_ROOT)/Config.mk -# Hardcoded configuration implications and dependencies. -# Do this is a neater way if it becomes unwieldy. -ifeq ($(perfc_arrays),y) -perfc := y -endif ifneq ($(origin crash_debug),undefined) $(error "You must use 'make menuconfig' to enable/disable crash_debug now.") @@ -30,6 +23,9 @@ endif ifneq ($(origin kexec),undefined) $(error "You must use 'make menuconfig' to enable/disable kexec now.") endif +ifneq ($(origin perfc),undefined) +$(error "You must use 'make menuconfig' to enable/disable perfc now.") +endif ifneq ($(origin verbose),undefined) $(error "You must use 'make menuconfig' to enable/disable verbose now.") endif @@ -60,8 +56,6 @@ ifneq ($(clang),y) CFLAGS += -Wa,--strip-local-absolute endif -CFLAGS-$(perfc) += -DPERF_COUNTERS -CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS CFLAGS-$(lock_profile) += -DLOCK_PROFILE CFLAGS-$(CONFIG_FRAME_POINTER) += -fno-omit-frame-pointer diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 5040a5c..a4c20cd 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3536,7 +3536,7 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx, static uint64_t _hvm_rdtsc_intercept(void) { struct vcpu *curr = current; -#if !defined(NDEBUG) || defined(PERF_COUNTERS) +#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS) struct domain *currd = curr->domain; if ( currd->arch.vtsc ) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 6438b47..3928a5f 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1688,7 +1688,7 @@ void pv_soft_rdtsc(struct vcpu *v, struct cpu_user_regs *regs, int rdtscp) spin_lock(&d->arch.vtsc_lock); -#if !defined(NDEBUG) || defined(PERF_COUNTERS) +#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS) if ( guest_kernel_mode(v, regs) ) d->arch.vtsc_kerncount++; else @@ -1959,7 +1959,7 @@ static void dump_softtsc(unsigned char key) printk(",khz=%"PRIu32, d->arch.tsc_khz); if ( d->arch.incarnation ) printk(",inc=%"PRIu32, d->arch.incarnation); -#if !defined(NDEBUG) || defined(PERF_COUNTERS) +#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS) if ( !(d->arch.vtsc_kerncount | d->arch.vtsc_usercount) ) printk("\n"); else diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index a3ae7a4..05d2b85 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -152,7 +152,7 @@ void __dummy__(void) OFFSET(TRAPBOUNCE_eip, struct trap_bounce, eip); BLANK(); -#if PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS DEFINE(ASM_PERFC_hypercalls, PERFC_hypercalls); DEFINE(ASM_PERFC_exceptions, PERFC_exceptions); BLANK(); diff --git a/xen/common/Makefile b/xen/common/Makefile index a98bcc2..3baddb4 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -26,6 +26,7 @@ obj-y += multicall.o obj-y += notifier.o obj-y += page_alloc.o obj-$(CONFIG_HAS_PDX) += pdx.o +obj-$(CONFIG_PERF_COUNTERS) += perfc.o obj-y += preempt.o obj-y += random.o obj-y += rangeset.o @@ -64,7 +65,6 @@ obj-$(CONFIG_XSPLICE) += xsplice_elf.o obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma unlzo unlz4 earlycpio,$(n).init.o) -obj-$(perfc) += perfc.o obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o xlat.o) diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c index 4ff90f6..65b70ce 100644 --- a/xen/common/keyhandler.c +++ b/xen/common/keyhandler.c @@ -59,7 +59,7 @@ static struct keyhandler { IRQ_KEYHANDLER('%', do_debug_key, "trap to xendbg", 0), IRQ_KEYHANDLER('*', run_all_keyhandlers, "print all diagnostics", 0), -#ifdef PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS KEYHANDLER('p', perfc_printall, "print performance counters", 1), KEYHANDLER('P', perfc_reset, "reset performance counters", 0), #endif diff --git a/xen/common/perfc.c b/xen/common/perfc.c index 9f078e1..3da4c96 100644 --- a/xen/common/perfc.c +++ b/xen/common/perfc.c @@ -78,7 +78,7 @@ void perfc_printall(unsigned char key) printk("TOTAL[%12Lu]", sum); if (sum) { -#ifdef PERF_ARRAYS +#ifdef CONFIG_PERF_ARRAYS for ( k = 0; k < perfc_info[i].nr_elements; k++ ) { sum = 0; diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 9a4cc1f..11bef0e 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -115,7 +115,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) } break; -#ifdef PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS case XEN_SYSCTL_perfc_op: ret = perfc_control(&op->u.perfc_op); break; diff --git a/xen/include/asm-x86/asm_defns.h b/xen/include/asm-x86/asm_defns.h index 279d702..e36e78f 100644 --- a/xen/include/asm-x86/asm_defns.h +++ b/xen/include/asm-x86/asm_defns.h @@ -385,7 +385,7 @@ static always_inline void stac(void) #endif -#ifdef PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS #define PERFC_INCR(_name,_idx,_cur) \ pushq _cur; \ movslq VCPU_processor(_cur),_cur; \ diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 165e533..783fa4f 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -377,7 +377,7 @@ struct arch_domain hardware TSC scaling cases */ uint32_t incarnation; /* incremented every restore or live migrate (possibly other cases in the future */ -#if !defined(NDEBUG) || defined(PERF_COUNTERS) +#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS) uint64_t vtsc_kerncount; uint64_t vtsc_usercount; #endif diff --git a/xen/include/xen/perfc.h b/xen/include/xen/perfc.h index 6cb0cd1..6846e71 100644 --- a/xen/include/xen/perfc.h +++ b/xen/include/xen/perfc.h @@ -1,7 +1,7 @@ #ifndef __XEN_PERFC_H__ #define __XEN_PERFC_H__ -#ifdef PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS #include #include @@ -76,7 +76,7 @@ DECLARE_PER_CPU(perfc_t[NUM_PERFCOUNTERS], perfcounters); * Histogram: special treatment for 0 and 1 count. After that equally spaced * with last bucket taking the rest. */ -#ifdef PERF_ARRAYS +#ifdef CONFIG_PERF_ARRAYS #define perfc_incr_histo(x,v) \ do { \ if ( (v) == 0 ) \ @@ -100,7 +100,7 @@ extern void perfc_printall(unsigned char key); extern void perfc_reset(unsigned char key); -#else /* PERF_COUNTERS */ +#else /* CONFIG_PERF_COUNTERS */ #define perfc_value(x) (0) #define perfc_valuea(x,y) (0) @@ -114,6 +114,6 @@ extern void perfc_reset(unsigned char key); #define perfc_adda(x,y,z) ((void)0) #define perfc_incr_histo(x,y,z) ((void)0) -#endif /* PERF_COUNTERS */ +#endif /* CONFIG_PERF_COUNTERS */ #endif /* __XEN_PERFC_H__ */ diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index fe15e9c..46c82e7 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -39,7 +39,7 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_runstate_info_compat_t); * Enable and ease the use of scheduling related performance counters. * */ -#ifdef PERF_COUNTERS +#ifdef CONFIG_PERF_COUNTERS #define SCHED_STATS #endif