* building initramfs is slow
@ 2011-08-18 18:18 John Reiser
[not found] ` <CALAkbJOkMTQdkmhBBvqHk3oKRzMHvXcp1MxasMrMpCbTP3+0eg@mail.gmail.com>
[not found] ` <4E4D5779.6090209-Po6cBsTGB2ZWk0Htik3J/w@public.gmane.org>
0 siblings, 2 replies; 10+ messages in thread
From: John Reiser @ 2011-08-18 18:18 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
Building an initramfs is unreasonably slow. On Fedora 16
dracut-011 takes almost a minute when installing a new kernel:
real 56s
user 20s \__ dracut is CPU bound, not I/O bound.
sys 31s /
The final "gzip -9" takes 12 seconds, and the cpio 1 second,
which leaves 43 seconds for the rest of dracut. That's a
factor of 3 or 4 too long. The output initramfs is 14.9MB
(41MB unzipped) and contains 1619 files, including 367 .ko
kernel modules.
Running
strace -o strace.out -f -e trace=execve dracut test.img
and applying some text processing to strace.out shows
12518 SIGCHLD (processes terminated)
So dracut fondles each file with an average of (12518 / 1619)
= 7.7 processes. No wonder building an initramfs is slow!
Again in strace.out:
8917 execve (address-space images instantiated)
and taking (#SIGCHLD - #execve) gives:
3591 fork-and-no-exec (shell builtins that need a process)
because there is almost no chaining of execve without a fork.
The sorted histogram of execve begins:
3803 execve("/bin/egrep"
1343 execve("/bin/cp"
858 execve("/lib64/ld-linux-x86-64.so.2"
760 execve("/usr/bin/ldd"
375 execve("/sbin/modinfo"
359 execve("/bin/chmod"
344 execve("/bin/rm"
341 execve("/sbin/modprobe"
256 execve("/bin/mkdir"
222 execve("/bin/readlink"
100 execve("/bin/cat"
This data, and a glance at the source of dracut, suggests
considering the bash shell regexp operator "[[ string =~ pattern ]]"
and the expansion substitution operator "${parameter/pattern/string}"
to replace most instances of egrep.
The uses of cp, ldd, chmod, and modinfo should be investigated for
the possibility of batching more than one file at a time. Operating
inside one directory at a time can effectively remove the threat of
exceeding the 32KB limit on the arglist to execve.
Using pipelines (possibly including bash's "while read fname ; do")
to filter streamed lists of filenames can reduce overhead significantly
in contrast to "for fname in ...; do <<execve>>". A pipeline may also
introduce effective parallelism.
"sort --uniq" handily removes duplicates.
In most cases "cat filename |" should be replaced with ordinary
redirection "< filename", and similarly "$(cat filename)" should
be "$(< filename)". If SELinux denies access by dracut (etc.)
but allows /bin/cat, then such a comment is REQUIRED.
Yes, I'm going to work on it.
--
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <CALAkbJOkMTQdkmhBBvqHk3oKRzMHvXcp1MxasMrMpCbTP3+0eg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-08-18 23:09 ` John Reiser
2011-08-19 4:53 ` WANG Cong
0 siblings, 1 reply; 10+ messages in thread
From: John Reiser @ 2011-08-18 23:09 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
On 08/18/2011 11:25 AM, Harald Hoyer wrote:
> Try dracut version 013. It's already faster.
Yes, there is some improvement, but I still seek a *factor* of 3 to 4
overall before cpio+gzip. All the slow coding persists.
$ time /abs/path/to/dracut-013/dracut --local --force test2.img
### [fixed-width font, please] contrast to dracut-011
real 59s +3s
user 26s +6s
sys 29s -2s
26.0MB output image + 11.1MB
69.0MB unzipped + 28.0MB
1947 files listed by cpio +328 files
483 .ko kernel modules +116 modules
## Note the results have gotten larger (time, bytes, files, modules).
## The input (and configuration) has evolved, too.
$ strace -o strace.out -f -e trace=execve /abs/path/to/dracut-013/dracut --local --force test2.img
11349 SIGCHLD -1169 processes !yea!
7544 execve -1373 execve !yea!
3805 fork-and-no-exec + 214 shell builtins that get a process
2686 execve("/bin/egrep" -1117 good, but should be at most a few dozen
1587 execve("/bin/cp" + 244
491 execve("/sbin/modinfo" + 116
468 execve("/bin/chmod" + 109
458 execve("/bin/rm"
455 execve("/sbin/modprobe"
320 execve("/bin/readlink"
318 execve("/bin/mkdir"
285 execve("/lib64/ld-linux..." -573 !yea!
166 execve("/usr/bin/ldd" -594 !yea!
119 execve("/bin/cat"
88 execve("/bin/ln"
44 execve("/bin/grep"
17 execve("/bin/find"
--
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
2011-08-18 23:09 ` John Reiser
@ 2011-08-19 4:53 ` WANG Cong
2011-08-19 6:47 ` Harald Hoyer
2011-08-19 18:27 ` John Reiser
0 siblings, 2 replies; 10+ messages in thread
From: WANG Cong @ 2011-08-19 4:53 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
On Thu, 18 Aug 2011 16:09:19 -0700, John Reiser wrote:
> On 08/18/2011 11:25 AM, Harald Hoyer wrote:
>> Try dracut version 013. It's already faster.
>
> Yes, there is some improvement, but I still seek a *factor* of 3 to 4
> overall before cpio+gzip. All the slow coding persists.
>
>
> $ time /abs/path/to/dracut-013/dracut --local --force test2.img ###
> [fixed-width font, please] contrast to dracut-011
> real 59s +3s user 26s
> +6s sys 29s -2s
>
> 26.0MB output image + 11.1MB 69.0MB unzipped
> + 28.0MB
> 1947 files listed by cpio +328 files
> 483 .ko kernel modules +116 modules
>
> ## Note the results have gotten larger (time, bytes, files, modules). ##
> The input (and configuration) has evolved, too.
>
Can you add -M to see which modules are loaded?
As a kdump developer, I worry more about the size of initramfs generated
by dracut, because we have very limited memory (usually 128M or 256M)
in the second kernel. So, the output of `lsinitrd test2.img` would
be helpful too.
Thanks.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
2011-08-19 4:53 ` WANG Cong
@ 2011-08-19 6:47 ` Harald Hoyer
[not found] ` <4E4E0707.4060504-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-08-19 18:27 ` John Reiser
1 sibling, 1 reply; 10+ messages in thread
From: Harald Hoyer @ 2011-08-19 6:47 UTC (permalink / raw)
To: WANG Cong; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
On 19.08.2011 06:53, WANG Cong wrote:
> On Thu, 18 Aug 2011 16:09:19 -0700, John Reiser wrote:
>
>> On 08/18/2011 11:25 AM, Harald Hoyer wrote:
>>> Try dracut version 013. It's already faster.
>>
>> Yes, there is some improvement, but I still seek a *factor* of 3 to 4
>> overall before cpio+gzip. All the slow coding persists.
>>
>>
>> $ time /abs/path/to/dracut-013/dracut --local --force test2.img ###
>> [fixed-width font, please] contrast to dracut-011
>> real 59s +3s user 26s
>> +6s sys 29s -2s
>>
>> 26.0MB output image + 11.1MB 69.0MB unzipped
>> + 28.0MB
>> 1947 files listed by cpio +328 files
>> 483 .ko kernel modules +116 modules
>>
>> ## Note the results have gotten larger (time, bytes, files, modules). ##
>> The input (and configuration) has evolved, too.
>>
>
> Can you add -M to see which modules are loaded?
>
> As a kdump developer, I worry more about the size of initramfs generated
> by dracut, because we have very limited memory (usually 128M or 256M)
> in the second kernel. So, the output of `lsinitrd test2.img` would
> be helpful too.
>
> Thanks.
Maybe you should build your kdump kernel with the "hostonly" option, which will
significantly reduce your initramfs.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <4E4D5779.6090209-Po6cBsTGB2ZWk0Htik3J/w@public.gmane.org>
@ 2011-08-19 7:03 ` Harald Hoyer
2011-08-19 8:24 ` Harald Hoyer
1 sibling, 0 replies; 10+ messages in thread
From: Harald Hoyer @ 2011-08-19 7:03 UTC (permalink / raw)
To: John Reiser; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
On 18.08.2011 20:18, John Reiser wrote:
> Building an initramfs is unreasonably slow. On Fedora 16
> dracut-011 takes almost a minute when installing a new kernel:
> real 56s
> user 20s \__ dracut is CPU bound, not I/O bound.
> sys 31s /
> The final "gzip -9" takes 12 seconds, and the cpio 1 second,
> which leaves 43 seconds for the rest of dracut. That's a
> factor of 3 or 4 too long. The output initramfs is 14.9MB
> (41MB unzipped) and contains 1619 files, including 367 .ko
> kernel modules.
Some general thoughts.
1. speed at initramfs creation time is not sooo important. Normally this is only
done once in a while and not every day. Boot speed is more important.
2. if you care about speed of creation and size of the initramfs, turn on
"hostonly" in /etc/dracut.conf
> Yes, I'm going to work on it.
>
That's cool! I accept patches :-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <4E4E0707.4060504-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2011-08-19 7:04 ` Américo Wang
[not found] ` <CAM_iQpUr2mVRM+PFeYkefzx9xEAOJKhZh+wpaXgKg6bj+1dozQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 10+ messages in thread
From: Américo Wang @ 2011-08-19 7:04 UTC (permalink / raw)
To: Harald Hoyer; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
On Fri, Aug 19, 2011 at 2:47 PM, Harald Hoyer <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
> On 19.08.2011 06:53, WANG Cong wrote:
>> As a kdump developer, I worry more about the size of initramfs generated
>> by dracut, because we have very limited memory (usually 128M or 256M)
>> in the second kernel. So, the output of `lsinitrd test2.img` would
>> be helpful too.
>>
>> Thanks.
>
> Maybe you should build your kdump kernel with the "hostonly" option, which will
> significantly reduce your initramfs.
>
Yeah, that does help, but the size is still large, see below
[root@nec-em18 ~]# dracut -H -M -f test.img --force-add nfs
dash
i18n
rpmversion
network
ifcfg
plymouth
dm
kernel-modules
lvm
nfs
resume
rootfs-block
terminfo
udev-rules
biosdevname
base
fs-lib
shutdown
[root@nec-em18 ~]# ls -lh test.img
-rw-r--r--. 1 root root 11M Aug 19 03:00 test.img
Also note, there are still some unneeded modules get included, e.g. i18n
and plymouth.
Therefore, I choose to use -m and -a to specify the modules we really need.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <CAM_iQpUr2mVRM+PFeYkefzx9xEAOJKhZh+wpaXgKg6bj+1dozQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-08-19 7:07 ` Harald Hoyer
[not found] ` <4E4E0B95.6040909-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 10+ messages in thread
From: Harald Hoyer @ 2011-08-19 7:07 UTC (permalink / raw)
To: Américo Wang; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
On 19.08.2011 09:04, Américo Wang wrote:
> On Fri, Aug 19, 2011 at 2:47 PM, Harald Hoyer <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
>> On 19.08.2011 06:53, WANG Cong wrote:
>>> As a kdump developer, I worry more about the size of initramfs generated
>>> by dracut, because we have very limited memory (usually 128M or 256M)
>>> in the second kernel. So, the output of `lsinitrd test2.img` would
>>> be helpful too.
>>>
>>> Thanks.
>>
>> Maybe you should build your kdump kernel with the "hostonly" option, which will
>> significantly reduce your initramfs.
>>
>
> Yeah, that does help, but the size is still large, see below
>
> [root@nec-em18 ~]# dracut -H -M -f test.img --force-add nfs
> dash
> i18n
> rpmversion
> network
> ifcfg
> plymouth
> dm
> kernel-modules
> lvm
> nfs
> resume
> rootfs-block
> terminfo
> udev-rules
> biosdevname
> base
> fs-lib
> shutdown
> [root@nec-em18 ~]# ls -lh test.img
> -rw-r--r--. 1 root root 11M Aug 19 03:00 test.img
>
> Also note, there are still some unneeded modules get included, e.g. i18n
> and plymouth.
>
> Therefore, I choose to use -m and -a to specify the modules we really need.
Absolutely! You don't want plymouth and shutdown for example in your kdump
initramfs :-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <4E4E0B95.6040909-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2011-08-19 7:32 ` Dan Horák
0 siblings, 0 replies; 10+ messages in thread
From: Dan Horák @ 2011-08-19 7:32 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
Harald Hoyer píše v Pá 19. 08. 2011 v 09:07 +0200:
> On 19.08.2011 09:04, Américo Wang wrote:
> > On Fri, Aug 19, 2011 at 2:47 PM, Harald Hoyer <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
> >> On 19.08.2011 06:53, WANG Cong wrote:
> >>> As a kdump developer, I worry more about the size of initramfs generated
> >>> by dracut, because we have very limited memory (usually 128M or 256M)
> >>> in the second kernel. So, the output of `lsinitrd test2.img` would
> >>> be helpful too.
> >>>
> >>> Thanks.
> >>
> >> Maybe you should build your kdump kernel with the "hostonly" option, which will
> >> significantly reduce your initramfs.
> >>
> >
> > Yeah, that does help, but the size is still large, see below
> >
> > [root@nec-em18 ~]# dracut -H -M -f test.img --force-add nfs
> > dash
> > i18n
> > rpmversion
> > network
> > ifcfg
> > plymouth
> > dm
> > kernel-modules
> > lvm
> > nfs
> > resume
> > rootfs-block
> > terminfo
> > udev-rules
> > biosdevname
> > base
> > fs-lib
> > shutdown
> > [root@nec-em18 ~]# ls -lh test.img
> > -rw-r--r--. 1 root root 11M Aug 19 03:00 test.img
> >
> > Also note, there are still some unneeded modules get included, e.g. i18n
> > and plymouth.
> >
> > Therefore, I choose to use -m and -a to specify the modules we really need.
>
> Absolutely! You don't want plymouth and shutdown for example in your kdump
> initramfs :-)
and maybe you can use --filesystems too,
http://fedora.danny.cz/arm/dracut.conf is an example of dracut config I
use for preparing size-limited initramfs images for my Fedora/ARM
devices
Dan
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
[not found] ` <4E4D5779.6090209-Po6cBsTGB2ZWk0Htik3J/w@public.gmane.org>
2011-08-19 7:03 ` Harald Hoyer
@ 2011-08-19 8:24 ` Harald Hoyer
1 sibling, 0 replies; 10+ messages in thread
From: Harald Hoyer @ 2011-08-19 8:24 UTC (permalink / raw)
To: John Reiser; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 2103 bytes --]
On 18.08.2011 20:18, John Reiser wrote:
> Building an initramfs is unreasonably slow. On Fedora 16
> dracut-011 takes almost a minute when installing a new kernel:
> real 56s
> user 20s \__ dracut is CPU bound, not I/O bound.
> sys 31s /
Another profiling approach with dracut >= 013:
$ git clone git://git.kernel.org/pub/scm/boot/dracut/dracut.git
$ cd dracut
$ ./dracut --profile --local --force /tmp/test2.img &>/tmp/profile.out
$ python profile.py 2>/dev/null < /tmp/profile.out | head -10|sed 's#/.*/##g'
dracut-functions@287 24.6794755459
dracut-functions@864 19.2174339294
dracut-functions@286 12.4720790386
dracut-functions@284 12.4622004032
dracut-functions@285 12.3773012161
dracut-functions@326 7.45590758324
./dracut@653 6.62076878548
dracut-logger@334 6.58080339432
dracut-functions@315 6.04220032692
dracut-functions@863 4.97196722031
of course this method adds the time of the PS4 evaluation to every line. So if a
line is called often, the "date" call of
PS4='+ $(date "+%s.%N") ${BASH_SOURCE}@${LINENO}: '
is added multiple times.
Maybe we could patch bash to output nice profiling information.
lines 284-287 are in inst_dir()
dracut-functions@287 24.6794755459
dracut-functions@286 12.4720790386
dracut-functions@284 12.4622004032
dracut-functions@285 12.3773012161
This could, of course, be optimized. See attached patch.
Before:
real 0m30.752s
user 0m30.682s
sys 0m14.275s
After:
real 0m29.717s
user 0m30.486s
sys 0m14.220s
profiling after the patch:
dracut-functions@864 18.7074279785
dracut-functions@326 7.28814554214
./dracut@654 6.65880942345
dracut-logger@334 6.25012993813
dracut-functions@279 6.23409557343
dracut-functions@315 5.92809057236
dracut-functions@863 4.807523489
dracut-functions@862 4.75765013695
dracut-functions@411 3.63905620575
dracut-functions@273 3.21366071701
This is filter_kernel_modules()
dracut-functions@864 18.7074279785
dracut-functions@863 4.807523489
dracut-functions@862 4.75765013695
This is "cp -pfL":
dracut-functions@326 7.28814554214
This is the cpio and compress call:
./dracut@654 6.65880942345
[-- Attachment #2: dracut-inst_dir.patch --]
[-- Type: text/plain, Size: 860 bytes --]
diff --git a/dracut-functions b/dracut-functions
index 241d89a..d7f2e5f 100755
--- a/dracut-functions
+++ b/dracut-functions
@@ -274,18 +274,18 @@ inst_dir() {
local _oldifs="$IFS"
local _part
local _dir="$1"
- IFS="/"
- set -- $_dir
- IFS=$_oldifs
- _dir="$@"
+
+ # fast out
[[ -e ${initdir}$_dir ]] && return 0
- # iterate over parent directories
- for _part in $_dir; do
- [[ $_part ]] || continue
- _file="$_file/$_part"
- [[ -e ${initdir}$_file ]] && continue
+ _part=${_dir%/*}
+ while ! [[ -e "${initdir}${_part}" ]]; do
+ _dir="$_part $_dir"
+ _part=${_part%/*}
+ done
+ # iterate over parent directories
+ for _file in $_dir; do
if [[ -L $_file ]]; then
# create link as the original
local target=$(readlink -f "$_file")
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: building initramfs is slow
2011-08-19 4:53 ` WANG Cong
2011-08-19 6:47 ` Harald Hoyer
@ 2011-08-19 18:27 ` John Reiser
1 sibling, 0 replies; 10+ messages in thread
From: John Reiser @ 2011-08-19 18:27 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
On 08/18/2011 09:53 PM, WANG Cong wrote:
> Can you add -M to see which modules are loaded?
I'm going to skip this because of other people's responses in the meantime.
About 450 of the 2363 *.ko kernel modules in Fedora 16 were loaded.
See also the histogram below.
>
> As a kdump developer, I worry more about the size of initramfs generated
> by dracut, because we have very limited memory (usually 128M or 256M)
> in the second kernel. So, the output of `lsinitrd test2.img` would
> be helpful too.
Fedora releases, pre-releases, and Live media are readily available.
You should be able to download, install/boot, and experiment in half a day.
$(lsinitrd test2.img) is too long, so I've made a sorted histogram
of number files by directory, and include the beginning here.
[My quick-and-dirty methodology might have holes.]
188 lib/kbd/consolefonts/
120 lib/kbd/keymaps/i386/qwerty/
88 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/net/
88 lib64/
63 lib/kbd/unimaps/
62 lib/firmware/radeon/
61 sbin/
59 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/ata/
55 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/scsi/
48 lib/kbd/consoletrans/
46 lib/modules/3.0.0-1.fc16.x86_64/kernel/crypto/
44 lib/modules/3.0.0-1.fc16.x86_64/kernel/fs/
40 usr/share/plymouth/themes/charge/
39 lib/kbd/consolefonts/partialfonts/
38 lib/modules/3.0.0-1.fc16.x86_64/kernel/fs/nls/
29 bin/
28 lib/firmware/
25 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/
24 usr/lib64/
19 lib/kbd/keymaps/i386/include/
19 etc/
18 lib/modules/3.0.0-1.fc16.x86_64/
18 lib/kbd/keymaps/i386/qwertz/
18 lib64/multipath/
17 lib/kbd/keymaps/mac/all/
17 lib/dracut/hooks/cmdline/
16 lib/kbd/keymaps/sun/
15 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/usb/storage/
15 lib/modules/3.0.0-1.fc16.x86_64/kernel/drivers/md/
13 lib/udev/rules.d/
12 lib/dracut/hooks/
--
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-08-19 18:27 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-18 18:18 building initramfs is slow John Reiser
[not found] ` <CALAkbJOkMTQdkmhBBvqHk3oKRzMHvXcp1MxasMrMpCbTP3+0eg@mail.gmail.com>
[not found] ` <CALAkbJOkMTQdkmhBBvqHk3oKRzMHvXcp1MxasMrMpCbTP3+0eg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-08-18 23:09 ` John Reiser
2011-08-19 4:53 ` WANG Cong
2011-08-19 6:47 ` Harald Hoyer
[not found] ` <4E4E0707.4060504-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-08-19 7:04 ` Américo Wang
[not found] ` <CAM_iQpUr2mVRM+PFeYkefzx9xEAOJKhZh+wpaXgKg6bj+1dozQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-08-19 7:07 ` Harald Hoyer
[not found] ` <4E4E0B95.6040909-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-08-19 7:32 ` Dan Horák
2011-08-19 18:27 ` John Reiser
[not found] ` <4E4D5779.6090209-Po6cBsTGB2ZWk0Htik3J/w@public.gmane.org>
2011-08-19 7:03 ` Harald Hoyer
2011-08-19 8:24 ` Harald Hoyer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox