From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B244199381 for ; Mon, 18 Nov 2024 11:41:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731930113; cv=none; b=CJwrQyvlPpgJYN/N3AusInJaYCqEvJyxjvfRI7tngut1o0N9u6QY1qciTQlzujNC9FMIe3cqs3CaEjaMj/NLFCVI+1igiBnhFlx64stWrnMPz139KQ7kxW2ztk9sY9CsiW1/dCztNHamY43DyB9yK6JJi+wkYWlXFBziOOw4t1E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731930113; c=relaxed/simple; bh=eZEjcc9v2hvll074sfZkOybDSXhhU9eWPAK5coAQjcQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pDP9M2OibMK2pwtoPBpV3iH7JnsmF4qcxWDG17z2n0Rjy7pt+r+cSzFkkVxlZMgL3SVKP+ozZQy52gj2+woLITWYCdml/PIq4sg5yRrBwYFgDDfZbPN9guW9SKFGgFAzvwJKdspiTw0gbZy5obpjeIkxsKsrjWYPYI/A4nQn0hc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=nnz0yyww; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="nnz0yyww" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4AI5fh2L008868; Mon, 18 Nov 2024 11:41:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=RXuRG5xyNCHlIqEvV SmZoIl1pS6WmakUVIg1aZ5hNUw=; b=nnz0yyww/F5A1TlwNPnSbVQy4aHMPTX2d gvu3qclm0zT0ACi0DbZ5UIGPhBbrRkqsHp8t5q/OboK9yZCWK/wNR7M2FqERM48m JiVOTrOGaznvt1+4OUQet7ZALV/BOYH8FUlpe/45B8c5xB+ZGzPvfdZETrlZu+Lx T5vQVJC6X6DSWlFwb8ci+C7hB1rLmZB+qb7vVfIEMaQhvoCwyk5a0sWth09h17p/ pTtwFQVYz/d9G7mc9KPCEHtGP45YkE2FHoRXzXgORJxxS5VzxKdXgm7tt5vVIxwZ SnFiG+W17Q9m0wP1fMDCZmeN0+tL0Gcpn5ZFiJJ484KOLsBzZUgpw== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 42xk2vskuh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Nov 2024 11:41:36 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 4AI1ox3b030682; Mon, 18 Nov 2024 11:41:35 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 42y5qsajqd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Nov 2024 11:41:35 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 4AIBfVTM50790840 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 18 Nov 2024 11:41:31 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 768B820043; Mon, 18 Nov 2024 11:41:31 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 14F5620040; Mon, 18 Nov 2024 11:41:29 +0000 (GMT) Received: from li-e8dccbcc-2adc-11b2-a85c-bc1f33b9b810.ibm.com.com (unknown [9.43.96.153]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 18 Nov 2024 11:41:28 +0000 (GMT) From: Kajol Jain To: mpe@ellerman.id.au, maddy@linux.ibm.com Cc: atrajeev@linux.vnet.ibm.com, kjain@linux.ibm.com, disgoel@linux.ibm.com, hbathini@linux.ibm.com, adubey@linux.ibm.com, gautam@linux.ibm.com, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/4] powerpc/perf: Add per-task/process monitoring to vpa_pmu driver Date: Mon, 18 Nov 2024 17:11:14 +0530 Message-ID: <20241118114114.208964-4-kjain@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20241118114114.208964-1-kjain@linux.ibm.com> References: <20241118114114.208964-1-kjain@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: uXaG0UGimiCFI3dngSYvbYvBAehKy3zV X-Proofpoint-GUID: uXaG0UGimiCFI3dngSYvbYvBAehKy3zV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-15_01,2024-10-11_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 phishscore=0 clxscore=1015 suspectscore=0 spamscore=0 impostorscore=0 bulkscore=0 mlxscore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2411180096 Enhance the vpa_pmu driver with a feature to observe context switch latency event for both per-task (tid) and per-pid (pid) option. Couple of new helper functions are added to hide the abstraction of reading the context switch latency counter from kvm_vcpu_arch struct and these helper functions are defined in the "kvm/book3s_hv.c". "PERF_ATTACH_TASK" flag is used to decide whether to read the counter values from lppaca or kvm_vcpu_arch struct. Signed-off-by: Kajol Jain Co-developed-by: Madhavan Srinivasan Signed-off-by: Madhavan Srinivasan --- arch/powerpc/include/asm/kvm_book3s_64.h | 3 ++ arch/powerpc/kvm/book3s_hv.c | 45 ++++++++++++++++++++++++ arch/powerpc/perf/vpa-pmu.c | 15 ++++++-- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h index f620e3126d68..b936e174eefd 100644 --- a/arch/powerpc/include/asm/kvm_book3s_64.h +++ b/arch/powerpc/include/asm/kvm_book3s_64.h @@ -691,6 +691,9 @@ void kvmhv_set_l2_counters_status(int cpu, bool status); u64 kvmhv_get_l1_to_l2_cs_time(void); u64 kvmhv_get_l2_to_l1_cs_time(void); u64 kvmhv_get_l2_runtime_agg(void); +u64 kvmhv_get_l1_to_l2_cs_time_vcpu(void); +u64 kvmhv_get_l2_to_l1_cs_time_vcpu(void); +u64 kvmhv_get_l2_runtime_agg_vcpu(void); #endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */ diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 4284437fedeb..ddc380982233 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -4214,6 +4214,51 @@ u64 kvmhv_get_l2_runtime_agg(void) } EXPORT_SYMBOL(kvmhv_get_l2_runtime_agg); +u64 kvmhv_get_l1_to_l2_cs_time_vcpu(void) +{ + struct kvm_vcpu *vcpu; + struct kvm_vcpu_arch *arch; + + vcpu = local_paca->kvm_hstate.kvm_vcpu; + if (vcpu) { + arch = &vcpu->arch; + return arch->l1_to_l2_cs; + } else { + return 0; + } +} +EXPORT_SYMBOL(kvmhv_get_l1_to_l2_cs_time_vcpu); + +u64 kvmhv_get_l2_to_l1_cs_time_vcpu(void) +{ + struct kvm_vcpu *vcpu; + struct kvm_vcpu_arch *arch; + + vcpu = local_paca->kvm_hstate.kvm_vcpu; + if (vcpu) { + arch = &vcpu->arch; + return arch->l2_to_l1_cs; + } else { + return 0; + } +} +EXPORT_SYMBOL(kvmhv_get_l2_to_l1_cs_time_vcpu); + +u64 kvmhv_get_l2_runtime_agg_vcpu(void) +{ + struct kvm_vcpu *vcpu; + struct kvm_vcpu_arch *arch; + + vcpu = local_paca->kvm_hstate.kvm_vcpu; + if (vcpu) { + arch = &vcpu->arch; + return arch->l2_runtime_agg; + } else { + return 0; + } +} +EXPORT_SYMBOL(kvmhv_get_l2_runtime_agg_vcpu); + #else int kvmhv_get_l2_counters_status(void) { diff --git a/arch/powerpc/perf/vpa-pmu.c b/arch/powerpc/perf/vpa-pmu.c index 2c785eee2f71..601de245392c 100644 --- a/arch/powerpc/perf/vpa-pmu.c +++ b/arch/powerpc/perf/vpa-pmu.c @@ -97,13 +97,22 @@ static unsigned long get_counter_data(struct perf_event *event) switch (config) { case L1_TO_L2_CS_LAT: - data = kvmhv_get_l1_to_l2_cs_time(); + if (event->attach_state & PERF_ATTACH_TASK) + data = kvmhv_get_l1_to_l2_cs_time_vcpu(); + else + data = kvmhv_get_l1_to_l2_cs_time(); break; case L2_TO_L1_CS_LAT: - data = kvmhv_get_l2_to_l1_cs_time(); + if (event->attach_state & PERF_ATTACH_TASK) + data = kvmhv_get_l2_to_l1_cs_time_vcpu(); + else + data = kvmhv_get_l2_to_l1_cs_time(); break; case L2_RUNTIME_AGG: - data = kvmhv_get_l2_runtime_agg(); + if (event->attach_state & PERF_ATTACH_TASK) + data = kvmhv_get_l2_runtime_agg_vcpu(); + else + data = kvmhv_get_l2_runtime_agg(); break; default: data = 0; -- 2.43.5