On 27.06.2018 13:05, Tvrtko Ursulin wrote:
> 
> On 27/06/18 10:47, Alexey Budankov wrote:
>>
>>
>> On 27.06.2018 12:15, Tvrtko Ursulin wrote:
>>>
>>> On 26/06/18 18:25, Alexey Budankov wrote:
>>>> Hi,
>>>>
>>>> On 26.06.2018 18:36, Tvrtko Ursulin wrote:
>>>>> From: Tvrtko Ursulin <[email protected]>
>>>>>
>>>>> For situations where sysadmins might want to allow different level of
>>>>> access control for different PMUs, we start creating per-PMU
>>>>> perf_event_paranoid controls in sysfs.
>>>>>
>>>>> These work in equivalent fashion as the existing perf_event_paranoid
>>>>> sysctl, which now becomes the parent control for each PMU.
>>>>>
>>>>> On PMU registration the global/parent value will be inherited by each PMU,
>>>>> as it will be propagated to all registered PMUs when the sysctl is
>>>>> updated.
>>>>>
>>>>> At any later point individual PMU access controls, located in
>>>>> <sysfs>/device/<pmu-name>/perf_event_paranoid, can be adjusted to achieve
>>>>> fine grained access control.
>>>>>
>>>>> Signed-off-by: Tvrtko Ursulin <[email protected]>
>>>>> Cc: Thomas Gleixner <[email protected]>
>>>>> Cc: Peter Zijlstra <[email protected]>
>>>>> Cc: Ingo Molnar <[email protected]>
>>>>> Cc: "H. Peter Anvin" <[email protected]>
>>>>> Cc: Arnaldo Carvalho de Melo <[email protected]>
>>>>> Cc: Alexander Shishkin <[email protected]>
>>>>> Cc: Jiri Olsa <[email protected]>
>>>>> Cc: Namhyung Kim <[email protected]>
>>>>> Cc: Madhavan Srinivasan <[email protected]>
>>>>> Cc: Andi Kleen <[email protected]>
>>>>> Cc: Alexey Budankov <[email protected]>
>>>>> Cc: [email protected]
>>>>> Cc: [email protected]
>>>>> ---
>>>>>    include/linux/perf_event.h | 12 ++++++--
>>>>>    kernel/events/core.c       | 59 ++++++++++++++++++++++++++++++++++++++
>>>>>    kernel/sysctl.c            |  4 ++-
>>>>>    3 files changed, 71 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
>>>>> index d7938d88c028..22e91cc2d9e1 100644
>>>>> --- a/include/linux/perf_event.h
>>>>> +++ b/include/linux/perf_event.h
>>>>> @@ -271,6 +271,9 @@ struct pmu {
>>>>>        /* number of address filters this PMU can do */
>>>>>        unsigned int            nr_addr_filters;
>>>>>    +    /* per PMU access control */
>>>>> +    int                perf_event_paranoid;
>>>>
>>>> It looks like it needs to be declared as atomic and 
>>>> atomic_read/atomic_write
>>>> operations need to be explicitly used below in the patch as far this
>>>> variable may be manipulated by different threads at the same time
>>>> without explicit locking.
>>>
>>> It is just a write of an integer from either sysfs access or sysctl. As 
>>> such I don't think going atomic would change anything. There is no RMW or 
>>> increment or anything on it.
>>>
>>> Unless there are architectures where int stores are not atomic? But then 
>>> the existing sysctl would have the same issue. So I suspect we can indeed 
>>> rely on int store being atomic.
>>
>> Yep, aligned word read/write is atomic on Intel and there is no runtime issue
>> currently, but the implementation itself is multithread and implicitly relies
>> on that atomicity so my suggestion is just explicitly code that assumption 
>> :).
>> Also, as you mentioned, that makes the arch independent part of code more 
>> portable.
> 
> Perhaps we are not on the same page, but my argument was that the current 
> sysctl (or sysctl via proc) has the same issue with multiple threads 
> potentially writing to it. 

Well, yes, currently the issue exists but it could be addressed in the new 
design.

As long as the end result is a valid value it is not a problem. So I don't see 
what this patch changes in that respect. Different tasks writing either of the 
sysctl/sysfs values race, but end up with valid values everywhere. If we can 
rely on int stores to be atomic on all architectures I don't see an effective 
difference after changing to atomic_t, or even taking the pmu mutex over the 
per PMU sysfs writes. So I don't see value in complicating the code with either 
approach but am happy to be proved wrong if that is the case.
> 
> Regards,
> 
> Tvrtko
> 

Reply via email to