From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751190AbdE3PxR (ORCPT ); Tue, 30 May 2017 11:53:17 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:59872 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750796AbdE3PxO (ORCPT ); Tue, 30 May 2017 11:53:14 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=fb.com; Subject: Re: [PATCH v2 net-next 1/3] perf, bpf: Add BPF support to all perf_event types To: Peter Zijlstra References: <20170526055549.557818-1-ast@fb.com> <20170526055549.557818-2-ast@fb.com> <20170529091253.lopsd33qticsbgii@hirez.programming.kicks-ass.net> <20170529093918.xmbijgozjrfi22ru@hirez.programming.kicks-ass.net> CC: "David S . Miller" , Brendan Gregg , Daniel Borkmann , Teng Qin , , From: Alexei Starovoitov Message-ID: Date: Tue, 30 May 2017 08:52:14 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170529093918.xmbijgozjrfi22ru@hirez.programming.kicks-ass.net> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [2620:10d:c090:200::1:1b5d] X-ClientProxiedBy: DM5PR2201CA0052.namprd22.prod.outlook.com (10.174.180.169) To BL2PR15MB0961.namprd15.prod.outlook.com (10.167.116.23) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL2PR15MB0961: X-MS-Office365-Filtering-Correlation-Id: 7e1170f0-2ad2-4e9b-9a5a-08d4a773dbcf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:BL2PR15MB0961; X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB0961;3:UK+AdRj0Nwazi4TkjcgxOm3t+zZa1J0+mXjX4lCHlJTVwNdl1pUu83yXtI5/xfWUPdxfL/M16/aHdvmr2b9A4skL7kk5g7DlRToLGijrLCCVAqArt8zc0rvANXQGK807CeoPCw7fDSAeSWtaNE5MYXd329lqQ63nmgH3zb42ZKWyxh3Lwvq9Mynv4CL+HrQH0WfZ5IDDA/kLlb3VlilcExg+FweeSoiKlqnRLLnMVHatGZaqMXHr1xct+az6HdCPglTj9IgcoAWcsuIjK2GJ/8P5wLHcOW45iDqjs3HSr1gn03eN/D8uZoFiObzjMrPCMD+h8tZMf2APSowJ+gaVZw==;25:k8uaOVGy2Hvr36LKSml6KsxQR4Rg76yM9YAWHm4OgNPHiDdusL0UPEzgfcP5htCre1iE2e3/FHeARBEOAsmpIHF0/cJn2R/6s/qqFi8rSrOuBW4w6LZdBm/g9j+1t2LESx92LR7aUjuD1MPWtUsok8RKr1+/yJEDCVFvDNDfsEetx3RH0JnuJ+5eI20gMvx3A3yK4hkDVrn/+DUvYHVFnSi0mc8cRmKffc27Pehb+BpPS+kVs/26O4y0b/SsmF4TNe1/qUk0NeEupNJE8NXaKceBogrLrjLd2FeFHffuKcDhSoKck1uUqz/ZclS9YuOqcPGK0bm/SDTUJHjJgcM8S5PBD0xw2islfP3eq2IjFUTbn5XZdvllhMhJ6EE5fLML+FaYm93xv4rqS49UIbm2LWOlhxCCwouzxkbfyF2mOoNEJ1AI6qsr1na5++ekDvG0UvffMowPNt52E6hLfkNSdmnO3k9QhzYG6lJxCVN3sfk= X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB0961;31:HemCX338jdxvjq2lFdNwkkluEKKMmd0arIo748pO8P0EQch+u/0C+qgxVuTtIOPhXhRK9CHJ+affbZojxmpGQWNSN8p5QSxUQ9bKQCPfiqtFqhSauehaN9lTtu5kstxN1dw80O0GIEYhQd2dXitH+wkPFCEp9IfRz5qVcLO2LtrpJUE9BCXYVs9GsldMhKrVIUNB30wxlPWFsqXwIAeawcRv7vsOkJcQSpg9DYdvyjs=;20:827ibAuVtJjoeyVqqo7JobZvVyIyhjUKp8ZR8IBt7DClDrZmefNom4dw9ZpICJMjoWN/TOZz0EeaKYIItZ9063ciHINmcszx0grDa/+sFM8yPqAjceGFBawVazFXPtQmiakLmu0WkbNJaKl+kukHCu4jejWk46VXhOxbXutj1kJEopqaQUTde/NK8wV82k9vgqSnXMoPDOPzQJcRvSJIadiQjgPofIuyVodkKFNblf2/qiWPXnnOgydFMv+aW9KCP8eyK6tyAKCFMzUQgVpOFH4JtMXVTbgnru7AFEESheLSecPL9Dvyvh5TH9zWtPI3vjr+IYwKvoBtmrPwAoBiwidLTrv9GITL7jhDvjCXQ4eooCUf2LmvQ7HZdN1D2nXQ5RMNf37+7qInJkVfEzly+++GU9CVkBsvKrMASeOcI8nvsLlN9a742X7gj9VYN0vjDc8Kf74xzoASW1SJMz2fB8MNDx7xKJM/aKLllpB5mrGU67mKHHsgi+yw5WQgGyBR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703073)(100105400095)(6041248)(20161123558100)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704073)(100105200095)(100000705073)(100105500095);SRVR:BL2PR15MB0961;BCL:0;PCL:0;RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(100000804073)(100110200095)(100000805073)(100110500095);SRVR:BL2PR15MB0961; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BL2PR15MB0961;4:4Dw8ALGlkvrFKZ273jRbnOIW7vV9Y4+7mvjdVf?= =?Windows-1252?Q?ViIkOlwHjwLeavq5BMVpM+P8wKqU5wVZWPXEhwt8m6lkDoS1cZqTIdlA?= =?Windows-1252?Q?FfD29ilk0j2xBygKWW3YBoPE9H7w3PuJiSFxtfpJ4lHjVsvGRumnflIj?= =?Windows-1252?Q?BQDZC05FMSupulqhjYsvo63yt2ueSqf8tEHDd9pErNvG5B68jtth4Rju?= =?Windows-1252?Q?Dg4D/Ic58KAyGq208huSn5h76HkaBjfJAUve1jcCj7QEyntt/b8NPOVL?= =?Windows-1252?Q?nSgDe+uR8Y6eQNCn5wRZ+RBroPyADt8rrEOdS6fJrrW8UEv6xd/llsNK?= =?Windows-1252?Q?cbn154f8Y5kRopmVtmfbNghIYHrb2pS3gU+GnOD/OZ9SXBRWvaIq55+Z?= =?Windows-1252?Q?2sv14ru5v4OTiiSAv61Du8WsrpxJ7OZPcUIEZrpDWHQBAWuTxYtTFWjF?= =?Windows-1252?Q?bFmPFzabQTbXruZXKwsBVicdt1y6Z2mD7S6917+Tbbxn0IKluX4XuKqb?= =?Windows-1252?Q?MlyP1rdttgzulJAiOEvm2lpnWWUWO7WSaCehO7uPjmtBDbrcVtsBU03C?= =?Windows-1252?Q?4zUDL+Tpjjf3dUQi6aOvI35X/W3wcL4UIEEBCR5cR1PEB62epdXPdEA5?= =?Windows-1252?Q?jFh3Ej1v1Jh0v0tb9378Ux0X10dk6GV+XOGMTSmqAj4txBDLgR9uv9g2?= =?Windows-1252?Q?FJl9xrbDkcPscGj998WukyDMFlkjSXtZWyB5G2hXL6epeYCj9N2LatbY?= =?Windows-1252?Q?onAXWuD0B7q7L3ZAbFLmLk9EqAJ7HVnb9GIfsnyvZjo8iMkVfQWzGUd0?= =?Windows-1252?Q?OhHwzu8Eh1CNu5DxHlsiyWWhTHOGQXUJCENWspJ+s4YAEQP/Mh5Q0VRn?= =?Windows-1252?Q?YYRAfdRNdPjjugLXhEY0YII5EnTboWo6a+QgUARSrtjb66pDzBE8BC/t?= =?Windows-1252?Q?UvTmrSfQ3KPXQCHM6J5upjqGPOwl2XmiMB1BmLibJCSWMmhHoKc8JCwj?= =?Windows-1252?Q?haOGtyGHe/Oq5zb5B4AlfzK3qJPM6ifRYJyQCXjsbrN2GIeCxIbp06cU?= =?Windows-1252?Q?1YtArPvjd4u6rRWikQpFn6c33W/XbbAzDDC0ul6g7ENoZftmmWkZSV2d?= =?Windows-1252?Q?ewLvbyRITlWwC5bmf6x7r1C5k1rMjbMSc/zEX+SEaub5dcICXY9N3gMW?= =?Windows-1252?Q?bOM8ilPoaZ1NoD6UdgBk4Q6dQvSg1E0xKqjdubFMwI2J6MEVP76Z7iVR?= =?Windows-1252?Q?mWwXyKT15cQlteFn123iLGju18CZekpevRc3EDfFvb2z55cPwXT89ud+?= =?Windows-1252?Q?4SOqGFz7fToGUoskyAh6SZsQ=3D=3D?= X-Forefront-PRVS: 032334F434 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(39450400003)(39840400002)(39850400002)(39400400002)(39410400002)(377454003)(24454002)(31696002)(64126003)(33646002)(2906002)(81166006)(8676002)(38730400002)(110136004)(6666003)(53546009)(50986999)(6916009)(54356999)(76176999)(25786009)(42186005)(31686004)(6246003)(36756003)(83506001)(47776003)(305945005)(6486002)(478600001)(5660300001)(23746002)(189998001)(7736002)(6116002)(230700001)(4326008)(86362001)(53936002)(2950100002)(93886004)(5890100001)(4001350100001)(54906002)(229853002)(65826007)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR15MB0961;H:[IPv6:2620:10d:c082:1055:498f:9933:4427:d8fe];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BL2PR15MB0961;23:daQFtiTMbBox87RBKaKiGfsaBgQqgcqkvtPr9?= =?Windows-1252?Q?dPEziYoJ/0xDyKuP90UPXCAYFWSn0v4qFL9JURdfti53nl5D87tQK7wM?= =?Windows-1252?Q?Vod3fT8fPaofXBEbIgTYEo15YYnY8P5kNta/lI+PxeiVPUKIW9Hbs5Bd?= =?Windows-1252?Q?k+s9k4z91X4VmJ1WiaUG0OgrXJ8LNcxs59+PiXwTE7k708sU+lyL5wUU?= =?Windows-1252?Q?uKvYC6QgfFixqvNCIBKwJaiuTnKrKTW6/9MwenSR/oqWTC/v3xRT1bLF?= =?Windows-1252?Q?V5OZDkXldaR5dylULmSRSKj5XDz2+ab7BrsAsGs9yXDQtbh8azScleyn?= =?Windows-1252?Q?b7okWLnEqLtpwjCfzY8VVLWdVACcmyB+BYMLKoem2XFRpD1tFjtlw2x7?= =?Windows-1252?Q?fWjCWCBaxyB8pSSMcOLtfJWLeoaZ8y0EYeDxqU+Msnpu+XHuX/GXinhN?= =?Windows-1252?Q?s4OrDzfFwxvr6++B+aYw15dmNrShTfK1uEguxBqhheyW4WZuJGIW0ou3?= =?Windows-1252?Q?8VsF8GHEgJlUR+pLaFfh2M1XtU8NDzHNrH4udxEXHQgy9q+StZtsPRnc?= =?Windows-1252?Q?SF3IMhEQgM9cepccdry708YC4HVjIDd0C3oGgLkWnCwP0CPcgMG4Y9Vj?= =?Windows-1252?Q?f5YjHIi48CekR0R69cQNd0s/puqQyDPs+ikodMJbz3OsjVGcT8YW15Zs?= =?Windows-1252?Q?Xt+d2aJZs/bs4Qs2+hMVN52mzPBLj3EZHclf6j3wL5NJZ9nJ4skHkp4Y?= =?Windows-1252?Q?KTEjGIZDbI0l5dS6BEd+hby0vSGLU5BYXEgPrBfT6cx8ZK3JFflua+ze?= =?Windows-1252?Q?/GaHCMfC/QfHZpY0KU+jjPrLQk89I/EMyToMmuSK9djp5mFnmu6WYB1n?= =?Windows-1252?Q?Ip5Q8hmm1FA399d/LUNB8uzVYii/oCiAj0uAceHr3vaVZ3+YY8BBZTWo?= =?Windows-1252?Q?g9eZae/HwYbmK/nJhi+6ILXB26mptI653qQmvG2EDH3/oNWnwQYzlwuJ?= =?Windows-1252?Q?hLUl+ifo1UpEJnyr3cgBDOVIGVZLckucbXrDADuYw0YLjlVyl2EtnKX1?= =?Windows-1252?Q?YYsNzhhkql8Ej6XjFSSLkxdhKXBwokmWQbPh88mrJ9TiE5IIs3/wVFya?= =?Windows-1252?Q?FJCII21qrhoqKQ1imdrld/NAN73oupQpanP8KHSP2oYJlr5/3taimPHR?= =?Windows-1252?Q?FEjH5SGC2XjSYbKgWdCLv18cWFO0wrLQ2d9c77Ugf8D/nRKUWAE3M97D?= =?Windows-1252?Q?R6hLOB43lqew37G2JqANTFOWBl+/YTQtl5Ib0sh/akRM3LIiH1odrDqS?= =?Windows-1252?Q?BHmYPC0ojxSo2cI2NK6gTbSJNprSVhd0uVDpqIEmS+BbKs=3D?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB0961;6:f/p76Z0zfXusa+MQgupW+Qbh/ws0F9FVJDtyQw5S44Fd17cROhy6o2bQ2aeTIkJa8Gfep3fXWwZ5C+x2fmHab5APbznueRD5gy7Ld+Tc7Htk0lfWm+qD8NetVA45s3lWhH2MCDyYntbOJPp+ox3a+ZdYpn+gXouTRl6aQ/uUeRUBOsC4BwBV/zjZM3BBT1TjkF2tyAr2XZ7bdPU/wtnyymg+V3nWdrRasLTanB/ECiYYf4jNc9UJXnhQn98bT60MKL8ScfDpTm9nShJIgvn0kD56HxMBquaAbz3HfJuYuHCqnugS4JK0TFE114rxIR1X36hNZODPMURhXCjy/TzkoBeefL8s02uvgofOQ+gPBsQ1z9kp5iut8cS9BUfl0Xx0HPL5+wTY/ghs1jpjBColb1mVB9NsWm+0BT6D9Qjl/ZNJtvdDl4YNSLvBATwOylcUqTmHMwm50Aw+S6NjEjRQIaeBti7XkVNrQXUNG12xGZiO4NcRQ6LkQkMk17TDdiidhlaNtpLOF+30Q50KZ8TXog== X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB0961;5:0ANDAf/xHVcsj+XsTTi22BWYINJuWm5TzajFbmviZBTo/CRXcus3Mg5L5/3X9oja50A0NJegHZ1wqZC/idb+5ABwCBd7jaoM6G3qP9AP0mUueJROFSJmLyoVsocE0RRyNjXvcvtuBRaunXS6i5AcfH0YUlkOQa+9F3Oual+1doY8QsUD+ZQFJI9KLCYS613Q7ZFliaQau6E24n/rqyIVGcAO2qv5nJFs0sqofUJESCd5RfbuzT26RtG2O4BkSKh58sk7YVU1Ec818FF76P57cex72fmSi6k0ayflrzk1L9C1p9rO+CAb34r2/C7x9fFKLqq3ULFUs9RXO8S8b2QVIAW+2AXydotwvP0e2+ISFxPPeX0ZQhU8QL+xj3U+OYGrQip2bPdPzCaf/EKv+AeeTdWjkOM4aEKFQDMXQsCWDbwbBRRrbRDiB/pIRx9fInsfPSSzAHFecEvB7FRhuOpR22gPq9NERab6cbTzaxkEOAhuMAEhSVyVilpoOIAXDxVZ;24:hljUf54CkS/sgzHWYprtLyVD22EqF0oepQRiK4kjpbd9+xMqNthc5SbKsKDPDbzQtElEjWZrLXa90jDCKpQcN+BM+zJKFK7jyjMQKzjY8rk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BL2PR15MB0961;7:IlhDhZ4MWwwLda7XOZSv7TzljXvIwmSoCIgTi3i6MM7Xlfe3behwOjZTM+sn9paLcAhBJnvfemkqvPlHpGYCzn0xXenwbjyI6ul2rMMIeMcqz0Gqm7G9MYELqbZ4HGEquRmgIEejMmBCoX558nyDZ9WeFmbW9P4+0in+h8BOXGj0ogJhxQu6Ed1jEVrE4W2o6urn0OXXvFvmM2U6bL5bjEWIJQ8ZPslwdfw4bnQ5yDdVuN0uEJQ+Veji7VW3ev0Rfz4zk4o39Z9lccYSu+dcZ9Utk5N1jPSlD9DbvRUZYvLB/sPHyy9kwmkIqUwB1G44ZtOjos9pCBRSa0WywOHijQ==;20:qgelRBfQwqRN6maFFTasjBSwH38rfjmwNMoKdEtphBqmlBQVtUPFngmeMzpQJevChgAgD+7sohAJ43edP9j5E6r27LvoaixfPwQaK/joeez2/loQg8LOspcu/flaggETUKZ1pPZQDGOrNqnmSlvl/XOWcka+TZDRrhaPc0XOn1s= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 May 2017 15:52:20.6377 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR15MB0961 X-OriginatorOrg: fb.com X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-05-30_10:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/29/17 2:39 AM, Peter Zijlstra wrote: > > > Do we want something like the below to replace much of the above? > > if (!perf_event_valid_local(event, NULL, cpu)) > goto err_out; > > Seems to be roughly what you're after, although I suppose @cpu might be > hard to determine a priory, so maybe we should allow a magic value to > short-circuit that test. > > --- > kernel/events/core.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 8d6acaeeea17..a7dc34f19568 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -3630,6 +3630,36 @@ static inline u64 perf_event_count(struct perf_event *event) > } > > /* > + * perf_event_valid_local() - validates if the event is usable by perf_event_read_local() > + * event: the event to validate > + * task: the task the @event will be used in > + * cpu: the cpu the @event will be used on > + * > + * In case one wants to disallow all per-task events, use @task = NULL. > + * In case one wants to disallow all per-cpu events, use @cpu = -1. > + */ > +bool perf_event_valid_local(struct perf_event *event, struct task_struct *task, int cpu) > +{ > + /* See perf_event_read_local() for the reasons for these tests */ > + > + if ((event->attach_state & PERF_ATTACH_TASK) && > + event->hw.target != task) > + return false; > + > + if (!(event->attach_state & PERF_ATTACH_TASK) && > + event->cpu != cpu) > + return false; we do if (unlikely(event->oncpu != cpu)) as dynamic check inside bpf_perf_event_read(), since we cannot do it statically at perf_event_array update time. If we drop the above 'if' and keep 'task==null' trick, then indeed we can use this function as static check. Right now we're trying to keep as many checks as possible as static checks to make bpf_perf_event_read() faster. I guess we can drop that approach and do perf_event_valid_local() check for every read since perf_event_read_local() does all the same checks anyway. So how about converting all WARN_ON in perf_event_read_local() into 'return -EINVAL' and change func proto into: int perf_event_read_local(struct perf_event *even, u64 *counter_val) > I cannot find reason for this comment. That is, why would > perf_event_read_local() not support those two types? I don't know. What is the meaning of reading tracepoint/breakpoint counter? Because of 'event->oncpu != cpu' dynamic check all counters are expected to be per-cpu. I'm not sure how uncore counters work. What do they have in event->oncpu? -1? I guess they have pmu->count? So we cannot read them from bpf program anyway? If we change warn_ons in perf_event_read_local() to returns them we can make per-task counters working. User side will open per-task counter and bpf program will do current->pid != expected_pid check before calling bpf_perf_event_read(). bpf scripts often do that already. int perf_event_read_local(struct perf_event *even, u64 *counter_val) { local_irq_save(flags); if ((event->attach_state & PERF_ATTACH_TASK) && event->hw.target != current) return -EINVAL; if (!(event->attach_state & PERF_ATTACH_TASK) && event->cpu != smp_processor_id() return -EINVAL; ... inherit and pmu->count checks here ... *counter_val = local64_read(&event->count) local_irq_restore(flags); return 0; } thoughts?