Messages in this thread | | | From | Taehee Yoo <> | Date | Fri, 17 Jan 2020 00:32:55 +0900 | Subject | Re: BUG: MAX_LOCKDEP_CHAINS too low! |
| |
On Thu, 16 Jan 2020 at 14:25, Dmitry Vyukov <dvyukov@google.com> wrote: >
Hi Dmitry!
> On Wed, Jan 15, 2020 at 10:53 PM Cong Wang <xiyou.wangcong@gmail.com> wrote: > > > +Taehee, Cong, > > > > > > In the other thread Taehee mentioned the creation of dynamic keys for > > > net devices that was added recently and that they are subject to some > > > limits. > > > syzkaller creates lots of net devices for isolation (several dozens > > > per test process, but then these can be created and destroyed > > > periodically). I wonder if it's the root cause of the lockdep limits > > > problems? > > > > Very possibly. In current code base, there are 4 lockdep keys > > per netdev: > > > > struct lock_class_key qdisc_tx_busylock_key; > > struct lock_class_key qdisc_running_key; > > struct lock_class_key qdisc_xmit_lock_key; > > struct lock_class_key addr_list_lock_key; > > > > so the number of lockdep keys is at least 4x number of network > > devices. > > And these are not freed/reused, right? So with dynamic keys LOCKDEP > inherently can't handle prolonged running, only O(1) work?
When netdev interface is removed, these dynamic keys are removed. But if so many netdev interfaces are existing concurrently (more than 2000), lockdep will stop because of a lack of keys. In addition, as far as I know, freeing dynamic lockdep key routine is slower than creating a new dynamic lockdep key. If there are so many netdev interface add/delete operations, for a while, there may be no available lockdep key. At this moment, lockdep will stop.
Thank you Taehee Yoo
| |