Intel-GFX Archive on 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox