Date: Wed, 9 Dec 2009 15:31:42 -0500 From: John Baldwin <jhb@freebsd.org> To: Matt Reimer <mattjreimer@gmail.com> Cc: freebsd-fs@freebsd.org Subject: Re: PATCH: increase heap size for (gpt)zfsboot Message-ID: <200912091531.42421.jhb@freebsd.org> In-Reply-To: <f383264b0912091000r714dff84pa55e70b64af7ff52@mail.gmail.com> References: <f383264b0912071601p3bfab229rd1b282b80db2aff6@mail.gmail.com> <200912091015.15450.jhb@freebsd.org> <f383264b0912091000r714dff84pa55e70b64af7ff52@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 09 December 2009 1:00:47 pm Matt Reimer wrote: > On Wed, Dec 9, 2009 at 7:15 AM, John Baldwin <jhb@freebsd.org> wrote: > > On Tuesday 08 December 2009 6:06:14 pm Matt Reimer wrote: > >> On Tue, Dec 8, 2009 at 5:13 AM, John Baldwin <jhb@freebsd.org> wrote: > >> > On Monday 07 December 2009 7:01:03 pm Matt Reimer wrote: > >> >> Enlarge the heap size for gptzfsboot and zfsboot. This is necessary so > >> >> the ZFS code has enough memory to handle decompression and error > >> >> recovery. > >> >> > >> >> Before this patch the heap grew from the end of the (gpt)zfsboot code > >> >> and static data up to 640KB, possibly overrunning the stack. Now the > >> >> heap is located at 16MB-64MB. > >> >> > >> >> Note that this requires machines with at least 64MB RAM, but this is > >> >> not likely to be a problem on any machine running ZFS. > >> >> > >> >> Sponsored by: VPOP Technologies, Inc. > >> >> > >> >> Matt Reimer > >> > > >> > Unfortunately the 16M - 64M range may not all be useable RAM. It may contain > >> > ACPI tables, etc. A robust approach would involve walking the SMAP, etc. I > >> > just committed some changes to sys/boot/i386/loader/biosmem.c that make it > >> > smarter about choosing a heap region. I suggest adopting that algorithm for > >> > figuring out a safe heap range. zfsboot and gptzfsboot should have enough > >> > free space to take the bios_getmem() function. You can increase the minimum > >> > heap size beyond 3M if desired (though 3M is the minimum the loader will > >> > guarantee currently, and if ZFS needs more than that it likely needs to be > >> > changed in both places). > >> > >> Thanks John. I dropped the bios_getmem() into zfsboot.c and it works > >> for me. How's the attached patch look to you? > > > > I tweaked it slightly (memtop* aren't needed for gptboot, and memsize() isn't > > used anymore). Can you test the updated version below? > > It works. But making bios_getmem() inline causes a compiler warning: > > /usr/src/sys/boot/i386/gptzfsboot/../zfsboot/zfsboot.c: In function 'main': > /usr/src/sys/boot/i386/gptzfsboot/../zfsboot/zfsboot.c:353: warning: > inlining failed in call to 'bios_getmem': --param > max-inline-insns-single limit reached > /usr/src/sys/boot/i386/gptzfsboot/../zfsboot/zfsboot.c:620: warning: > called from here Ok, the inline is probably not needed for zfsboot since it isn't quite as space constrained. I will commit it w/o the inline. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912091531.42421.jhb>