Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1344529
| From | Davidlohr Bueso <dave@stgolabs.net> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [RFC PATCH] namespaces: Avoid task_lock when setting tsk->nsproxy |
| Date | 2016-02-26 19:20 +0100 |
| Message-ID | <r6v9D-7fn-9@gated-at.bofh.it> (permalink) |
| References | <r6nF8-1Eg-11@gated-at.bofh.it> <r6uGC-6KV-25@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Fri, 26 Feb 2016, Eric W. Biederman wrote: >I would really appreciate it, if you are going to come up with a new >locking primitive that you implement that locking primitive separately. Using some rmw insn to avoid a lock is hardly implementing a new locking primitive. This was never the purpose, and we use similar techniques throughout the kernel to force certain paths. >A fresh locking primitive comingled with other code is a good way to get >something wrong, and generally to get code that is not well maintained >because there is not a separation of concerns. > >Furthermore there is a world of difference between a 1+jiffy delay >waiting for rcu_synchronize and the short hold times of task_lock. I am aware of that, this is an optimization only based on that task_lock is mainly unconteded, and hoped I made it clear in the changelog. >Looking at your locking it appears to be a complete hack. Always taking >task_lock on read (but now you have an extra atomic op where you call >xchg on the pointer). Just calling compare_xchg on write if there >are no concurrent readers. The task on read is considered a slowpath, the extra atomic op is what I had mentioned in the overhead, but for the fastpath we save two ops, otoh. >For raw performance you would do better to have a separate lock, or >potentially a specialized locking primitive that just used the low >pointer bits. > >I don't know what motivates this work are you actually seeing >performance problems with setns? Motivation is towards other alloc_lock users, more than nsproxy itself. I had just come across your mentioned change from using rcu and given that there is practically 0 concurrency, though we could do better. >I am very uncomofortable with a novel, and very awkward new locking >primitive that does not clearly show improvements in even it's target >workloads. > >Hmm. After thinking about this a little more your set_reader_nsproxy is >completely unsafe. Most readers of nsproxy are from the same task. >Changing the low bits of the pointer of from another task will cause >those readers to segfault, and if not segfault they are reading from the >wrong memory locations. Ok, this part I was not sure of and was the simplest way I could think of atomically checking for readers with a single [Rmw]. fwiw, as an alternative to the pointer tagging I had considered doing some sorf of spin_is_locked() check on the alloc_lock for the writer, but that has its own can of worms on SMP anyway. Thanks, Davidlohr
Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread
[RFC PATCH] namespaces: Avoid task_lock when setting tsk->nsproxy Davidlohr Bueso <dbueso@suse.de> - 2016-02-26 11:20 +0100
Re: [RFC PATCH] namespaces: Avoid task_lock when setting tsk->nsproxy ebiederm@xmission.com (Eric W. Biederman) - 2016-02-26 18:50 +0100
Re: [RFC PATCH] namespaces: Avoid task_lock when setting tsk->nsproxy Davidlohr Bueso <dave@stgolabs.net> - 2016-02-26 19:20 +0100
csiph-web