[Mew-dist 14760] Re: pick patternのキー head
KOIE Hidetaka ( 鯉江英隆 )
hide at example.com
2000年 10月 26日 (木) 02:54:05 JST
From: Takahiro Kambe <taca at example.com>
Subject: [Mew-dist 14759] Re: pick patternのキー head
Date: Thu, 26 Oct 2000 00:57:39 +0900
| キャッシュというのもあるかもしれませんが、本質的にファイルのopen(2)っ
| ていいう処理自体が単純にread(2)を繰り返すのに比べれば、はるかに重い処
| 理だと思うんですが、どうでしょう?
たしかにopenは重いにちがいありません。
inodeもデータもキャッシュに載ってしまっている場合には
readに対するopenの重さが見えましたが、
どちらもキャッシュにまったく載ってない場合には
以下のような結果となりました。
ファイル数: 9271
総バイト数: 29262564B (約28MB)
総readバイト数: 28841386B (約27.5MB)
real user system
--------------- ----- ---- ------
openだけ 2.33 0.02 1.68
open+read(16KB) 19.91 0.06 4.39 [単位は秒]
[環境]
H/W: PentiumMMX 233MHz, memory 96MB
HDD: IBM-DARA-212000, LBA, DMA, 32-bit, multi-block-16
OS: FreeBSD-3.3 (with PAO)
file system: FFS -o noatime
compile: gcc -O3 foo.c -o foo (openだけ版)
gcc -DREAD -O3 foo.c -o foo2 (open+read版)
--
KOIE Hidetaka 鯉江英隆 <hide at example.com>
-------------- next part --------------
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
main()
{
DIR* dirp;
struct dirent *dp;
int fd;
int n = 0;
char buf[16*1024];
if (chdir("/usr/home/koie/Mail/unread/mew-dist") < 0) {
perror("chdir");
goto out;
}
if ((dirp = opendir(".")) == NULL) {
perror("opendir");
goto out;
}
while ((dp = readdir(dirp)) != NULL) {
if (dp->d_name[0] != '.') {
int m;
if ((fd = open(dp->d_name, O_RDONLY)) < 0) {
perror("open");
goto out;
}
#ifdef READ
if ((m = read(fd, buf, sizeof buf)) < 0) {
perror("read");
goto out;
}
#endif
close(fd);
n++;
}
}
closedir(dirp);
printf("%d\n", n);
out:
exit(0);
}
Mew-dist メーリングリストの案内