Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751092Ab0ANFKs (ORCPT ); Thu, 14 Jan 2010 00:10:48 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750984Ab0ANFKr (ORCPT ); Thu, 14 Jan 2010 00:10:47 -0500 Received: from mail-ew0-f209.google.com ([209.85.219.209]:59368 "EHLO mail-ew0-f209.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750968Ab0ANFKr (ORCPT ); Thu, 14 Jan 2010 00:10:47 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; b=nwJBTxdJvBoZk/743QxvLePTLQ7WgPwOdOillWC5BSXfIJdihUV997KWnWrEdxYVrc sD+n/2Ld51KuLPYDHLDYrYN3FMPvg6teNSG7Lo1yJP39ifAJskPOegW18Om9F1k9XSJu v8H1neKmMOTXFWQH9htBy42HI57UEgEcgaTcM= Date: Thu, 14 Jan 2010 06:10:43 +0100 From: Frederic Weisbecker To: Joshua Pincus , Ingo Molnar Cc: "K.Prasad" , peterz@infradead.org, paulus@samba.org, acme@redhat.com, linux-kernel@vger.kernel.org Subject: Re: HW breakpoints perf_events request Message-ID: <20100114051038.GA5033@nowhere> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4150 Lines: 100 (Adding Ingo in Cc) On Wed, Jan 13, 2010 at 05:45:55PM -0800, Joshua Pincus wrote: > Hi, > > I have a request for an additional feature to be included > in the recent hardware breakpoints work soon to be delivered > in kernel 2.6.33. > > Frederic Weisbecker, Prasad Krishnan and I have shared an ongoing > private discussion on this topic. Frederic recommended that we take > the discussion to a wider audience. Hence this email. I would like > to thank both > of those two engineers for their patience, quick response, > and help in this process. They've been stellar. > > I work for a company which would like to make heavy use > of the new HW breakpoints perf_event work. Essentially, > we need to be able to do the following: > > 1) When executed, a user-land application must be able to program 4 > pinned hardware > breakpoint registers. I need 1 byte granularity (address length > specificity) and the ability > to set RWX event triggers. > > 2) All calls to clone() or fork() will propagate the > debug register settings from parent to child(ren). > > 3) When a breakpoint is triggered, the application > thread currently running which triggered the breakpoint > immediately stops execution and is sent a SIGTRAP. > > 4) The thread transitions from the PC that triggered the breakpoint to > the signal handler for SIGTRAP. > > 5) The signal handler does some work. (This "work" is outside the > scope of my request, but you may have some insights. I need to be > able to change the PC and nPC for the thread that triggered a > breakpoint such that when it > returns from the signal handler it doesn't return to the instruction > that triggered the breakpoint but to the one after it. If I were > using ptrace(8), I would just have the parent > process use the ptrace(8) syscall to modify the PC and > nPC of the child. I'm not using ptrace(8).) > > 6) The signal handler returns and the thread returns to normal > execution at the new > PC and nPC. > > From my discussions with Frederic and Prasad, I know > that requirements (1) and (2), as described above, > are already being met by the current work. I can use > the perf_event_attr structure and the perf_event syscall > to program breakpoints for a thread in exactly > the way I've specified AND be able to have debug > settings inherited from parent to child in the case of a > fork() or clone(). > > However, there's nothing yet in place to allow a > signal to be sent to the thread when a breakpoint > has been hit. Put another way, there's nothing here > which affects execution flow of the user-app when the CPU > traps due to a HW breakpoint. > > Currently, the perf events infrastructure allows me > to mmap() a block of memory and to poll() on it, waiting > and watching for events to be described in that mmap'd > buffer. That will not be sufficient for what we need > to do. We need to have the ability to specify that > execution of the thread should be interrupted, just as it > would under ptrace(), and have a signal be delivered. > Delivery of the signal must be received and processed > by the application before the thread will be allowed to > proceed to the nPC after the PC which caused the > HW breakpoint event. > > Is this possible? Can we architect this feature into > the perf_events infrastructure? > > At first glance, it would seem that this is a fairly > easy thing to do. Right now, these same HW breakpoints > triggers under ptrace() merely call a previously registered > user handler which modifies the debug registers to > record the event and to propagate a signal to the child > process being traced. We want to do something similar > w/o using ptrace. Perhaps it is as simple as providing a > perf_event_attr setting which indicates that SIGTRAP signals > should be sent to the thread which triggered the breakpoint > exception. > > Thanks in advance for your help, > JP -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/