lkml.org 
[lkml]   [2010]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH -v2] perf, x86: try to handle unknown nmis with running perfctrs
    From
    Date
    On Thu, 2010-08-12 at 00:00 +0200, Robert Richter wrote:
    > From 8bb831af56d118b85fc38e0ddc2e516f7504b9fb Mon Sep 17 00:00:00 2001
    > From: Robert Richter <robert.richter@amd.com>
    > Date: Thu, 5 Aug 2010 16:19:59 +0200
    > Subject: [PATCH] perf, x86: try to handle unknown nmis with running perfctrs
    >
    > When perfctrs are running it is valid to have unhandled nmis, two
    > events could trigger 'simultaneously' raising two back-to-back
    > NMIs. If the first NMI handles both, the latter will be empty and daze
    > the CPU.
    >
    > The solution to avoid an 'unknown nmi' massage in this case was simply
    > to stop the nmi handler chain when perfctrs are runnning by stating
    > the nmi was handled. This has the drawback that a) we can not detect
    > unknown nmis anymore, and b) subsequent nmi handlers are not called.
    >
    > This patch addresses this. Now, we check this unknown NMI if it could
    > be a perfctr back-to-back NMI. Otherwise we pass it and let the kernel
    > handle the unknown nmi.
    >
    > This is a debug log:

    >
    > Deltas:
    >

    > nmi #32346 1462095 <<<< 1st nmi (standard) handling 2 counters
    > nmi #32347 2046 <<<< 2nd nmi (back-to-back) handling one counter
    > nmi #32348 1773 <<<< 3rd nmi (back-to-back) handling no counter! [3]
    >
    > For back-to-back nmi detection there are the following rules:
    >
    > The perfctr nmi handler was handling more than one counter and no
    > counter was handled in the subsequent nmi (see [1] and [2] above).
    >
    > There is another case if there are two subsequent back-to-back nmis
    > [3]. In this case we measure the time between the first and the
    > 2nd. The 2nd is detected as back-to-back because the first handled
    > more than one counter. The time between the 1st and the 2nd is used to
    > calculate a range for which we assume a back-to-back nmi. Now, the 3rd
    > nmi triggers, we measure again the time delta and compare it with the
    > first delta from which we know it was a back-to-back nmi. If the 3rd
    > nmi is within the range, it is also a back-to-back nmi and we drop it.

    I liked the one without funny timestamps in better, the whole timestamps
    thing just feels too fragile.

    Relying on handled > 1 to arm the back-to-back filter seems doable.

    (Also, you didn't deal with the TSC going backwards..)


    \
     
     \ /
      Last update: 2010-08-16 16:51    [W:4.364 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site