From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB9A4C6379F for ; Tue, 17 Jan 2023 05:58:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5A6276B0078; Tue, 17 Jan 2023 00:58:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 556396B007B; Tue, 17 Jan 2023 00:58:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 41DB26B007D; Tue, 17 Jan 2023 00:58:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 343FE6B0078 for ; Tue, 17 Jan 2023 00:58:49 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 0542DA0930 for ; Tue, 17 Jan 2023 05:58:49 +0000 (UTC) X-FDA: 80363237178.04.7DF9219 Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com [209.85.219.174]) by imf02.hostedemail.com (Postfix) with ESMTP id 7747780012 for ; Tue, 17 Jan 2023 05:58:47 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=szFCOms0; spf=pass (imf02.hostedemail.com: domain of surenb@google.com designates 209.85.219.174 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673935127; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=B1UEa3M1jP3y0W29RzNqF9B+ZNIIlo3tNbOA7FKp7Wg=; b=bRnoWONOvlM2Jo7McEKwAB+BNph8zKI/YAYLSDbg+AE5D292y1/Z8rLwi4Z8X3TrKfdVIk G6VJf0Zo2Z2PRflT9EORfwg0I08hY/EXfkm2RgAoOWF07oK709doxqkFHIzwZmjU4HtR6U bNoqBtIcmhEFtQKBFuK5saxxlmfJfNI= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=szFCOms0; spf=pass (imf02.hostedemail.com: domain of surenb@google.com designates 209.85.219.174 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673935127; a=rsa-sha256; cv=none; b=6LXFU7+0xaWJZ4telIG3sGxclU8GAHXY64hUXJXK3qr1A7vZPZrCE5AG4Vhrjw+4f8YUor ZxiJyYgVRkH+X06/p6GXxMfmLp5MTRj+N2AFWWqDe1oxHayeCPBbTl61ELBuCFq/gT/Wz4 1j7dnOFcCvzR36Wwi/S8hdqDIUAXZLA= Received: by mail-yb1-f174.google.com with SMTP id 203so32723985yby.10 for ; Mon, 16 Jan 2023 21:58:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=B1UEa3M1jP3y0W29RzNqF9B+ZNIIlo3tNbOA7FKp7Wg=; b=szFCOms07Q53JQEnknyv2QcVn4fy3vBXVmKKspUTNnPlLtZTRF0d428TYfV9jDTsLX ycdeb1Skm451H4kEb5YktOhQk47tSUAqY6ZKdXDHxntmfT/T2YvRnXr8768wBLUZQYsf NloTHm46j/BZ7LoTaIJJF+P9tpVsuTHp1412qVOeK43J5yJ5SNABR1ITdDod7FabVFjH 0vuzHwBnFOhDtgJLMxLErKRZrVlCIUNa6khChg4g51rInsOaIMS3n4wIXMdHkkz6p02s pbHk2LcOHyoWkStGKc3E4jxHxQYWx4SfSGVVdA9DloQ/MHNTDm37A6udp1IgHDbr11kS kSTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=B1UEa3M1jP3y0W29RzNqF9B+ZNIIlo3tNbOA7FKp7Wg=; b=EEiFo/HHrmI1Ga0vsN1lPaKbk3W9YabSujkKAcyDIVB5hW+OAMcRDCEf69BK/ULQXb ro7GBDypkpHuWcvyJ9gy5mfAjVyqr5WegUhK0Irmddz6R67zO19U34Iv+GzNGkZncqni yEaCUL4J2ZcjOTmJorJBHSwvd16H0JvAdaUbc7X7i2XGwQBuJshPXkJSWymgH8F8wi6P +9yGicS0OG2r6ekBcb+GzRZGi//Xkg15ES7m9fYQdVBAyCdcqzKQOnZH7x5t8KUdsWDA FTtwbwrdyahKItVjRngI+kCp/Ny6L3JeMwB4IXpe0nLKfDB79JPWSzquG/Fntgf+bRp3 KIYQ== X-Gm-Message-State: AFqh2kr7mZqQy+Uqq1hHPNnYHYLwS6Yk0j10F33tygKNs7/y8sd4uEJE ZBg6IhU32m0dhjJ0WeuilIF9SoIlro3GyHQRqNfsHg== X-Google-Smtp-Source: AMrXdXvdHf1+toW/1/obAcs98q3sqrmqpnAvEMhZ2E5TLuL8tC57gEqh2hzxqreEm8uMFGnaV8bTWU/bWAWqALbg44k= X-Received: by 2002:a25:f305:0:b0:7b8:6d00:ef23 with SMTP id c5-20020a25f305000000b007b86d00ef23mr296920ybs.119.1673935126396; Mon, 16 Jan 2023 21:58:46 -0800 (PST) MIME-Version: 1.0 References: <20230109205336.3665937-1-surenb@google.com> <20230109205336.3665937-42-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Mon, 16 Jan 2023 21:58:35 -0800 Message-ID: Subject: Re: [PATCH 41/41] mm: replace rw_semaphore with atomic_t in vma_lock To: Matthew Wilcox Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, akpm@linux-foundation.org, michel@lespinasse.org, jglisse@google.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mgorman@techsingularity.net, dave@stgolabs.net, liam.howlett@oracle.com, peterz@infradead.org, ldufour@linux.ibm.com, laurent.dufour@fr.ibm.com, paulmck@kernel.org, luto@kernel.org, songliubraving@fb.com, peterx@redhat.com, david@redhat.com, dhowells@redhat.com, hughd@google.com, bigeasy@linutronix.de, kent.overstreet@linux.dev, punit.agrawal@bytedance.com, lstoakes@gmail.com, peterjung1337@gmail.com, rientjes@google.com, axelrasmussen@google.com, joelaf@google.com, minchan@google.com, jannh@google.com, shakeelb@google.com, tatashin@google.com, edumazet@google.com, gthelen@google.com, gurua@google.com, arjunroy@google.com, soheil@google.com, hughlynch@google.com, leewalsh@google.com, posk@google.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, x86@kernel.org, linux-kernel@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 7747780012 X-Stat-Signature: reqt8f3ag1zq584f3zhap4bji4nutwhw X-Rspam-User: X-HE-Tag: 1673935127-55017 X-HE-Meta: U2FsdGVkX1+TrXdKJVCnxSE2ZQk/h0WdMVzK7ebUoEbSXBiV6nxzb0i0grfE/Kqd2lk2A+KOso93QHkVRbK6Z6u9AFl6rPko5ibA0WD05NPzRxElQJnCwRKd2ty1z+mMF908q5F0w1y99AQTcC/pj5y6dko+a5wdWknqfc02+qzvKpjpHKISzha075vqpxrIyVeh7CW6E1iXkmAm0HSqDQjtl7LEUK8ETosLm/bQOtJyEMbELE0sxCcOBCFZJmo1A1y9r6CKlMl9GZSGKOpexmIRHSY3wB3FC5FrYSWLYf7P9IXn8jP40jcnsthDexzzwslwelsTdbstdczOnR2hW7Y9S9XjApcqrnKt/WRahoUa4/XKJsRJqzzHYQs9QadjnuFRt/bTdvxl5kkHC7MALkAxdmYnwuv+Sx6UF1zzsjFD12QWPDjv4M9B1vtZ1z3KIXGO0sVIupM6nujUhtJVPm88O0WpJBNrEziamYJemBPN+I/IWKQ3HIU/AVQn96Mp7nVHFCS4t9Vay2wH9rWxMwv1UPKna9Jm4ifJz0J0X4Co5icIwcEQApQ6FbNu6FmYQfGflApxQDXaze0GJk5bIt+wWyf7Gv7uAHBdENfEf6LReqi6qh7Tbko4CpfCvuxjwRvZ75S43wj1HA+zp9YSpFwYHKRphOcIcHJLeJfQ7mZ/pMk5TaPZqKX+9vMlk69gU86PBhk8ELwGGOQnH5Pi/NiN1Q1ghM5/8WTOxXnK9xmn37ro7xFuQWjtDgxTVK2vzD/BhJgzRCA7nMG/ctts0eVN328f0QAcUYcFvqAYvxGY+JXjf/qmrNqCjvihOqH3QVt6MXf0kGDyoZtd+WwHDLaEIqfog0Jpy/0RlKETLrySXpIx1fZJII+TMWFCUEjWhVWgY0YLzx/3r+WP63LqnxPpMS5Xt2zSFeuJD/6EANUpsJ9pSVxg2t19Vaocf6hp0KN6YrIpflulIQRb3Wd NqAhiGMi 3cCazIejynROhj0nYYZ/nlXkZbkjeI5NmACU/gZBijIYD8sP9zgg11TwYZxBWr9lJI6oGjYshQ3imw2crTpdWGJBdRL3F4FJ1Ldb5QAmTq56d3Y4nlpw/eT+GJuRDGnWevz3F X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Mon, Jan 16, 2023 at 9:46 PM Matthew Wilcox wrote: > > On Mon, Jan 16, 2023 at 08:34:36PM -0800, Suren Baghdasaryan wrote: > > On Mon, Jan 16, 2023 at 8:14 PM Matthew Wilcox wrote: > > > > > > On Mon, Jan 16, 2023 at 11:14:38AM +0000, Hyeonggon Yoo wrote: > > > > > @@ -643,20 +647,28 @@ static inline void vma_write_lock(struct vm_area_struct *vma) > > > > > static inline bool vma_read_trylock(struct vm_area_struct *vma) > > > > > { > > > > > /* Check before locking. A race might cause false locked result. */ > > > > > - if (vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq)) > > > > > + if (vma->vm_lock->lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq)) > > > > > return false; > > > > > > > > > > - if (unlikely(down_read_trylock(&vma->vm_lock->lock) == 0)) > > > > > + if (unlikely(!atomic_inc_unless_negative(&vma->vm_lock->count))) > > > > > return false; > > > > > > > > > > + /* If atomic_t overflows, restore and fail to lock. */ > > > > > + if (unlikely(atomic_read(&vma->vm_lock->count) < 0)) { > > > > > + if (atomic_dec_and_test(&vma->vm_lock->count)) > > > > > + wake_up(&vma->vm_mm->vma_writer_wait); > > > > > + return false; > > > > > + } > > > > > + > > > > > /* > > > > > * Overflow might produce false locked result. > > > > > * False unlocked result is impossible because we modify and check > > > > > * vma->vm_lock_seq under vma->vm_lock protection and mm->mm_lock_seq > > > > > * modification invalidates all existing locks. > > > > > */ > > > > > - if (unlikely(vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq))) { > > > > > - up_read(&vma->vm_lock->lock); > > > > > + if (unlikely(vma->vm_lock->lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq))) { > > > > > + if (atomic_dec_and_test(&vma->vm_lock->count)) > > > > > + wake_up(&vma->vm_mm->vma_writer_wait); > > > > > return false; > > > > > } > > > > > > > > With this change readers can cause writers to starve. > > > > What about checking waitqueue_active() before or after increasing > > > > vma->vm_lock->count? > > > > > > I don't understand how readers can starve a writer. Readers do > > > atomic_inc_unless_negative() so a writer can always force readers > > > to fail. > > > > I think the point here was that if page faults keep occuring and they > > prevent vm_lock->count from reaching 0 then a writer will be blocked > > and there is no reader throttling mechanism (no max time that writer > > will be waiting). > > Perhaps I misunderstood your description; I thought that a _waiting_ > writer would make the count negative, not a successfully acquiring > writer. A waiting writer does not modify the counter, instead it's placed on the wait queue and the last reader which sets the count to 0 while releasing its read lock will wake it up. Once the writer is woken it will try to set the count to negative and if successful will own the lock, otherwise it goes back to sleep.