The branch main has been updated by dougm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=18a62137df40da29d2258e024a778ee559dedd30

commit 18a62137df40da29d2258e024a778ee559dedd30
Author:     Doug Moore <do...@freebsd.org>
AuthorDate: 2025-05-28 05:33:43 +0000
Commit:     Doug Moore <do...@freebsd.org>
CommitDate: 2025-05-28 05:33:43 +0000

    vm_object: use lookup_range in page_clean_flush
    
    In vm_object_page_clean_flush, replace the loop that uses
    vm_radix_iter_next to visit consecutive pages with a call to
    vm_radix_iter_lookup_range, then a loop to check the pages looked-up.
    This achieves a small performance improvement.
    
    Reviewed by:    alc
    Differential Revision:  https://reviews.freebsd.org/D50425
---
 sys/vm/vm_object.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 9b00aea9cdc8..1d372ba04488 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -1008,15 +1008,16 @@ vm_object_page_clean_flush(struct pctrie_iter *pages, 
vm_page_t p,
        vm_page_lock_assert(p, MA_NOTOWNED);
        vm_page_assert_xbusied(p);
        ma[0] = p;
-       for (count = 1; count < vm_pageout_page_count; count++) {
-               p = vm_radix_iter_next(pages);
-               if (p == NULL || vm_page_tryxbusy(p) == 0)
+       runlen = vm_radix_iter_lookup_range(pages, p->pindex + 1,
+           &ma[1], vm_pageout_page_count - 1);
+       for (count = 1; count <= runlen; count++) {
+               p = ma[count];
+               if (vm_page_tryxbusy(p) == 0)
                        break;
                if (!vm_object_page_remove_write(p, flags, allclean)) {
                        vm_page_xunbusy(p);
                        break;
                }
-               ma[count] = p;
        }
 
        vm_pageout_flush(ma, count, pagerflags, 0, &runlen, eio);

Reply via email to