From nobody Sat May 31 18:40:36 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4b8pnw5thQz5xQcF; Sat, 31 May 2025 18:40:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b8pnw5682z3Kyj; Sat, 31 May 2025 18:40:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748716836; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uSdnzAfddzrh1R/W4n9fvIeQTmAcoqGEbS7gjE1LATc=; b=YxR5Yg/ZMTSauUbtLrNerExLA5SfbIlwuGGd6q/ZB/4UgR8+4qdcQkyXUjHDP8We7mdJAp iOAdkfUv+aBu7/ajVkJEo3MNEoq3h+fKNEvqAaCT5ZlsaZF/fPjiB2iTl/R19uI6QoFRxf lC0TVkkMBcNiMuNTPTDJdMB+knSilkn49EgCHPd3lW7zbORRB5l2CAu512wJsuPXjVkRBo 9U/xiczKhy6kF/Sq3SpZNOJ28YaimChHqzNDj3KUCRjMAj9LJgmY5U86es43kuFBQm1zU6 4pnb9QZvUjB5XQU9p/FrCNecDqaOALqWuKjOnm9kve+zdjhmHhst1dhtoiy1Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748716836; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uSdnzAfddzrh1R/W4n9fvIeQTmAcoqGEbS7gjE1LATc=; b=jMf1TnSuzYSkVgJYV3WgwvkoNI2Oj1P/P4ysRChEhOvTu6lxyQCqVoFd/dGYWLw+FmUGF6 tge70Bsc7qBbMWsvQYYGStw8kGNvow9RHWEvFpJKg+j/YQdcpPZCjHhDj2OQPstuBwOMI6 2e54qrQRWpx4nopLvIKsJ+l4ksNiSwgmI1f6bPMs/f/HXViPoSVVCcF6a2JhtpuXkOYJ/h f5uoDjEFBbiRJ6+71gEITGaa3AFskr6u8COC9f7zsK5sp9LnxmGkmknQN8EFn8xICOA/u9 qbLZVvEX72Irqhuw0n1fPYEYQ+0RwZ582PeYBtkKbJqaxIfKHxKOTpiCbFMxbw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748716836; a=rsa-sha256; cv=none; b=o2opkEaUEyWSpEBjEGHbO3I4LUqY5pgR6F2hxqF9E/3dNGPL7H4ueA+my0la6GIqk9RMaq UEHLnQ62ANo9VwOxN91N2Q7JSLaQgJnmtYQu638zjHEFQdgDgCE4cXXFdh/VN69rLFkj2o AODULfFRfKqoVWlplZ8vQrGVyJ4Xd85oidh2oZEM71Y73MMl14ajlHV/Je9XteZBmS5OND 6//D1IQpKq0ekKm/21/KKm5PhLrVHh85fwCJZOS4h9Y0Xog2UmBNqTILQJZ+SApVjixVfN 3mUuSGhceC1btkP5uB/9hlfVxNvMVInwfibYiQn/3IDxHYx+IVRfrHY8x5eW9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4b8pnw4Z0hzqVF; Sat, 31 May 2025 18:40:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54VIeaa7091631; Sat, 31 May 2025 18:40:36 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54VIeaPT091628; Sat, 31 May 2025 18:40:36 GMT (envelope-from git) Date: Sat, 31 May 2025 18:40:36 GMT Message-Id: <202505311840.54VIeaPT091628@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Doug Moore Subject: git: 6dd1c0643e9c - main - vm_page: use lookup_ge in grab_valid_iter() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dougm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6dd1c0643e9c5562d8b09c41fc792129a8081f06 Auto-Submitted: auto-generated The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=6dd1c0643e9c5562d8b09c41fc792129a8081f06 commit 6dd1c0643e9c5562d8b09c41fc792129a8081f06 Author: Doug Moore AuthorDate: 2025-05-31 18:37:33 +0000 Commit: Doug Moore CommitDate: 2025-05-31 18:37:33 +0000 vm_page: use lookup_ge in grab_valid_iter() To improve performance slightly, use vm_radix_iter_lookup_ge to skip over several missing pages at once in grab_valid_iter(). Fix a case in which the function could return with the iterator argument not reset after a lock release/reacquire. Reviewed by: alc, markj Differential Revision: https://reviews.freebsd.org/D50601 --- sys/vm/vm_page.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index a3ebc92175f8..79eaf8563208 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -4882,7 +4882,7 @@ vm_page_grab_valid_iter(vm_page_t *mp, vm_object_t object, vm_pindex_t pindex, { vm_page_t m; vm_page_t ma[VM_INITIAL_PAGEIN]; - int after, i, pflags, rv; + int after, ahead, i, pflags, rv; KASSERT((allocflags & VM_ALLOC_SBUSY) == 0 || (allocflags & VM_ALLOC_IGN_SBUSY) != 0, @@ -4942,13 +4942,18 @@ retrylookup: ma[0] = m; pctrie_iter_reset(pages); for (i = 1; i < after; i++) { - m = vm_radix_iter_lookup(pages, pindex + i); - if (m == NULL) { - m = vm_page_alloc_iter(object, pindex + i, + m = vm_radix_iter_lookup_ge(pages, pindex + i); + ahead = after; + if (m != NULL) + ahead = MIN(ahead, m->pindex - pindex); + for (; i < ahead; i++) { + ma[i] = vm_page_alloc_iter(object, pindex + i, VM_ALLOC_NORMAL, pages); - if (m == NULL) + if (ma[i] == NULL) break; - } else if (vm_page_any_valid(m) || !vm_page_tryxbusy(m)) + } + if (m == NULL || m->pindex != pindex + i || + vm_page_any_valid(m) || !vm_page_tryxbusy(m)) break; ma[i] = m; } @@ -4956,6 +4961,7 @@ retrylookup: vm_object_pip_add(object, after); VM_OBJECT_WUNLOCK(object); rv = vm_pager_get_pages(object, ma, after, NULL, NULL); + pctrie_iter_reset(pages); VM_OBJECT_WLOCK(object); vm_object_pip_wakeupn(object, after); /* Pager may have replaced a page. */ @@ -4975,8 +4981,8 @@ retrylookup: MPASS(vm_page_all_valid(m)); } else { vm_page_zero_invalid(m, TRUE); + pctrie_iter_reset(pages); } - pctrie_iter_reset(pages); out: if ((allocflags & VM_ALLOC_WIRED) != 0) vm_page_wire(m);