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>