increase hibernate writeout speed a little. modern machines have vast
authorderaadt <deraadt@openbsd.org>
Mon, 30 Aug 2021 09:45:29 +0000 (09:45 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 30 Aug 2021 09:45:29 +0000 (09:45 +0000)
tracts of unused memory, and the empty-space RLE scanner (uvm_page_rle)
would rescan for empty space needlessly wasting excessive cpu time
16G machine, 100sec -> 9sec
40G machine, 325sec -> 28sec
with kettenis mlarkin

sys/kern/subr_hibernate.c

index a72e7fa..e84b27a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: subr_hibernate.c,v 1.127 2021/07/08 23:19:51 mlarkin Exp $    */
+/*     $OpenBSD: subr_hibernate.c,v 1.128 2021/08/30 09:45:29 deraadt Exp $    */
 
 /*
  * Copyright (c) 2011 Ariane van der Steldt <ariane@stack.nl>
@@ -541,9 +541,10 @@ uvm_page_rle(paddr_t addr)
         * therefore pg->fpgsz cannot be used.
         */
        for (pg_end = pg; pg_end <= vmp->lastpg &&
-           (pg_end->pg_flags & PQ_FREE) == PQ_FREE; pg_end++)
+           (pg_end->pg_flags & PQ_FREE) == PQ_FREE &&
+           (pg_end - pg) < HIBERNATE_CHUNK_SIZE/PAGE_SIZE; pg_end++)
                ;
-       return min((pg_end - pg), HIBERNATE_CHUNK_SIZE/PAGE_SIZE);
+       return pg_end - pg;
 }
 
 /*