Print this page
9525 kmem_dump_size is a corrupting influence
*** 19,29 ****
* CDDL HEADER END
*/
/*
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2016 Joyent, Inc.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/systm.h>
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2018 Joyent, Inc.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/systm.h>
*** 72,81 ****
--- 72,83 ----
#include <sys/clock_impl.h>
#include <sys/hold_page.h>
#include <bzip2/bzlib.h>
+ #define ONE_GIG (1024 * 1024 * 1024UL)
+
/*
* Crash dump time is dominated by disk write time. To reduce this,
* the stronger compression method bzip2 is applied to reduce the dump
* size and hence reduce I/O time. However, bzip2 is much more
* computationally expensive than the existing lzjb algorithm, so to
*** 136,146 ****
#define MINCPU_NOT_SET ((uint_t)-1)
uint_t dump_plat_mincpu = MINCPU_NOT_SET;
/* tunables for pre-reserved heap */
uint_t dump_kmem_permap = 1024;
! uint_t dump_kmem_pages = 8;
/* Define multiple buffers per helper to avoid stalling */
#define NCBUF_PER_HELPER 2
#define NCMAP_PER_HELPER 4
--- 138,148 ----
#define MINCPU_NOT_SET ((uint_t)-1)
uint_t dump_plat_mincpu = MINCPU_NOT_SET;
/* tunables for pre-reserved heap */
uint_t dump_kmem_permap = 1024;
! uint_t dump_kmem_pages = 0;
/* Define multiple buffers per helper to avoid stalling */
#define NCBUF_PER_HELPER 2
#define NCMAP_PER_HELPER 4
*** 677,691 ****
new->maxvm = vmem_xalloc(heap_arena, new->maxvmsize,
CBUF_MAPSIZE, 0, 0, NULL, NULL, VM_SLEEP);
}
/*
! * Reserve memory for kmem allocation calls made during crash
! * dump. The hat layer allocates memory for each mapping
! * created, and the I/O path allocates buffers and data structs.
! * Add a few pages for safety.
*/
kmem_dump_init((new->ncmap * dump_kmem_permap) +
(dump_kmem_pages * PAGESIZE));
/* set new config pointers */
*old = *new;
--- 679,705 ----
new->maxvm = vmem_xalloc(heap_arena, new->maxvmsize,
CBUF_MAPSIZE, 0, 0, NULL, NULL, VM_SLEEP);
}
/*
! * Reserve memory for kmem allocation calls made during crash dump. The
! * hat layer allocates memory for each mapping created, and the I/O path
! * allocates buffers and data structs.
! *
! * On larger systems, we easily exceed the lower amount, so we need some
! * more space; the cut-over point is relatively arbitrary. If we run
! * out, the only impact is that kmem state in the dump becomes
! * inconsistent.
*/
+
+ if (dump_kmem_pages == 0) {
+ if (physmem > (16 * ONE_GIG) / PAGESIZE)
+ dump_kmem_pages = 20;
+ else
+ dump_kmem_pages = 8;
+ }
+
kmem_dump_init((new->ncmap * dump_kmem_permap) +
(dump_kmem_pages * PAGESIZE));
/* set new config pointers */
*old = *new;