* Re: d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression
[not found] ` <[email protected]>
@ 2021-02-24 18:38 ` Alexey Gladkov
2021-02-24 18:50 ` Eric W. Biederman
2021-02-24 19:10 ` Linus Torvalds
0 siblings, 2 replies; 5+ messages in thread
From: Alexey Gladkov @ 2021-02-24 18:38 UTC (permalink / raw)
To: Eric W. Biederman
Cc: kernel test robot, 0day robot, LKML, lkp, ying.huang, feng.tang,
zhengjun.xing, io-uring, Kernel Hardening, Linux Containers,
linux-mm, Andrew Morton, Christian Brauner, Jann Horn, Jens Axboe,
Kees Cook, Linus Torvalds, Oleg Nesterov
On Wed, Feb 24, 2021 at 10:54:17AM -0600, Eric W. Biederman wrote:
> kernel test robot <[email protected]> writes:
>
> > Greeting,
> >
> > FYI, we noticed a -82.7% regression of stress-ng.sigsegv.ops_per_sec due to commit:
> >
> >
> > commit: d28296d2484fa11e94dff65e93eb25802a443d47 ("[PATCH v7 5/7] Reimplement RLIMIT_SIGPENDING on top of ucounts")
> > url: https://github.com/0day-ci/linux/commits/Alexey-Gladkov/Count-rlimits-in-each-user-namespace/20210222-175836
> > base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
> >
> > in testcase: stress-ng
> > on test machine: 48 threads Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz with 112G memory
> > with following parameters:
> >
> > nr_threads: 100%
> > disk: 1HDD
> > testtime: 60s
> > class: interrupt
> > test: sigsegv
> > cpufreq_governor: performance
> > ucode: 0x42e
> >
> >
> > In addition to that, the commit also has significant impact on the
> > following tests:
>
> Thank you. Now we have a sense of where we need to test the performance
> of these changes carefully.
One of the reasons for this is that I rolled back the patch that changed
the ucounts.count type to atomic_t. Now get_ucounts() is forced to use a
spin_lock to increase the reference count.
--
Rgrds, legion
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression
2021-02-24 18:38 ` d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression Alexey Gladkov
@ 2021-02-24 18:50 ` Eric W. Biederman
2021-02-25 20:36 ` Alexey Gladkov
2021-02-24 19:10 ` Linus Torvalds
1 sibling, 1 reply; 5+ messages in thread
From: Eric W. Biederman @ 2021-02-24 18:50 UTC (permalink / raw)
To: Alexey Gladkov
Cc: kernel test robot, 0day robot, LKML, lkp, ying.huang, feng.tang,
zhengjun.xing, io-uring, Kernel Hardening, Linux Containers,
linux-mm, Andrew Morton, Christian Brauner, Jann Horn, Jens Axboe,
Kees Cook, Linus Torvalds, Oleg Nesterov
Alexey Gladkov <[email protected]> writes:
> On Wed, Feb 24, 2021 at 10:54:17AM -0600, Eric W. Biederman wrote:
>> kernel test robot <[email protected]> writes:
>>
>> > Greeting,
>> >
>> > FYI, we noticed a -82.7% regression of stress-ng.sigsegv.ops_per_sec due to commit:
>> >
>> >
>> > commit: d28296d2484fa11e94dff65e93eb25802a443d47 ("[PATCH v7 5/7] Reimplement RLIMIT_SIGPENDING on top of ucounts")
>> > url: https://github.com/0day-ci/linux/commits/Alexey-Gladkov/Count-rlimits-in-each-user-namespace/20210222-175836
>> > base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
>> >
>> > in testcase: stress-ng
>> > on test machine: 48 threads Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz with 112G memory
>> > with following parameters:
>> >
>> > nr_threads: 100%
>> > disk: 1HDD
>> > testtime: 60s
>> > class: interrupt
>> > test: sigsegv
>> > cpufreq_governor: performance
>> > ucode: 0x42e
>> >
>> >
>> > In addition to that, the commit also has significant impact on the
>> > following tests:
>>
>> Thank you. Now we have a sense of where we need to test the performance
>> of these changes carefully.
>
> One of the reasons for this is that I rolled back the patch that changed
> the ucounts.count type to atomic_t. Now get_ucounts() is forced to use a
> spin_lock to increase the reference count.
Which given the hickups with getting a working version seems justified.
Now we can add incremental patches on top to improve the performance.
Eric
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression
2021-02-24 18:38 ` d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression Alexey Gladkov
2021-02-24 18:50 ` Eric W. Biederman
@ 2021-02-24 19:10 ` Linus Torvalds
1 sibling, 0 replies; 5+ messages in thread
From: Linus Torvalds @ 2021-02-24 19:10 UTC (permalink / raw)
To: Alexey Gladkov
Cc: Eric W. Biederman, kernel test robot, 0day robot, LKML, lkp,
Huang, Ying, Feng Tang, zhengjun.xing, io-uring, Kernel Hardening,
Linux Containers, Linux-MM, Andrew Morton, Christian Brauner,
Jann Horn, Jens Axboe, Kees Cook, Oleg Nesterov
On Wed, Feb 24, 2021 at 10:38 AM Alexey Gladkov
<[email protected]> wrote:
>
> One of the reasons for this is that I rolled back the patch that changed
> the ucounts.count type to atomic_t. Now get_ucounts() is forced to use a
> spin_lock to increase the reference count.
Yeah, that definitely should be an atomic type, since the extended use
of ucounts clearly puts way too much pressure on that ucount lock.
I remember complaining about one version of that patch, but my
complaint wasabout it changing semantics of the saturation logic (and
I think it was also wrong because it still kept the spinlock for
get_ucounts(), so it didn't even take advantage of the atomic
refcount).
Side note: I don't think a refcount_t" is necessarily the right thing
to do, since the ucount reference counter does its own saturation
logic, and the refcount_t version is imho not great.
So it probably just needs to use an atomic_t, and do the saturation
thing manually.
Side note: look at try_get_page(). That one actually does refcounting
with overflow protection better than refcount_t, in my opinion. But I
am obviously biased, since I wrote it ;)
See commits
88b1a17dfc3e mm: add 'try_get_page()' helper function
f958d7b528b1 mm: make page ref count overflow check tighter and
more explicit
with that "page->_recount" being just a regular atomic_t.
Linus
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression
2021-02-24 18:50 ` Eric W. Biederman
@ 2021-02-25 20:36 ` Alexey Gladkov
2021-03-05 17:56 ` Eric W. Biederman
0 siblings, 1 reply; 5+ messages in thread
From: Alexey Gladkov @ 2021-02-25 20:36 UTC (permalink / raw)
To: Eric W. Biederman
Cc: kernel test robot, 0day robot, LKML, lkp, ying.huang, feng.tang,
zhengjun.xing, io-uring, Kernel Hardening, Linux Containers,
linux-mm, Andrew Morton, Christian Brauner, Jann Horn, Jens Axboe,
Kees Cook, Linus Torvalds, Oleg Nesterov
On Wed, Feb 24, 2021 at 12:50:21PM -0600, Eric W. Biederman wrote:
> Alexey Gladkov <[email protected]> writes:
>
> > On Wed, Feb 24, 2021 at 10:54:17AM -0600, Eric W. Biederman wrote:
> >> kernel test robot <[email protected]> writes:
> >>
> >> > Greeting,
> >> >
> >> > FYI, we noticed a -82.7% regression of stress-ng.sigsegv.ops_per_sec due to commit:
> >> >
> >> >
> >> > commit: d28296d2484fa11e94dff65e93eb25802a443d47 ("[PATCH v7 5/7] Reimplement RLIMIT_SIGPENDING on top of ucounts")
> >> > url: https://github.com/0day-ci/linux/commits/Alexey-Gladkov/Count-rlimits-in-each-user-namespace/20210222-175836
> >> > base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
> >> >
> >> > in testcase: stress-ng
> >> > on test machine: 48 threads Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz with 112G memory
> >> > with following parameters:
> >> >
> >> > nr_threads: 100%
> >> > disk: 1HDD
> >> > testtime: 60s
> >> > class: interrupt
> >> > test: sigsegv
> >> > cpufreq_governor: performance
> >> > ucode: 0x42e
> >> >
> >> >
> >> > In addition to that, the commit also has significant impact on the
> >> > following tests:
> >>
> >> Thank you. Now we have a sense of where we need to test the performance
> >> of these changes carefully.
> >
> > One of the reasons for this is that I rolled back the patch that changed
> > the ucounts.count type to atomic_t. Now get_ucounts() is forced to use a
> > spin_lock to increase the reference count.
>
> Which given the hickups with getting a working version seems justified.
>
> Now we can add incremental patches on top to improve the performance.
I'm not sure that get_ucounts() should be used in __sigqueue_alloc() [1].
I tried removing it and running KASAN tests that were failing before. So
far, I have not found any problems.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/legion/linux.git/tree/kernel/signal.c?h=patchset/per-userspace-rlimit/v7.1&id=2d4a2e2be7db42c95acb98abfc2a9b370ddd0604#n428
--
Rgrds, legion
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression
2021-02-25 20:36 ` Alexey Gladkov
@ 2021-03-05 17:56 ` Eric W. Biederman
0 siblings, 0 replies; 5+ messages in thread
From: Eric W. Biederman @ 2021-03-05 17:56 UTC (permalink / raw)
To: Alexey Gladkov
Cc: kernel test robot, 0day robot, LKML, lkp, ying.huang, feng.tang,
zhengjun.xing, io-uring, Kernel Hardening, Linux Containers,
linux-mm, Andrew Morton, Christian Brauner, Jann Horn, Jens Axboe,
Kees Cook, Linus Torvalds, Oleg Nesterov
Alexey Gladkov <[email protected]> writes:
> On Wed, Feb 24, 2021 at 12:50:21PM -0600, Eric W. Biederman wrote:
>> Alexey Gladkov <[email protected]> writes:
>>
>> > On Wed, Feb 24, 2021 at 10:54:17AM -0600, Eric W. Biederman wrote:
>> >> kernel test robot <[email protected]> writes:
>> >>
>> >> > Greeting,
>> >> >
>> >> > FYI, we noticed a -82.7% regression of stress-ng.sigsegv.ops_per_sec due to commit:
>> >> >
>> >> >
>> >> > commit: d28296d2484fa11e94dff65e93eb25802a443d47 ("[PATCH v7 5/7] Reimplement RLIMIT_SIGPENDING on top of ucounts")
>> >> > url: https://github.com/0day-ci/linux/commits/Alexey-Gladkov/Count-rlimits-in-each-user-namespace/20210222-175836
>> >> > base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
>> >> >
>> >> > in testcase: stress-ng
>> >> > on test machine: 48 threads Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz with 112G memory
>> >> > with following parameters:
>> >> >
>> >> > nr_threads: 100%
>> >> > disk: 1HDD
>> >> > testtime: 60s
>> >> > class: interrupt
>> >> > test: sigsegv
>> >> > cpufreq_governor: performance
>> >> > ucode: 0x42e
>> >> >
>> >> >
>> >> > In addition to that, the commit also has significant impact on the
>> >> > following tests:
>> >>
>> >> Thank you. Now we have a sense of where we need to test the performance
>> >> of these changes carefully.
>> >
>> > One of the reasons for this is that I rolled back the patch that changed
>> > the ucounts.count type to atomic_t. Now get_ucounts() is forced to use a
>> > spin_lock to increase the reference count.
>>
>> Which given the hickups with getting a working version seems justified.
>>
>> Now we can add incremental patches on top to improve the performance.
>
> I'm not sure that get_ucounts() should be used in __sigqueue_alloc() [1].
> I tried removing it and running KASAN tests that were failing before. So
> far, I have not found any problems.
>
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/legion/linux.git/tree/kernel/signal.c?h=patchset/per-userspace-rlimit/v7.1&id=2d4a2e2be7db42c95acb98abfc2a9b370ddd0604#n428
Hmm. The code you posted still seems to include the get_ucounts.
I like the idea of not needing to increment and decrement the ucount
reference count every time a signal is sent, unfortunately there is a
problem. The way we have implemented setresuid allows different threads
in a threaded application to have different cred->user values.
That is actually an extension of what posix supports and pthreads will
keep the creds of a process in sync. Still I recall looking into this a
few years ago and there were a few applications that take advantage of
the linux behavior.
In principle I think it is possible to hold a ucount reference in
somewhere such as task->signal. In practice there are enough
complicating factors I don't immediately see how to implement that.
If the creds were stored in signal_struct instead of in task_struct
we could simply move the sigpending counts in set_user, when the uid
of a process changed.
With the current state I don't know how to pick which is the real user.
Eric
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-03-05 17:57 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20210224051845.GB6114@xsang-OptiPlex-9020>
[not found] ` <[email protected]>
2021-02-24 18:38 ` d28296d248: stress-ng.sigsegv.ops_per_sec -82.7% regression Alexey Gladkov
2021-02-24 18:50 ` Eric W. Biederman
2021-02-25 20:36 ` Alexey Gladkov
2021-03-05 17:56 ` Eric W. Biederman
2021-02-24 19:10 ` Linus Torvalds
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox