[PATCH] Display progress during getmemsize() so the kernel doesn't look like it hanged

Patrick Powell papowell at astart.com
Tue Jan 13 15:22:33 UTC 2015


On 01/12/15 11:43, Pokala, Ravi wrote:
> -----Original Message-----
>> Date: Mon, 12 Jan 2015 00:27:18 -0500
>> From: Allan Jude <allanjude at freebsd.org>
>> To: freebsd-hackers at freebsd.org
>> Subject: Re: [PATCH] Display progress during getmemsize() so the
>> 	kernel doesn't look like it hanged
>> Message-ID: <54B35B36.4040504 at freebsd.org>
>> Content-Type: text/plain; charset="windows-1252"
>>
>> On 2015-01-12 00:24, Pokala, Ravi wrote:
>>> Hi folks,
>>>
>>> Several of us have noticed that there's a long pause at the start of
>>> booting the kernel on amd64 systems with large amounts of RAM. During
>>> This pause, the kernel is mapping in the memory ranges, but does not
>>> emit any progress indicators. Because this can take quite a while, it
>>> can look like the kernel has hung. I filed PR 196650 about this issue;
>>> this patch just prints out a dot for every GB that's mapped in. We've
>>> been using this patch for years at Panasas, and I'm hoping someone can
>>> submit it for me.
>>>
>>> Thanks,
>>>
>>> Ravi
>>>
>>>
>>>
>>> ...
>>>
>>>
>>>
>> Which version(s) of FreeBSD were you seeing this delay on?
> We first noted it with 7.2, because that's what we used on our first amd64
> systems with > 4GB RAM. We're still seeing it with 10.1.
>
>> I know older versions had it, quite badly.
>>
>> setting hw.memtest.tests=0 in /boot/loader.conf makes most of the delay
>> go away, and the default on -CURRENT is now 0 instead of 1.
>>
>> IIRC, in 10, it defaults to 1, but is switched to 0 in the case of
>> virtual machines, because touching every page of memory ruined memory
>> over-commit type features.
>>
>> Is this feature still useful with memtest.tests=0?
> You're right; when I set hw.memtest.tests=0, the pause goes away in 10.1.
> I thought it defaulted to 0 in 10.1.
>
> So that changes this slightly - could we either change the default in
> 10-STABLE, or commit the following patch against 10-STABLE?
>
> Thanks,
>
> Ravi
>
>
> Index: sys/amd64/amd64/machdep.c
> ===================================================================
> diff --git a/stable/10/sys/amd64/amd64/machdep.c
> b/stable/10/sys/amd64/amd64/machdep.c
> --- a/stable/10/sys/amd64/amd64/machdep.c	(revision 277085)
> +++ b/stable/10/sys/amd64/amd64/machdep.c	(working copy)
> @@ -1541,6 +1541,9 @@
>   	struct bios_smap *smapbase;
>   	struct efi_map_header *efihdr;
>   	quad_t dcons_addr, dcons_size;
> +	u_int32_t page_counter;
> +	int PAGES_PER_MB = ((1024 * 1024) / PAGE_SIZE);
> +	int PAGES_PER_GB = (PAGES_PER_MB * 1024);
>   
>   	bzero(physmap, sizeof(physmap));
>   	basemem = 0;
> @@ -1651,6 +1654,8 @@
>   	 * physmap is in bytes, so when converting to page boundaries,
>   	 * round up the start address and round down the end address.
>   	 */
> +	printf("Mapping system memory");
> +	page_counter = 0;
>   	for (i = 0; i <= physmap_idx; i += 2) {
>   		vm_paddr_t end;
>   
> @@ -1661,6 +1666,14 @@
>   			int tmp, page_bad, full;
>   			int *ptr = (int *)CADDR1;
>   
> +			/*
> +			 * Print a "." every GB, to show we're making progress
> +			 */
> +			page_counter++;
> +			if ((page_counter % PAGES_PER_GB) == 0) {
> +				printf(".");
> +			}
> +
>   			full = FALSE;
>   			/*
>   			 * block out kernel memory as not available.
> @@ -1765,6 +1778,9 @@
>   				break;
>   		}
>   	}
> +	printf("\nMapped %d GB + %d MB total\n",
> +	    (page_counter / PAGES_PER_GB),
> +	    ((page_counter % PAGES_PER_GB) / PAGES_PER_MB));
>   	*pte = 0;
>   	invltlb();
>   
>
>
>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
I like the idea of the busy dots.  It would make new sysadmins doing 
installs feel much happier when the system pauses for a couple of 
minutes during boot.

Patrick ("Its dead, Jim!"  "Its not dead, its just checking memory.") Powell

-- 
Patrick Powell                 Astart Technologies
papowell at astart.com            1530 Jamacha Rd, Suite X
Network and System             San Diego, CA 92019
   Consulting                   858-874-6543 FAX 858-751-2435
Web: www.astart.com



More information about the freebsd-hackers mailing list