All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@linux.intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: intel-gfx@lists.freedesktop.org,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Subject: Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
Date: Thu, 13 Feb 2025 08:36:46 -0500	[thread overview]
Message-ID: <25bc2cb3-f0ab-4e64-b331-98f52cce9a99@linux.intel.com> (raw)
In-Reply-To: <cwvprdbmmvblivbjfs5seoivevdjetkjw5meabedf3yfaq2gmq@anrdku3mderx>



On 2025-02-12 11:13 p.m., Lucas De Marchi wrote:
> On Tue, Jan 21, 2025 at 12:19:15PM -0500, Liang, Kan wrote:
>>
>>
>> On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
>>> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>>
>>>>
>>>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>>>>>> hlist_node
>>>>>>>>> *node)
>>>>>>>>> -{
>>>>>>>>> -    struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>> cpuhp.node);
>>>>>>>>> -    unsigned int target = i915_pmu_target_cpu;
>>>>>>>>> -
>>>>>>>>> -    /*
>>>>>>>>> -     * Unregistering an instance generates a CPU offline event
>>>>>>>>> which
>>>>>>>>> we must
>>>>>>>>> -     * ignore to avoid incorrectly modifying the shared
>>>>>>>>> i915_pmu_cpumask.
>>>>>>>>> -     */
>>>>>>>>> -    if (!pmu->registered)
>>>>>>>>> -        return 0;
>>>>>>>>> -
>>>>>>>>> -    if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>> -        target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>>>> cpu);
>>>>>>>>> -
>>>>>>>>
>>>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core
>>>>>>>> scope
>>>>>>>> PMU, not a system-wide scope.
>>>>>>>
>>>>>>> counter is in a complete separate device - it doesn't depend on
>>>>>>> core or
>>>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>>>> here.
>>>>>>
>>>>>> OK. But it's still a behavior change. Please make it clear in the
>>>>>> description that the patch also changes/fixes the scope from core
>>>>>> scope
>>>>>> to system-wide.
>>>>>
>>>>> sure... do you have a suggestion how to test the hotplug? For testing
>>>>> purposes, can I force the perf cpu assigned to be something other than
>>>>> the cpu0?
>>>>
>>>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>> CPU0. I don't know a way to force another CPU without changing the
>>>> code.
>>>> You may have to instrument the code for the test.
>>>>
>>>> Another test you may want to do is the perf system-wide test, e.g.,
>>>> perf
>>>> stat -a -e i915/actual-frequency/ sleep 1.
>>>>
>>>> The existing code assumes the counter is core scope. So the result
>>>> should be huge, since perf will read the counter on each core and add
>>>> them up.
>>>
>>> that is not allowed and it simply fails to init the counter:
>>>
>>> static int i915_pmu_event_init(struct perf_event *event)
>>>     ...
>>>     if (event->cpu < 0)
>>>         return -EINVAL;
>>>     if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>         return -EINVAL;
>>>     ...
>>> }
>>>
>>> event only succeeds the initialization in the assigned cpu. I see no
>>> differences in results (using i915/interrupts/ since freq is harder to
>>> compare):
>>>
>>> $ sudo perf stat -e i915/interrupts/  sleep 1
>>>
>>>  Performance counter stats for 'system wide':
>>>
>>>                253      i915/
>>> interrupts/                                                     
>>>        1.002215175 seconds time elapsed
>>>
>>> $ sudo perf stat -a  -e i915/interrupts/  sleep 1
>>>
>>>  Performance counter stats for 'system wide':
>>>
>>>                251      i915/
>>> interrupts/                                                     
>>>        1.000900818 seconds time elapsed
>>>
>>> Note that our cpumask attr already returns just the assigned cpu and
>>> perf-stat only tries to open on that cpu:
>>>
>>> $ strace --follow -s 1024 -e perf_event_open --  perf stat -a  -e i915/
>>> interrupts/  sleep 1
>>>
>>> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /*
>>> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
>>> sample_type=PERF_SAMPLE_IDENTIFIER,
>>> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
>>> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
>>> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
>>> PERF_FLAG_FD_CLOEXEC) = 3
>>>
>>
>> I see. The behavior is not changed with the patch. It should be just the
> 
> humn... the behavior doesn't change when using perf because perf will
> read the cpumask and use it accordingly. However apparently now it's not
> working anymore to reject calls to perf_event_open() that have a cpu
> that doesn't match the cpumask.
> 
> Just like before I have this output:
> 
> $ sudo cat /sys/devices/i915/cpumask 0
> 
> However if perf_event_open() is called with cpu == 1, it succeeds.
> Example:
> 
>     attr_init(&attr);
>     perf_event_open(&attr, -1, 1, -1, 0);
> 
> I was expecting it to fail and set errno to ENODEV, but that is not the
> case. For this particular system I'm seeing these values in
> perf_try_init_event():
> 
>     event->cpu == 1
>     cpumask=0-19
>     pmu_cpumask=0
> 
> Re-reading this: it will accept any (online) cpu of the system. Same
> behavior occurs with other scopes: any cpu of that scope is accepted and
> event->cpu will still keep what the user passed in (rather than the
> calculated by perf_try_init_event(). Is that expected?

Yes, for a system-wide event, it can be read from any CPU. The CPU mask
in the sysfs only tells the perf tool that only 1 CPU is required to get
system-wide information. It doesn't have to be the advised CPU. It can
be any CPU in the scope.

https://lore.kernel.org/all/20240802151643.1691631-3-kan.liang@linux.intel.com/

Thanks,
Kan
> 
> Lucas De Marchi
> 
>> topology_sibling_cpumask() which implies a misleading message.
>> Thanks for the confirmation.
>>
>>
>>> Lucas De Marchi
>>>
>>>> But this patch claims that the counter is system-wide. With the patch,
>>>> the same perf command should only read the counter on the assigned CPU.
>>>>
>>>> Please also post the test results in the changelog. That's the reason
>>>> why the scope has to be changed.
>>>
>>> it seems that migration code is simply wrong, not that we are changing
>>> the scope here - it was already considered system-wide. I can add a
>>> paragraph in the commit message explaining it.
>>>
>>
>> Yes, please.
>>
>> Thanks,
>> Kan
>>


  reply	other threads:[~2025-02-13 13:36 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
2025-01-17  3:01 ` ✗ Fi.CI.SPARSE: warning for " Patchwork
2025-01-17  3:15 ` ✗ i915.CI.BAT: failure " Patchwork
2025-01-20 15:08 ` [PATCH] " Liang, Kan
2025-01-20 22:57   ` Lucas De Marchi
2025-01-21  1:42     ` Liang, Kan
2025-01-21 14:29       ` Lucas De Marchi
2025-01-21 15:53         ` Liang, Kan
2025-01-21 16:59           ` Lucas De Marchi
2025-01-21 17:19             ` Liang, Kan
2025-02-13  4:13               ` Lucas De Marchi
2025-02-13 13:36                 ` Liang, Kan [this message]
2025-02-13 14:28                   ` Tvrtko Ursulin
2025-02-13 15:27                     ` Liang, Kan
2025-01-25  0:46             ` Umesh Nerlige Ramappa
2025-01-25 16:32               ` Lucas De Marchi
2025-01-27 23:32                 ` Umesh Nerlige Ramappa
2025-01-23  9:43     ` Tvrtko Ursulin
2025-01-23 16:27       ` Lucas De Marchi
2025-01-23 18:06         ` Tvrtko Ursulin
2025-01-23 19:26           ` Lucas De Marchi
2025-01-23  6:37 ` ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code (rev2) Patchwork
2025-01-23  6:56 ` ✓ i915.CI.BAT: success " Patchwork
2025-01-24  0:27 ` ✗ i915.CI.Full: failure " Patchwork
2025-01-29  8:37 ` [PATCH] drm/i915/pmu: Drop custom hotplug code Tvrtko Ursulin

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=25bc2cb3-f0ab-4e64-b331-98f52cce9a99@linux.intel.com \
    --to=kan.liang@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=lucas.demarchi@intel.com \
    --cc=peterz@infradead.org \
    --cc=vinay.belgaumkar@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.