研究室のゼミの後に、明日のシス情セミナーの発表練習を行いました。ドコモへ出張したとき、発表会で使った資料をかなり流用したので、それなりにまとまっております。勢いでそのネタを研究会に発表することになりました。う、頑張らねば。
研究室にあるマシン(IDE HDD 2台)でRAID 0を構成して測ったら、なんと書き込み64MB/s〜72MB/sという脅威の性能を発揮しております。
我が家のサーバの場合はUSB接続だから遅いのと、妙にCPUを食うのが気になるけど、廉価RAIDだしこんなもんかな?次回作では複数のUSBカードを使うことや、外付けSATA接続などが良さそうですね。
Xenepicは昨日の発見した引数のままで今日もログイン可能なようです。HanGameアカウントのパスワードに関係の無い数値なので、この数字が漏れたら一巻の終わりじゃね??うへーうへーうへー…。
榮樂氏に「benchってナニ?」って突っ込まれたので、補足。benchはwrite速度を測るプログラムです。Linux 2.6専用と書いてあるのは、2.4系のDirect I/O(O_DIRECT)のアライメント制限を考えて書いていないからです。
一応、手元のLinux 2.4で試したら ext2はOKなのにext3でコケるからおかしいと思ったら、どこかのMLでカーネルのバグなんじゃね?という記述が見受けられました。
ホントかいなと思ってカーネルのコード見たら、fs/ext3/inode.cではstruct address_space_operationsのdirect_IOメンバに値を入れないため、O_DIRECTを指定して読み書きしようとした時点で失敗しEINVALが返ります。
バグというより、元々ext3はO_DIRECT使っちゃ駄目みたい…。なぜかはわかりませんけど。
benchのソースコードを下に貼っておきました。ヘッダや、エラー処理は省略しております。
int main(int argc, char *argv[])
{
int fd;
size_t size, bufsize, wsize, pos;
unsigned char *lpalignbuf;
struct timeval tv_start, tv_end, tv_past;
char *lpc;
size_t i;
if (argc < 4) {
printf("usage: \nbench filename size bufsize\n");
return 0;
}
//サイズを得る
size = strtol(argv[2], &lpc, 10);
bufsize = strtol(argv[3], &lpc, 10);
//Direct I/Oモードでファイルを開く
fd = open(argv[1], O_RDWR | O_DIRECT);
lseek(fd, 0, SEEK_CUR);
//アラインメントをそろえたバッファを生成、乱数で埋める
posix_memalign((void **)&lpalignbuf, 512, bufsize);
for (i = 0; i < bufsize; i++)
lpalignbuf[i] = rand() % 256;
//測定を開始する
gettimeofday(&tv_start, NULL);
//乱数を書き込む
for (pos = 0; pos < size; ) {
//書き込むサイズ
if (size - pos < bufsize)
wsize = size - pos;
else
wsize = bufsize;
//書き込む
write(fd, lpalignbuf, wsize);
pos += wsize;
}
free(lpalignbuf);
close(fd);
//測定を終了する
gettimeofday(&tv_end, NULL);
tv_past.tv_sec = tv_end.tv_sec - tv_start.tv_sec;
tv_past.tv_usec = tv_end.tv_usec - tv_start.tv_usec;
while (tv_past.tv_usec < 0) {
tv_past.tv_usec += 1000000;
tv_past.tv_sec -= 1;
}
//結果表示する
printf("time: %13d.%6d[sec]\n"
"speed: %f[MB/s]\n",
tv_past.tv_sec, tv_past.tv_usec,
(double)size * 1000000 / (tv_past.tv_sec * 1000000 +
tv_past.tv_usec) / 1000000);
return 0;
}
< | 2006 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | - | - | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)