Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1746298ybl; Sat, 11 Jan 2020 02:00:23 -0800 (PST) X-Google-Smtp-Source: APXvYqx4uLibbVVCiy/LXa34FW+DQpMgJo9LFS/YMMSDWlSbzbvMNRn6K9OvWGD+H8Y5jSuDuzzj X-Received: by 2002:a9d:402:: with SMTP id 2mr5610616otc.357.1578736823829; Sat, 11 Jan 2020 02:00:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578736823; cv=none; d=google.com; s=arc-20160816; b=NO+kdUfd52SR5V3q0b7hrpVekzNnFbRvEF4ITCGqH+jg+UCq2QKzPnMMvJF5G7m1II H5u/MEmgJdemb22/HJwgTTJa5zTMGnDRp9nuWNjuPGC4otZ7NWoot50J1sI0xpJ6Kt9W v7ruj83upr0LR7FRtelDZP4K3WY5eCnr41nc7bJT2I8JyPVsSDSGSzi6AiqYW1Ch9p4K d6i+wuFfOb3DVF3w/H7r+mJC7U1/gpAYipzbYPBTnm0JymwD5EXGkBIVck41Up0ud+KF CaPSeWNSSAyVB2+UBhQSrSqC8S5BncOh+JUPOVKoyn8ESMHx4KN9JKhh8MJiu1iLDRYY pH0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=L0GsC3YAtjC3r///IExhr0S2+eO3z+Ck6llpYziXEIE=; b=WtAnUk7D1/5hYP8mnrZwOHxvj8iQ2cv/g0VKZBMp56Q6MFS+zT2ZnRLSCDFZ81lJp3 8mQ6R7QJDGyB+QjeAvlLLPMs8uQrGcSYfKFtpwRRiWjPWcLFBIvs+Kari/cLRRGXXvnE Q1gF0a5aCt0X5daEbqDhj7/4YzGAMM/U9zWbfZaLqwB3ZaT6DQYOW+RCkyCGFmm4P1wC 1lGDTdqF7nfMSnsBvrPL8SQjwocgvUZciLCAqujdxOH82Q5ZhxzxI5jDwCejvr3dD9bQ aRHmmqqxb4geh4bk5l/cxikpwggM2l16jCfjjA0ViYpZBGP12CxJrV6scMMe6k5TgAu1 FXoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=B5skvaDp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z24si3662465otm.101.2020.01.11.02.00.12; Sat, 11 Jan 2020 02:00:23 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=B5skvaDp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729301AbgAKJ7K (ORCPT + 99 others); Sat, 11 Jan 2020 04:59:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:53414 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729186AbgAKJ7K (ORCPT ); Sat, 11 Jan 2020 04:59:10 -0500 Received: from localhost (unknown [62.119.166.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7CC3C20848; Sat, 11 Jan 2020 09:59:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578736749; bh=IdsqEv+0P/InKarh+yeasd9RSRIkmp5CsiKgW5/w++o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=B5skvaDprJYi4uphC41rRdT7z0eqkHmNBTbpXKD9/wsk1xvA/qAbBAbOtKTzwv4Lz o6NwfXdHFDDiG2Jw/gEON8EXrdrdgNt6kXRkucEwfqDQjJRzYZ9axTJp/KpAuanc5H Hwa0r+p2M2KkWme5J0f+O5vUPVOqjtr1xodJbQDo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Richter , Vasily Gorbik , Sasha Levin Subject: [PATCH 4.9 09/91] s390/cpum_sf: Adjust sampling interval to avoid hitting sample limits Date: Sat, 11 Jan 2020 10:49:02 +0100 Message-Id: <20200111094846.358092309@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200111094844.748507863@linuxfoundation.org> References: <20200111094844.748507863@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thomas Richter [ Upstream commit 39d4a501a9ef55c57b51e3ef07fc2aeed7f30b3b ] Function perf_event_ever_overflow() and perf_event_account_interrupt() are called every time samples are processed by the interrupt handler. However function perf_event_account_interrupt() has checks to avoid being flooded with interrupts (more then 1000 samples are received per task_tick). Samples are then dropped and a PERF_RECORD_THROTTLED is added to the perf data. The perf subsystem limit calculation is: maximum sample frequency := 100000 --> 1 samples per 10 us task_tick = 10ms = 10000us --> 1000 samples per task_tick The work flow is measurement_alert() uses SDBT head and each SBDT points to 511 SDB pages, each with 126 sample entries. After processing 8 SBDs and for each valid sample calling: perf_event_overflow() perf_event_account_interrupts() there is a considerable amount of samples being dropped, especially when the sample frequency is very high and near the 100000 limit. To avoid the high amount of samples being dropped near the end of a task_tick time frame, increment the sampling interval in case of dropped events. The CPU Measurement sampling facility on the s390 supports only intervals, specifiing how many CPU cycles have to be executed before a sample is generated. Increase the interval when the samples being generated hit the task_tick limit. Signed-off-by: Thomas Richter Signed-off-by: Vasily Gorbik Signed-off-by: Sasha Levin --- arch/s390/kernel/perf_cpum_sf.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c index 02476d2333df..3b8e5a3d2d64 100644 --- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c @@ -1307,6 +1307,22 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all) if (sampl_overflow) OVERFLOW_REG(hwc) = DIV_ROUND_UP(OVERFLOW_REG(hwc) + sampl_overflow, 1 + num_sdb); + + /* Perf_event_overflow() and perf_event_account_interrupt() limit + * the interrupt rate to an upper limit. Roughly 1000 samples per + * task tick. + * Hitting this limit results in a large number + * of throttled REF_REPORT_THROTTLE entries and the samples + * are dropped. + * Slightly increase the interval to avoid hitting this limit. + */ + if (event_overflow) { + SAMPL_RATE(hwc) += DIV_ROUND_UP(SAMPL_RATE(hwc), 10); + debug_sprintf_event(sfdbg, 1, "%s: rate adjustment %ld\n", + __func__, + DIV_ROUND_UP(SAMPL_RATE(hwc), 10)); + } + if (sampl_overflow || event_overflow) debug_sprintf_event(sfdbg, 4, "hw_perf_event_update: " "overflow stats: sample=%llu event=%llu\n", -- 2.20.1