コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2006年5月17日 >>> 2006年5月17日
link もっと後

2006年5月17日

研究室のゼミの後に、明日のシス情セミナーの発表練習を行いました。ドコモへ出張したとき、発表会で使った資料をかなり流用したので、それなりにまとまっております。勢いでそのネタを研究会に発表することになりました。う、頑張らねば。

研究室にあるマシン(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のソースコードを下に貼っておきました。ヘッダや、エラー処理は省略しております。

書き込み速度計測bench.cpp for Linux 2.6

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;
}
編集者:すずき(2009/01/24 16:20)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2006年5月17日 >>> 2006年5月17日
link もっと後

管理用メニュー

link 記事を新規作成

<2006>
<<<05>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント5件

  • link 24年4月22日
    hdkさん (04/24 08:36)
    「うちのHHFZ4310は15年突破しまし...」
  • link 24年4月22日
    すずきさん (04/24 00:37)
    「ちゃんと数えてないですけど蛍光管が10年...」
  • link 24年4月22日
    hdkさん (04/23 20:52)
    「おお... うちのHHFZ4310より後...」
  • link 20年6月19日
    すずきさん (04/06 22:54)
    「ディレクトリを予め作成しておけば良いです...」
  • link 20年6月19日
    斎藤さん (04/06 16:25)
    「「Preferencesというメニューか...」

最近の記事3件

  • link 24年4月25日
    すずき (04/26 16:49)
    「[AVIFの変換] AVIFが読めないアプリケーションがたまにあるので、AVIF(AV1 Image File Format)...」
  • link 24年2月7日
    すずき (04/24 02:52)
    「[複数の音声ファイルのラウドネスを統一したい] PCやデジタル音楽プレーヤーで音楽を聞いていると、曲によって音量の大小が激しく...」
  • link 24年4月22日
    すずき (04/23 20:13)
    「[仕事部屋の照明が壊れた] いきなり仕事部屋のシーリングライトが消えました。蛍光管の寿命にしては去年(2022年10月19日の...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 04/26 16:49