NetBSD Problem Report #47562

From martin@duskware.de  Wed Feb 13 10:58:39 2013
Return-Path: <martin@duskware.de>
Received: from mail.netbsd.org (mail.netbsd.org [149.20.53.66])
	by www.NetBSD.org (Postfix) with ESMTP id 45DEF63E5A2
	for <gnats-bugs@gnats.NetBSD.org>; Wed, 13 Feb 2013 10:58:39 +0000 (UTC)
From: martin@NetBSD.org
Reply-To: martin@NetBSD.org
To: gnats-bugs@NetBSD.org
Subject: very slow installworld
X-Send-Pr-Version: 3.95

>Number:         47562
>Category:       toolchain
>Synopsis:       very slow installworld
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    lukem
>State:          analyzed
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Wed Feb 13 11:00:01 +0000 2013
>Closed-Date:    
>Last-Modified:  Thu Jun 15 20:19:59 +0000 2023
>Originator:     Martin Husemann
>Release:        NetBSD 6.99.16
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD thirdstage.duskware.de 6.99.16 NetBSD 6.99.16 (MODULAR) #40: Tue Feb 5 20:22:09 CET 2013 martin@night-porter.duskware.de:/usr/src/sys/arch/sparc64/compile/MODULAR sparc64
Architecture: sparc64
Machine: sparc64
>Description:

Recent changes to mtree/sets installation caused a significant slowdown
of "make installworld", maybe due to a lot of hashes being calculated
and then ignored?

I often mount the source tree and a prebuild DESTDIR via nfs, then do
a "make installworld" on the NFS client machine.

It then does:

installsets ===> distrib/sets   (with: INSTALLDIR=/ INSTALLSETS=)
cd /usr/src/distrib/sets &&  DESTDIR=/mnt  MACHINE=sparc64  MACHINE_ARCH=sparc64  AWK=awk  CKSUM=cksum  DB=db  HOST_SH=/bin/sh  MAKE=make  MKTEMP=mktemp  MTREE=mtree  PAX=pax  COMPRESS_PROGRAM=gzip  PKG_CREATE=pkg_create  SED=sed  TSORT=tsort\ -q  /bin/sh ./maketars -d /mnt    -N /usr/src/etc  -L base,x -i / 
{*LONG PAUSE HERE*}
Copying set base
Copying set comp
...

The "long pause" was there before, but it got significantly longer recently
and on slower machines now can be in the hours magnitude.

I assume this time is spent calculating hash values for mtree output, which
is not realy used during this procedure. While uniformication of the process
is good, this might be a case for an exception.

>How-To-Repeat:
make installworld on a m68k machine ;-)

>Fix:
n/a

>Release-Note:

>Audit-Trail:
From: "Luke Mewburn" <lukem@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/47562 CVS commit: src
Date: Sat, 10 Jun 2023 16:08:41 +0000

 Module Name:	src
 Committed By:	lukem
 Date:		Sat Jun 10 16:08:41 UTC 2023

 Modified Files:
 	src/distrib/sets: Makefile maketars
 	src/share/mk: bsd.own.mk

 Log Message:
 sets: enhance MAKEVERBOSE support

 Add more messages for various sets operations.
 Add ${_MKMSG_CREATE} to bsd.own.mk.

 Enhance maketars to be a bit more verbose even with -q,
 to make it more obvious why certain operations may be slow.
 May help debugging PR 47562.


 To generate a diff of this commit:
 cvs rdiff -u -r1.108 -r1.109 src/distrib/sets/Makefile
 cvs rdiff -u -r1.95 -r1.96 src/distrib/sets/maketars
 cvs rdiff -u -r1.1341 -r1.1342 src/share/mk/bsd.own.mk

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

Responsible-Changed-From-To: toolchain-manager->lukem
Responsible-Changed-By: lukem@NetBSD.org
Responsible-Changed-When: Sat, 10 Jun 2023 17:50:09 +0000
Responsible-Changed-Why:


State-Changed-From-To: open->analyzed
State-Changed-By: lukem@NetBSD.org
State-Changed-When: Sat, 10 Jun 2023 17:50:09 +0000
State-Changed-Why:

I've looked into the history of the mtree/sets installation from before
2013-02-13 (per your "Recent changes" in the description).  I couldn't
see anything specifically obvious.

There were distrib/sets changes around 2013-02-06 by Christos
to use mtree to generate the set lists when the METALOG isn't
present (when MKUNPRIVED=no):
        revision 1.77
        date: 2013-02-06 12:01:12 +1100;  author: christos;  state: Exp;  lines: +8 -8;
        Create full sets using mtree from the flists (not just filenames).

which may be the cause of your "{*LONG PAUSE HERE*}", beacuse
the etc/mtree/sets.* files with their sha256 digests are being
calculated in "installsets" on the (slow) target machine.


In -current I've added more MAKEVERBOSE support into
distrib/sets/Makefile and distrib/sets/maketars;
if you run with MAKEVERBOSE=2 you may get more diagnostic
information to confirm which operations are causing the delays.


I'm not keen on adding an option in distrib/sets to disable
the generation of sha256 in MKUNPRIVED=no installsets, because
then the generation of /etc/mtree/* would then differ from
the MKUNPRIVED=yes equivalent


There's a couple of suggestions to avoid the slow issue:

Rather than explicitly strip out the sha256 in the MKUNPRIVED=no
installsets generation of /etc/mtree/* (which would then
differ from the MKUNPRIVED=yes equivalent), there's a couple
of suggestions to avoid the issue:

1. Cross-build sets on a faster machine and extract those.
   (I assume that's how you built the distribution on nfs?)

2. Cross-build with MKUNPRIVED=yes on a faster machine which
   generates the sha256 as each file is installed.
   Install on the destination with MKUNPRIVED=yes to enable
   using the existing METALOG.

Thoughts?


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: gnats-precook-prs,v 1.4 2018/12/21 14:20:20 maya Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2017 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.