From: Larry McVoy <lm@bitmover.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>,
Larry McVoy <lm@bitmover.com>, Keith Owens <kaos@ocs.com.au>,
"Eric S. Raymond" <esr@thyrsus.com>, Dave Jones <davej@suse.de>,
"Eric S. Raymond" <esr@snark.thyrsus.com>,
Linus Torvalds <torvalds@transmeta.com>,
Marcelo Tosatti <marcelo@conectiva.com.br>,
linux-kernel@vger.kernel.org, kbuild-devel@lists.sourceforge.net
Subject: Re: State of the new config & build system
Date: Fri, 28 Dec 2001 12:54:51 -0800 [thread overview]
Message-ID: <20011228125451.E4077@work.bitmover.com> (raw)
In-Reply-To: <20011227180148.A3727@work.bitmover.com> <E16JxmP-0000Yo-00@the-village.bc.nu> <20011228094318.B3727@work.bitmover.com>
In-Reply-To: <20011228094318.B3727@work.bitmover.com>; from lm@bitmover.com on Fri, Dec 28, 2001 at 09:43:19AM -0800
More numbers. I coded up a little program (included below) which
reads paths from stdin, lstats() them, and builds an MDBM of inode ->
pathname entries. I ran that 10 times on the 2.4 kernel, which had 8679
files matching *.[chSs]. I did a little tuning of page size and inital
DB size (reduces page split costs) and got it down to 105 millisecs from
200, so we're at 12 usecs per item. Then I removed the mdbm_store()
call so I was doing everything except that. That took 7 usecs/item.
Write path summary: the mdbm_store() cost is about 5 usecs/item, which
is about right. To build a DB of the same number of items as source
files in the kernel should cost less than 50 milliseconds for the DB
part of the work. In other words, it's basically free.
OK, on to the read path. I generated the list of inodes as an ascii file
and wrote another program to open the mdbm and fetch each one. Ran that
10 times, it cost 40 milliseconds to look up all the items, so that's
about 4 usecs/item including the read of the data from stdin. That's
slower than I think it should be and I may go look to see what is going
on, but it's plenty fast for the config/build system.
Here's the code. Sorry about the perlisms, wait, no I'm not, I like those,
but it will make you look at it twice before it makes sense.
------------------------------------------------------------------------------
/*
* inode.c - create an MDBM of inode -> path mappings
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include "mdbm.h"
#define unless(x) if (!(x))
#define fnext(buf, f) fgets(buf, sizeof(buf), f)
#define u32 unsigned int
void
chomp(char *s)
{
unless (s && *s) return;
while (*s && (*s != '\n')) s++;
*s = 0;
}
u32
inode(char *path)
{
struct stat sb;
if (lstat(path, &sb)) return (0);
return ((u32)sb.st_ino);
}
int
main()
{
char buf[1024];
MDBM *m;
datum k, v;
u32 ino;
unlink("ino.mdbm");
unless (m = mdbm_open("ino.mdbm", O_RDWR|O_CREAT, 0644, 4<<10)) {
perror("ino.mdbm");
exit(1);
}
mdbm_pre_split(m, 128);
while (fnext(buf, stdin)) {
chomp(buf);
unless (ino = inode(buf)) {
perror(buf);
continue;
}
printf("%u\n", ino);
k.dptr = (void*)&ino;
k.dsize = sizeof(u32);
v.dptr = buf;
v.dsize = strlen(buf) + 1;
if (mdbm_store(m, k, v, MDBM_INSERT)) {
perror(buf);
exit(1);
}
}
mdbm_close(m);
exit(0);
}
------------------------------------------------------------------------------
/*
* read.c - read items from the mdbm
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include "mdbm.h"
#define unless(x) if (!(x))
#define fnext(buf, f) fgets(buf, sizeof(buf), f)
#define u32 unsigned int
int
main()
{
char buf[1024];
MDBM *m;
datum k, v;
u32 ino;
unless (m = mdbm_open("ino.mdbm", O_RDONLY, 0644, 0)) {
perror("ino.mdbm");
exit(1);
}
while (fnext(buf, stdin)) {
ino = atoi(buf);
continue;
k.dptr = (void*)&ino;
k.dsize = sizeof(u32);
v = mdbm_fetch(m, k);
unless (v.dsize) {
perror(buf);
exit(1);
}
}
mdbm_close(m);
exit(0);
}
next prev parent reply other threads:[~2001-12-28 20:55 UTC|newest]
Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-28 0:24 State of the new config & build system Eric S. Raymond
2001-12-28 0:54 ` Dave Jones
2001-12-28 0:57 ` Eric S. Raymond
2001-12-28 1:15 ` Larry McVoy
2001-12-28 1:35 ` Keith Owens
2001-12-28 1:37 ` Larry McVoy
2001-12-28 1:41 ` Keith Owens
2001-12-28 1:47 ` Larry McVoy
2001-12-28 1:57 ` Keith Owens
2001-12-28 2:01 ` Larry McVoy
2001-12-28 14:14 ` Alan Cox
2001-12-28 14:16 ` Keith Owens
2001-12-28 17:14 ` Christer Weinigel
2001-12-28 17:39 ` Alan Cox
2001-12-29 1:44 ` Keith Owens
2001-12-29 4:09 ` Legacy Fishtank
2001-12-30 3:34 ` Viktor Rosenfeld
2001-12-30 4:24 ` Dave Jones
2001-12-30 14:37 ` Viktor Rosenfeld
2001-12-29 17:11 ` Christer Weinigel
2001-12-28 17:43 ` Larry McVoy
2001-12-28 18:17 ` Alan Cox
2001-12-28 20:54 ` Larry McVoy [this message]
2001-12-29 9:24 ` Anton Blanchard
2001-12-29 16:28 ` Larry McVoy
2002-01-01 4:03 ` Mike Touloumtzis
2002-01-01 8:26 ` Keith Owens
2002-01-06 8:55 ` [kbuild-devel] " Martin Mares
2002-01-06 22:19 ` Keith Owens
2002-01-09 17:16 ` Martin Mares
2002-01-01 8:55 ` Peter Samuelson
2001-12-28 22:31 ` Martin Dalecki
2001-12-28 23:02 ` Eric S. Raymond
2001-12-28 14:24 ` Alan Cox
2001-12-28 20:56 ` Kai Germaschewski
2001-12-28 21:16 ` Legacy Fishtank
2001-12-28 22:17 ` Linus Torvalds
2001-12-28 23:44 ` Kai Germaschewski
2001-12-30 12:05 ` [kbuild-devel] " Christoph Hellwig
2001-12-29 1:27 ` Keith Owens
2001-12-29 1:53 ` Alan Cox
2001-12-29 1:57 ` Keith Owens
2001-12-29 2:10 ` Alan Cox
2001-12-29 4:06 ` Legacy Fishtank
2001-12-29 13:32 ` Rik van Riel
2001-12-29 20:23 ` Linus Torvalds
2001-12-29 1:26 ` Keith Owens
2001-12-29 3:58 ` Legacy Fishtank
2001-12-29 4:21 ` Mike Castle
2001-12-29 4:44 ` Keith Owens
2001-12-29 4:52 ` Arnaldo Carvalho de Melo
2001-12-29 11:10 ` PORTUGUês EM?? Astinus
2001-12-29 6:59 ` State of the new config & build system Nicholas Knight
2001-12-29 7:42 ` Miles Lane
2001-12-29 8:02 ` Nicholas Knight
2001-12-29 8:11 ` Mike Castle
2001-12-29 7:41 ` Legacy Fishtank
2001-12-29 8:13 ` Andrew Morton
2001-12-29 9:40 ` Daniel Phillips
2002-01-03 10:46 ` Pavel Machek
2002-01-03 20:29 ` Dave Jones
2002-01-03 20:35 ` Alexander Viro
2002-01-03 20:46 ` Keith Owens
2002-01-03 21:30 ` Alexander Viro
2002-01-03 21:50 ` Keith Owens
2002-01-03 22:11 ` Alexander Viro
2002-01-03 22:44 ` Keith Owens
2002-01-04 1:49 ` Andreas Bombe
2002-01-04 2:31 ` Keith Owens
2002-01-04 21:40 ` Andreas Bombe
2001-12-28 22:51 ` Larry McVoy
2001-12-29 2:54 ` Keith Owens
2001-12-29 12:43 ` Kai Germaschewski
2001-12-28 1:22 ` Dave Jones
2001-12-28 1:36 ` [kbuild-devel] " Tom Rini
2001-12-28 1:36 ` Eric S. Raymond
2001-12-28 1:38 ` Keith Owens
2001-12-28 1:30 ` [kbuild-devel] " Keith Owens
2001-12-28 9:26 ` Legacy Fishtank
2001-12-28 9:42 ` Keith Owens
2001-12-28 16:34 ` Alan Cox
2001-12-28 20:01 ` Larry McVoy
2001-12-28 20:38 ` Richard Gooch
2001-12-29 0:50 ` Keith Owens
2001-12-29 0:55 ` Larry McVoy
2001-12-28 18:02 ` Linus Torvalds
2001-12-28 18:24 ` Alan Cox
2001-12-28 22:06 ` Linus Torvalds
2001-12-28 22:08 ` [kbuild-devel] " Eric S. Raymond
2001-12-28 22:29 ` Larry McVoy
2001-12-28 22:29 ` Linus Torvalds
2001-12-28 22:58 ` Eric S. Raymond
2001-12-29 9:18 ` Giacomo A. Catenazzi
2001-12-31 22:51 ` Horst von Brand
2001-12-31 22:55 ` Arnaldo Carvalho de Melo
2002-01-01 1:21 ` Peter Samuelson
2001-12-28 19:08 ` Riley Williams
2001-12-28 19:12 ` Eric S. Raymond
2001-12-28 20:26 ` Alexander Viro
2001-12-28 20:39 ` Eric S. Raymond
2001-12-30 13:58 ` [kbuild-devel] " Christoph Hellwig
2001-12-30 17:50 ` Jeff Garzik
2001-12-30 20:53 ` Hartmut Holz
2001-12-30 20:15 ` Adrian Bunk
2002-01-01 4:29 ` Horst von Brand
2001-12-31 23:32 ` Horst von Brand
2001-12-28 23:20 ` Alan Cox
2001-12-30 11:42 ` [kbuild-devel] " Kai Henningsen
2001-12-31 8:24 ` GOTO Masanori
2001-12-31 6:50 ` GOTO Masanori
2001-12-28 22:11 ` Linus Torvalds
2001-12-28 22:31 ` Eric S. Raymond
2001-12-29 21:24 ` [kbuild-devel] " Tom Rini
2001-12-29 22:43 ` Eric S. Raymond
2001-12-29 23:12 ` Tom Rini
2001-12-30 0:22 ` Russell King
2001-12-30 0:11 ` Eric S. Raymond
2001-12-30 5:39 ` Rob Landley
2001-12-30 13:59 ` Alan Cox
2001-12-30 17:14 ` David Woodhouse
2001-12-30 17:32 ` Tom Rini
2001-12-30 17:44 ` Russell King
2001-12-28 20:39 ` Legacy Fishtank
2001-12-28 20:41 ` Legacy Fishtank
2001-12-28 20:45 ` Eric S. Raymond
2001-12-28 21:19 ` Legacy Fishtank
2001-12-28 21:12 ` Eric S. Raymond
2001-12-28 22:27 ` Linus Torvalds
2001-12-28 23:05 ` Benjamin LaHaise
2001-12-29 0:59 ` Legacy Fishtank
2001-12-29 19:12 ` Linus Torvalds
2001-12-29 3:21 ` [kbuild-devel] " Keith Owens
2001-12-28 23:13 ` Alan Cox
2001-12-28 23:04 ` Eric S. Raymond
2001-12-28 23:10 ` Linus Torvalds
2001-12-28 23:12 ` Martin Dalecki
2001-12-29 13:01 ` Rik van Riel
2001-12-28 22:47 ` Martin Dalecki
-- strict thread matches above, loose matches on Subject: below --
2001-12-28 23:25 Stewart Smith
2001-12-29 12:01 Wayne.Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20011228125451.E4077@work.bitmover.com \
--to=lm@bitmover.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=davej@suse.de \
--cc=esr@snark.thyrsus.com \
--cc=esr@thyrsus.com \
--cc=kaos@ocs.com.au \
--cc=kbuild-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox