public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Stephane Eranian <eranian@hpl.hp.com>
To: linux-kernel@vger.kernel.org
Cc: davem@davemloft.net, paulus@samba.org, akpm@linux-foundation.org,
	gregkh@suse.de, mucci@cs.utk.edu, wcohen@redhat.com,
	robert.richter@amd.com, andi@firstfloor.org, eranian@gmail.com,
	Stephane Eranian <eranian@hpl.hp.com>
Subject: Re: [perfmon2] perfmon2 merge news
Date: Thu, 13 Dec 2007 08:00:04 -0800	[thread overview]
Message-ID: <20071213160004.GC6740@frankl.hpl.hp.com> (raw)
In-Reply-To: <20071119.165313.163834190.davem@davemloft.net>

Hello,

A few weeks back, I mentioned that I would post some
interesting problems that I have encountered while
implementing perfmon and for which I am still looking
for better solutions.

Here is one that I would like to solve right now and
for which I am interested in your comments.

One of the perfmon syscall (pfm_restart()) is used to
resume monitoring after a user level notification. When
 operating in per-thread non self-monitoring mode, the
syscall needs to operate on the machine state of the
monitored thread. So you get into this situation:


        Thread T0                        Thread T1
            |                                |
       pfm_restart()                         |
            |                                |
    spin_lock_irqsave()                      |
            |                                |
  <modify T1's machine state>--------------->|
            |                                |
    spin_unlock_irqrestore()                 |
            |                                |
            v                                v

Thread T1 may be running at the time T0 needs to modify its state.
The current solution is to set a TIF flag in T1. That TIF flag will
cause T1 (on kernel exit) to go into a perfmon function that will
then modify the state, i.e., state is self-modified. That works okay
but there are a few race conditions. For self-monitoring sessions
(e.g., system-wide or per-thread), it is easy because we operate in
the correct thread.

But there is a big difference between self-monitoring and non
self-monitoring. The pfm_restart() syscall does not provide the
same guarantee.

In self-monitoring modes, the interface guarantees that by the time you
return from the call, the effects of the call are visible. Whereas when
monitoring another thread, the call currently does not provide such
guarantee, i.e., it does not wait until T1 has seen the TIF flag and
completed the state modification before returning. We could add a semaphore
to enforce that guarantee but it gets difficult with corner cases and
cleanups in case of unpexected termination.

AFAIK, there is no single call to stop T1 and wait until it is completely
off the CPU, unless we go through the (internal) ptrace interface. 

Would you have anything better to suggest?

Thanks.

