Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 06 Jul 2007 09:45:06 -0700
From:      Tim Kientzle <kientzle@freebsd.org>
To:        Garrett Cooper <youshi10@u.washington.edu>
Cc:        ports@freebsd.org, hackers@freebsd.org
Subject:   Re: Finding slowdowns in pkg_install (continuations of	previous	threads)
Message-ID:  <468E7192.8030105@freebsd.org>
In-Reply-To: <468E6C81.4060908@u.washington.edu>
References:  <468C96C0.1040603@u.washington.edu>	<468C9718.1050108@u.washington.edu> <468E60E9.80507@freebsd.org> <468E6C81.4060908@u.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
>    -I tried ... buffering ...  the +CONTENTS file parsing function, and the
> majority of the time it yielded good results ....

One approach I prototyped sometime back was to use
libarchive in pkg_add as follows:
   * Open the archive
   * Read +CONTENTS directly into memory (it's
guaranteed to always be first in the archive)
   * Parse all of +CONTENTS at once
   * Continue scanning the archive, disposing
of each file as it appears in the archive.

Based on my experience with this, I would
suggest you just read all of +CONTENTS
directly into memory at once and parse
the whole thing in a single shot.
fopen(), then fstat() to get the size,
then allocate a buffer and read the whole
thing, then fclose().  You can then
parse it all at once.

As a bonus, your parser then becomes a nice
little bit of reusable code that reads
a block of memory and returns a structure describing
the package metadata.

Tim Kientzle



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?468E7192.8030105>