From owner-freebsd-hackers@FreeBSD.ORG Mon Jan 12 19:57:48 2015 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 565309BA for ; Mon, 12 Jan 2015 19:57:48 +0000 (UTC) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0059.outbound.protection.outlook.com [157.56.110.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E9E93347 for ; Mon, 12 Jan 2015 19:57:47 +0000 (UTC) Received: from DM2PR0801MB0944.namprd08.prod.outlook.com (25.160.131.27) by DM2PR0801MB0942.namprd08.prod.outlook.com (25.160.131.25) with Microsoft SMTP Server (TLS) id 15.1.53.17; Mon, 12 Jan 2015 19:43:23 +0000 Received: from DM2PR0801MB0944.namprd08.prod.outlook.com ([25.160.131.27]) by DM2PR0801MB0944.namprd08.prod.outlook.com ([25.160.131.27]) with mapi id 15.01.0053.000; Mon, 12 Jan 2015 19:43:23 +0000 From: "Pokala, Ravi" To: "freebsd-hackers@freebsd.org" Subject: Re: [PATCH] Display progress during getmemsize() so the kernel doesn't look like it hanged Thread-Topic: [PATCH] Display progress during getmemsize() so the kernel doesn't look like it hanged Thread-Index: AQHQLqAF6jIVY6e0Rka/enbEqt4SMA== Date: Mon, 12 Jan 2015 19:43:22 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.7.141117 x-originating-ip: [64.80.217.3] authentication-results: spf=none (sender IP is ) smtp.mailfrom=rpokala@panasas.com; x-dmarcaction-test: None x-microsoft-antispam: BCL:0;PCL:0;RULEID:(3005003);SRVR:DM2PR0801MB0942; x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:; SRVR:DM2PR0801MB0942; x-forefront-prvs: 0454444834 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(51704005)(13464003)(377424004)(24454002)(164054003)(199003)(189002)(68736005)(2900100001)(122556002)(64706001)(40100003)(102836002)(62966003)(77156002)(450100001)(99286002)(110136001)(101416001)(66066001)(107886001)(2351001)(106116001)(105586002)(83506001)(86362001)(19580395003)(19580405001)(106356001)(54356999)(50986999)(92566002)(46102003)(2656002)(512944002)(87936001)(97736003)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0801MB0942; H:DM2PR0801MB0944.namprd08.prod.outlook.com; FPR:; SPF:None; MLV:sfv; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: panasas.com does not designate permitted sender hosts) Content-Type: text/plain; charset="us-ascii" Content-ID: <039C518E66EF3A42B2C12380A5170966@namprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: panasas.com X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jan 2015 19:43:22.2759 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: acf01c9d-c699-42af-bdbb-44bf582e60b0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0801MB0942 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jan 2015 19:57:48 -0000 -----Original Message----- >Date: Mon, 12 Jan 2015 00:27:18 -0500 >From: Allan Jude >To: freebsd-hackers@freebsd.org >Subject: Re: [PATCH] Display progress during getmemsize() so the > kernel doesn't look like it hanged >Message-ID: <54B35B36.4040504@freebsd.org> >Content-Type: text/plain; charset=3D"windows-1252" > >On 2015-01-12 00:24, Pokala, Ravi wrote: >> Hi folks, >>=20 >> 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. >>=20 >> Thanks, >>=20 >> Ravi >>=20 >>=20 >> >>... =20 >>=20 >>=20 >> >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=3D0 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=3D0? You're right; when I set hw.memtest.tests=3D0, 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 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D 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 =3D ((1024 * 1024) / PAGE_SIZE); + int PAGES_PER_GB =3D (PAGES_PER_MB * 1024); =20 bzero(physmap, sizeof(physmap)); basemem =3D 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 =3D 0; for (i =3D 0; i <=3D physmap_idx; i +=3D 2) { vm_paddr_t end; =20 @@ -1661,6 +1666,14 @@ int tmp, page_bad, full; int *ptr =3D (int *)CADDR1; =20 + /* + * Print a "." every GB, to show we're making progress + */ + page_counter++; + if ((page_counter % PAGES_PER_GB) =3D=3D 0) { + printf("."); + } + full =3D 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 =3D 0; invltlb(); =20