Thread logo ab in den arbeitsspeicher (7 answers)
Opened by Froschpopo at 2006-03-05 22:30

ptk
 2006-03-06 00:23
#29979 #29979
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das Cachen von Seiten scheint bei dir zur Obsession zu werden, oder? Hast du denn jemals geprüft, wie gut sich dein Betriebssystem verhält? Ich habe ja schön öfters gesagt, dass das Betriebssystem sehr gut cachen kann. Hier ein Beweis (mit FreeBSD 4.9, perl5.8.8):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use Time::HiRes qw(gettimeofday tv_interval);

my $bigfile = shift or die "Big file?";
sub openandreadbigfile {
open my $fh, "<:raw", $bigfile or die $!;
local $/;
my $xxx = <$fh>;
undef;
}

while () {
my $t0 = [gettimeofday];
openandreadbigfile();
my $elapsed = tv_interval($t0);
warn $elapsed, "\n";
}

Wenn ich eine sehr große Datei lade, z.B. die Sourcen von Mozilla (30MB), dann sieht es so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
perl5.8.8 /tmp/open.pl /usr/ports/distfiles/mozilla-1.7.12-source.tar.bz2
2.747017
0.438312
0.43884
0.44037
0.450289
0.448169
0.45606
0.434542
0.435767

Sprich: beim ersten Mal wird von der Platte gelesen, danach geht es recht schnell aus dem RAM.

Die Datei auf eine RAM-Disk zu packen, bringt nichts: es wird nicht schneller:
Code: (dl )
1
2
3
4
5
6
7
perl5.8.8 /tmp/open.pl /tmp/mozilla-1.7.12-source.tar.bz2
1.39426
0.447927
0.432142
0.459948
0.434598
0.438158

Natürlich: wenn sich die 30MB bereits in einem Perl-SV befinden würden, wäre man noch schneller. Wenn deine Dateien wesentlich kleiner sind, wirst du den Geschwindigkeitszuwachs aber nicht bemerken. Aber wenn du wirklich in einem Perl-Skalar cachen willst, dann könntest du es schon zur Startzeit des Apache machen.

Und hast du eigentlich meinen send_fd-Rat befolgt?

View full thread logo ab in den arbeitsspeicher