タグ

Linuxとinodeに関するyassのブックマーク (4)

  • ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改

    ディレクトリの中にある大量のファイルを高速に読み込む方法が知りたかったので、実験してみた。想定しているシチュエーションは、一つ一つのファイルは数KB程度だが数が多い、という場合である。適当な順番でアクセスすると、ランダムアクセスになってしまいとても時間がかかる。個々のファイルを読み込む順番はどうでも良く、すべてのファイルを処理することさえできればいいので、原理的にはシーケンシャルアクセスで処理できてしかるべきである。 まず、ファイルシステムについて。HDDやSSDなどのハードウェアにアクセスする際には、ファイル名などという概念はもちろん存在しない。ファイル名と実際のディスク上の対応を管理するのがファイルシステムの主な役割である。ファイルシステムは、ファイル名からそのファイルに対応するブロック番号(メモリアドレスみたいなもんだな)を調べて、そのブロック番号を指定してHDDやSSDにアクセスす

    ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改
    yass
    yass 2014/06/28
    " ということで、inode番号はext3ではブロック番号の近似として十分に使え、inode番号でソートすることで、ファイル数が多い場合のディレクトリ内のファイル読み込みを高速化することができた。"
  • Linuxのpipeの実装を見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    Unix V6のpipe()と比べてLinuxのpipe()どう実装しているんですかねーなんて話を最近したのでちょっと見比べてみた。 V6のpipeははじめてのOSコードリーディング 読書会 (15)でやったところなんだけど、俺は風邪ひいて家で引きこもってたので・・・ V6のpipeの挙動は大体こんな感じ。 pipeはルートディスクのストレージ領域を4096B(8ブロック)使用し実現する 4KBのデータ領域はひとつのファイルとして扱われる(inodeが割り当てられる) オンメモリではなくてストレージを経由するが、バッファサイズが小さいのでブロックデバイスのバッファキャッシュが効きやすいようになっている pipeの受け手がデータを読みだす前に他の優先度の高いプロセスがブロックデバイスを使用するとキャッシュが効かなくなる可能性あり でも、データはストレージに書かれているので内容が壊れると言った

    Linuxのpipeの実装を見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
    yass
    yass 2014/06/01
    " pipeはルートディスクのストレージ領域を4096B(8ブロック)使用し実現する / 4KBのデータ領域はひとつのファイルとして扱われる(inodeが割り当てられる)"
  • そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)

    ハートビーツ最年長エンジニアの滝澤です。以前、弊社CTOにシニアおっさんエンジニアから若手エンジニアに向けて何か書いてくれと言われた気がしたので、アトミック(atomic)なファイル操作について3編に分けて紹介します。この内容は弊社の社内勉強会で話した内容をまとめ直したものです。 そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)←今回 そのファイル、安全に作成できていますか?(アトミックなファイル操作:中編) そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編) 今回は「みなさん、安全にファイルの更新ができていますか?」ということについて、考えてみましょう。 あなたはあるサーバ上のファイルの更新を依頼され、もらったファイルをサーバ上でコピーして上書きしました。しばらくして、データに異常が発生したので調べて欲しいと言われました。さて、何が起き

    そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)
    yass
    yass 2013/10/10
    " アトミックにファイルを更新するには、rename()というファイル名を変更するシステムコールを使います。mvコマンドはこのrename()を使ってファイル名の変更を行っています。"
  • Ext2 FS - Linuxカーネルメモ

    パーティション全体に関する情報を持つ。 ・i-node数 ・ブロック数 ・空きブロック数 ・空きi-node数 など。 通常はブロックグループ0のスーパーブロックがプライマリとして使用される。他のブロックグループにあるスーパーブロックはバックアップとして使用される。ただし、全ブロックにバックアップがあるわけではない。 (Ref. to man dumpe2fs, man e2fsck, ext2_fs.h::struct ext2_super_block) ブロックグループ内に関する情報を持つ。 ・ブロックビットマップ領域のブロック番号 ・ i-nodeビットマップ領域のブロック番号 ・i-nodeテーブル領域のブロック番号 ・空きブロック数 ・空きi-node数 など。 自分のブロックグループに対するディスクリプタだけでなく。パーティション内の全ブロックグループのブロックディスクリプタが

  • 1