--
-Stephane

  reply	other threads:[~2007-12-13 16:01 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-07  0:34 [PATCH] fix up perfmon to build on -mm Greg KH
2007-11-07 10:34 ` Stephane Eranian
2007-11-07 17:07   ` Greg KH
2007-11-07 13:42 ` Stephane Eranian
2007-11-07 17:08   ` Greg KH
2007-11-07 17:33     ` Andrew Morton
2007-11-07 17:41       ` Greg KH
2007-11-07 17:50     ` Stephane Eranian
2007-11-07 17:47   ` Greg KH
2007-11-07 17:57     ` Stephane Eranian
2007-11-07 19:53       ` Greg KH
2007-11-07 20:39         ` Stephane Eranian
2007-11-08 15:27         ` Stephane Eranian
2007-11-09 20:06 ` Andrew Morton
2007-11-09 21:38   ` Greg KH
2007-11-10 20:32     ` Andi Kleen
2007-11-13 15:17       ` perfmon2 merge news Robert Richter
2007-11-13 15:35         ` [perfmon2] " William Cohen
2007-11-13 17:55           ` Stephane Eranian
2007-11-13 18:33             ` [perfmon] " William Cohen
2007-11-13 21:13               ` Stephane Eranian
2007-11-13 21:29                 ` Andi Kleen
2007-11-13 21:46                   ` Stephane Eranian
2007-11-13 21:50                     ` Andi Kleen
2007-11-13 22:22                       ` Stephane Eranian
2007-11-13 22:25                         ` Andi Kleen
2007-11-13 22:58                           ` Stephane Eranian
2007-11-14  2:07                             ` Andi Kleen
2007-11-14 13:09                               ` Stephane Eranian
2007-11-14 14:24                                 ` Andi Kleen
2007-11-14 15:44                                   ` William Cohen
2007-11-14 16:13                                     ` Stephane Eranian
2007-11-14 18:53                                     ` Philippe Elie
2007-11-14 19:15                                       ` Andi Kleen
2007-11-15  0:07                                   ` Stephane Eranian
2007-11-13 18:47             ` Philip Mucci
2007-11-13 18:59               ` Greg KH
2007-11-13 20:07                 ` Andrew Morton
2007-11-13 20:14                   ` Greg KH
2007-11-13 20:36                   ` Andi Kleen
2007-11-14  0:28                     ` Philip Mucci
2007-11-14  1:52                       ` Andi Kleen
2007-11-16  9:18                         ` Philip Mucci
2007-11-16 15:15                           ` Andi Kleen
2007-11-16 16:00                             ` Stephane Eranian
2007-11-16 16:28                               ` Andi Kleen
2007-11-16 17:13                                 ` William Cohen
2007-11-16 21:56                                   ` Stephane Eranian
2007-11-16 17:36                                 ` Stephane Eranian
2007-11-16 17:51                             ` dean gaudet
2007-11-17  0:29                               ` David Miller
2007-11-17  1:07                                 ` Greg KH
2007-11-16 20:16                             ` Philip Mucci
2007-11-17  0:15                             ` David Miller
     [not found]                             ` <1d7226b10711161713j675341b7wdb4f050c59a8be0a@mail.gmail.com>
2007-11-17  1:25                               ` Greg KH
     [not found]                                 ` <1d7226b10711161748n39b7f195q796d85282ef66134@mail.gmail.com>
2007-11-17  2:13                                   ` Greg KH
2007-11-14  7:24                   ` [perfmon] Re: [perfmon2] " Paul Mackerras
2007-11-14  7:40                     ` Andrew Morton
2007-11-14 10:38                     ` Christoph Hellwig
2007-11-14 10:43                       ` Paul Mackerras
2007-11-14 11:00                         ` Christoph Hellwig
2007-11-14 11:12                           ` David Miller
2007-11-14 11:14                             ` David Miller
2007-11-14 11:44                             ` Paul Mackerras
2007-11-13 23:49                               ` Nick Piggin
2007-11-14 11:58                                 ` David Miller
2007-11-14  0:25                                   ` Nick Piggin
2007-11-14 21:30                                     ` Paul Mackerras
2007-11-14 10:17                                       ` Nick Piggin
2007-11-14 22:56                                         ` Chuck Ebbert
2007-11-14 11:03                                           ` Nick Piggin
2007-11-14 11:52                               ` David Miller
2007-11-14 12:03                                 ` Paul Mackerras
2007-11-14 12:07                                   ` David Miller
2007-11-14  0:28                                     ` Nick Piggin
2007-11-14 21:50                                     ` Paul Mackerras
2007-11-14 23:03                                       ` David Miller
2007-11-14 23:12                                         ` Paul Mackerras
2007-11-14 23:21                                           ` David Miller
2007-11-15  1:11                                             ` Paul Mackerras
2007-11-15  1:27                                               ` David Miller
2007-11-15  2:34                                                 ` Paul Mackerras
2007-11-15  7:48                                                   ` Herbert Xu
2007-11-15  8:19                                                     ` Andi Kleen
2007-11-19 13:08                                                 ` David Miller
2007-11-19 20:53                                                   ` Stephane Eranian
2007-11-20  0:55                                                     ` David Miller
2007-11-19 21:43                                                   ` Paul Mackerras
2007-11-19 22:48                                                     ` Stephane Eranian
2007-11-20  0:53                                                       ` David Miller
2007-12-13 16:00                                                         ` Stephane Eranian [this message]
2007-12-14 19:12                                                           ` Frank Ch. Eigler
2007-12-14 21:07                                                             ` Stephane Eranian
2007-12-15 15:54                                                               ` Frank Ch. Eigler
2007-11-15  8:29                                               ` [perfmon] " Stephane Eranian
2007-11-14 13:51                               ` Stephane Eranian
2007-11-14 11:39                           ` Paul Mackerras
2007-11-14 11:52                             ` David Miller
2007-11-14 13:47                             ` Stephane Eranian
2007-11-14 12:38                           ` Andi Kleen
2007-11-14 14:13                             ` Stephane Eranian
2007-11-14 14:26                               ` Andi Kleen
2007-11-15  0:23                                 ` Paul Mackerras
2007-11-14 19:48                             ` David Miller
2007-11-15  4:20                             ` dean gaudet
2007-11-15  4:47                               ` Paul Mackerras
2007-11-15  5:14                                 ` dean gaudet
2007-11-15  8:53                               ` Stephane Eranian
2007-11-15 17:01                               ` [perfmon2] [perfmon] " Dan Terpstra
2007-11-13 21:33                 ` [perfmon] Re: [perfmon2] " Stephane Eranian
2007-11-13 21:45                   ` Greg KH
2007-11-13 22:27               ` Christoph Hellwig
2007-11-13 20:42           ` Andi Kleen
2007-11-13 18:32         ` Stephane Eranian
2007-11-13 22:29           ` Christoph Hellwig
2007-11-16 18:25           ` PMC core internal API design Mathieu Desnoyers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071213160004.GC6740@frankl.hpl.hp.com \
    --to=eranian@hpl.hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=davem@davemloft.net \
    --cc=eranian@gmail.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mucci@cs.utk.edu \
    --cc=paulus@samba.org \
    --cc=robert.richter@amd.com \
    --cc=wcohen@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox