* 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: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
* 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
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