From: Nathan Lynch <nathanl@linux.ibm.com>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
rnsastry@linux.ibm.com, kjain@linux.ibm.com,
maddy@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org
Subject: Re: [V3] powerpc/perf: Enable PMU counters post partition migration if PMU is active
Date: Wed, 03 Nov 2021 16:11:23 -0500 [thread overview]
Message-ID: <8735odx7us.fsf@linux.ibm.com> (raw)
In-Reply-To: <1635852231.aebe6lt6u4.astroid@bobo.none>
Nicholas Piggin <npiggin@gmail.com> writes:
> Excerpts from Michael Ellerman's message of October 29, 2021 11:15 pm:
>> Nicholas Piggin <npiggin@gmail.com> writes:
>>> Excerpts from Athira Rajeev's message of October 29, 2021 1:05 pm:
>>>> @@ -631,12 +632,18 @@ static int pseries_migrate_partition(u64 handle)
>>>> if (ret)
>>>> return ret;
>>>>
>>>> + /* Disable PMU before suspend */
>>>> + on_each_cpu(&mobility_pmu_disable, NULL, 0);
>>>
>>> Why was this moved out of stop machine and to an IPI?
>>>
>>> My concern would be, what are the other CPUs doing at this time? Is it
>>> possible they could take interrupts and schedule? Could that mess up the
>>> perf state here?
>>
>> pseries_migrate_partition() is called directly from migration_store(),
>> which is the sysfs store function, which can be called concurrently by
>> different CPUs.
>>
>> It's also potentially called from rtas_syscall_dispatch_ibm_suspend_me(),
>> from sys_rtas(), again with no locking.
>>
>> So we could have two CPUs calling into here at the same time, which
>> might not crash, but is unlikely to work well.
>>
>> I think the lack of locking might have been OK in the past because only
>> one CPU will successfully get the other CPUs to call do_join() in
>> pseries_suspend(). But I could be wrong.
>>
>> Anyway, now that we're mutating the PMU state before suspending we need
>> to be more careful. So I think we need a lock around the whole
>> sequence.
Regardless of the outcome here, generally agreed that some serialization
should be imposed in this path. The way the platform works (and some
extra measures by the drmgr utility) make it so that this code isn't
entered concurrently in usual operation, but it's possible to make it
happen if you are root.
A file-static mutex should be OK.
> My concern is still that we wouldn't necessarily have the other CPUs
> under control at that point even if we serialize the migrate path.
> They could take interrupts, possibly call into perf subsystem after
> the mobility_pmu_disable (e.g., via syscall or context switch) which
> might mess things up.
>
> I think the stop machine is a reasonable place for the code in this
> case. It's a low level disabling of hardware facility and saving off
> registers.
That makes sense, but I can't help feeling concerned still. For this to
be safe, power_pmu_enable() and power_pmu_disable() must never sleep or
re-enable interrupts or send IPIs. I don't see anything obviously unsafe
right now, but is that already part of their contract? Is there much
risk they could change in the future to violate those constraints?
That aside, the proposed change seems like we would be hacking around a
more generic perf/pmu limitation in a powerpc-specific way. I see the
same behavior on x86 across suspend/resume.
# perf stat -a -e cache-misses -I 1000 & sleep 2 ; systemctl suspend ; sleep 20 ; kill $(jobs -p)
[1] 189806
# time counts unit events
1.000501710 9,983,649 cache-misses
2.002620321 14,131,072 cache-misses
3.004579071 23,010,971 cache-misses
9.971854783 140,737,491,680,853 cache-misses
10.982669250 0 cache-misses
11.984660498 0 cache-misses
12.986648392 0 cache-misses
13.988561766 0 cache-misses
14.992670615 0 cache-misses
15.994938111 0 cache-misses
16.996703952 0 cache-misses
17.999092812 0 cache-misses
19.000602677 0 cache-misses
20.003272216 0 cache-misses
21.004770295 0 cache-misses
# uname -r
5.13.19-100.fc33.x86_64
next prev parent reply other threads:[~2021-11-03 21:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-29 3:05 [V3] powerpc/perf: Enable PMU counters post partition migration if PMU is active Athira Rajeev
2021-10-29 6:16 ` Nicholas Piggin
2021-10-29 13:15 ` Michael Ellerman
2021-11-02 11:00 ` Athira Rajeev
2021-11-02 11:35 ` Nicholas Piggin
2021-11-03 21:11 ` Nathan Lynch [this message]
2021-11-04 5:55 ` Michael Ellerman
2021-11-05 1:46 ` Nicholas Piggin
2021-11-02 6:13 ` Athira Rajeev
2021-10-29 10:20 ` kernel test robot
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=8735odx7us.fsf@linux.ibm.com \
--to=nathanl@linux.ibm.com \
--cc=atrajeev@linux.vnet.ibm.com \
--cc=kjain@linux.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.vnet.ibm.com \
--cc=npiggin@gmail.com \
--cc=rnsastry@linux.ibm.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;
as well as URLs for NNTP newsgroup(s).