ログ日記

作業ログと日記とメモ

データ書き込みの流れ

メモ

  1. sys_write()
    • fs/read_write.c
    • struct fileと現在のファイルポインタが指している位置を取得してvfs_write()を呼び出す
  2. vfs_write()
    • fs/read_write.c
    • 操作関するチェックをしてfile_operationsのwrite()を呼び出す
  3. generic_file_write()
    • mm/filemap.c
    • デフォルトのファイル書き込み操作関数
    • struct i_node を取得、ロックしてgeneric_file_write_nolock()を呼び出す
  4. generic_file_write_nolock()
    • mm/filemap.c
    • struct kiocbを初期化してgeneric_file_aio_write_nolock()を呼び出す
  5. generic_file_aio_write_nolock()
    • mm/filemap.c
    • O_DIRECTが指定されていない場合
      1. 書き込む長さをcount変数に入れる
      2. struct address_space_operatoinsのprepare_write()を呼び出す
      3. filemap_copy_from_user()を呼び出す
      4. struct address_space_operatoinsのcommit_write()を呼び出す
      5. count -= 書き込まれた長さ
      6. countが0になるまで繰り返し
  1. mpage_writepages()
    • fs/mpage.c
    • pagevec_lookup_tag()を呼び出しstruct pageを取得する
  2. struct address_space_operationsのwritepage()を呼び出す

分散ファイルシステムメモ

分散ストレージに関して、もう一つ思うところがある。トランザクションはどうするのだろう。

2つの互いに関連性を持ったデータを書き込もうとして、片方を書き込んだ段階で読み込みが発生したりする。このときに、両方の書き込みが終わるまで読み込みを待たせたり、両方とも書き終わるまではどちらも書き込んでいないデータを読み込ませたりしたい。分散環境だと複数のノードが同じデータを持っていたりするから、どのノードから読み込んでも同じデータが読み出せるようにしたい。これを可能にするのか否か。

これを可能にしようとする(トランザクションを実装する)と、書き込みや読み込みがとても遅くなる。書き込みが遅くなるなら許せるかもしれないが、読み込みも「今読み込んじゃってもOKですか?」と聞かないといけなかったりして、やっぱり遅くなる。トランザクションができなくても良いなら、ずっと速くできる。

http://d.hatena.ne.jp/viver/20071129/p1

これホント教えてほしい。

設定ファイルを同期する

DSAS開発者の部屋:keepalivedの運用ノウハウお見せします 〜 設定ファイルを同期する
keepalivedの記事の一コマに偶然たどり着いた。


かなり遅い反応だけれども、raifがありますよと言ってみる。
リアルタイムに読んだ時はraifを知らなかったんだな・・。

 a) マスターとバックアップで設定ファイルを同じにする
 b) 設定を反映するコマンドを実装する(lvs-restart)
 c) 設定を同期するコマンドを実装する(lvs-sync)
 d) 差分を確認するコマンドを実装する(lvs-diff)

この独自コマンドの部分(b〜d)はraifを使ったら不要になる。
その代わりNFSか何かの設定が先に必要になるけれども。


http://www.am-utils.org/docs/raif-ccgrid05/raif.html
ここの図が分かり易いかな。



まぁちょっと触った感じだと想定外の操作をするとファイルシステムが落ちて面倒なことになったりしましたが。
論文は読んだけど、実装はあまり見ていない。心が折れたのでorz


ちなみに

長くなってしまいそうなので、他のコマンド(lvs-sync,lvs-diff,lvs-restart)については、また後日ご紹介させて頂きたいと思います。

この説明ってどこかにあるのかな・・。

Redundant Array of Independent Filesystems

raif - Increasing Distributed Storage Survivability with a Stackable RAID-like File System
Redundant Array of Independent Filesystems
既存FS上にRAIDを構築する。
NFSの上にも構築できるので動的にネットワークミラーリングの設定が可能。



・・・えっと、私の目的のひとつがコレなんだが・・既にバージョン1.1で完成してるっぽいorz
技術者視点ではこれを使って色々試したいって思うんだが研究者視点ではこれにかぶらないように自分の研究を進めるにはどうしましょって感じ。
いや・・まじで・・unionfs作ってる人なら完成度は高いだろうし・・っていうか比べもんにならんわな。かなり困った。
そりゃー誰かが考えるだろうしずっとなんで誰も作らないんだろって不思議に思ってたから、こういうのが既に存在して嬉しい気持ちもあるんだけれども・・ホントどうしましょ。