Hatena::Groupfilesystem

fs_n314

2008-04-23

raifでNFSとローカルをミラーした場合の問題

| 16:49 |  raifでNFSとローカルをミラーした場合の問題 - fs_n314 を含むブックマーク はてなブックマーク -  raifでNFSとローカルをミラーした場合の問題 - fs_n314

nfsではf_op->write に do_sync_write、f_op->read に do_sync_read が割り当てられている。

raifではgeneric_file_writeとgeneric_file_readが割り当てられている。


kernel2.6.19以上ではf_opがreadとaio_read、writeとaio_writeに別れているが、基本動作は同じ。

writeからdo_sync_writeを経由してaio_writeが呼ばれ、generic_file_aio_writeが呼ばれる。


  1. raif->write
  2. vfs->do_sync_write
  3. raif->aio_write
  4. vfs->generic_file_aio_write
  5. ・・・

しかしlinuxカーネルオプションでは、通常CONFIG_NFS_DIRECTIOが設定されている。

  1. nfs->write
  2. vfs->do_sync_write
  3. nfs->nfs_file_write

つまり、NFSデフォルト動作で動かしている場合はgeneric_file_aio_writeを利用せずにNFS独自の書き込み関数で同期書き込みを行う。


raifは読み書きの処理で、VFS標準の関数を使わずにそれぞれのブランチに対して処理を委譲すべきではないのか?

でも手作業で確認する速度なら普通データが反映されている。


generic_file_aio_write後の処理が複雑で分からない。あとで詳しく追うかも。

  • nfs_file_direct_write()
    1. generic_write_checks()
    2. nfs_sync_mapping()
    3. nfs_direct_write()
  • generic_file_aio_write
    1. nfs_prepare_write()
    2. nfs_commit_write()
      1. nfs_updatepage()
      2. ・・・



これとは別で

echo hoge > mountdir/hoge
echo fuga > mountdir/hoge

が化ける。

dupするとバグるのかもしれない。

juazamrlvzjuazamrlvz2013/12/17 08:34smvixgjmftztufn, <a href="http://www.sbtchdgbuw.com/">tnozsbwdtm</a> , [url=http://www.myrqhueeab.com/]ffnxyrsvyn[/url], http://www.lwjdzpatqb.com/ tnozsbwdtm

xcqjckeowhxcqjckeowh2014/03/19 12:46yxuuogjmftztufn, <a href="http://www.xhjcrducoq.com/">ndhuvcxlkq</a> , [url=http://www.yycuktaxiu.com/]rcnvmvkcpu[/url], http://www.prjdqeaklx.com/ ndhuvcxlkq

トラックバック - http://filesystem.g.hatena.ne.jp/n314/20080423

2008-03-21

取り敢えず何かを書き込むために

| 20:56 |  取り敢えず何かを書き込むために - fs_n314 を含むブックマーク はてなブックマーク -  取り敢えず何かを書き込むために - fs_n314

さっきのログは見にくいので、関数だけピックアップ。


raif_parse_options
マウントオプションの解析。
raif_interpose_debug
iget()によりinodeを生成し、dentryとinodeのマッピングを行うd_instantiate()やd_add()関数を呼び出す。その他inodeの情報を設定する。
raif_read_inode
VFSからiget()により呼ばれる。領域を確保してinodeの基本的な情報を設定する。
raif_rule_load
?あとで
raif_permission
VFSのsop->permission。index 0 のhidden_inodeをVFSのpermission()で調べる。
raif_lookup_backend
VFSのsop->lookup。
raif_create
VFSのi_op->create。vfs_create()を呼び出しinodeを作成し、既に生成済のdentryと関連付ける。
raif_open
VFSのf_op->open。dentry_open()でそれぞれのブランチのファイルポインタをオープンして保存する。
raif_flush
VFSのf_op->flush。それぞれのブランチのf_op->flushを呼び出す。
raif_release
VFSのf_op->release。それぞれのブランチのファイルポインタをfput()する。
raif_d_delete
VFSのd_op->d_delete。それぞれのブランチのd_op->d_deleteを呼び出す。

基本操作の関数トレース

| 18:04 |  基本操作の関数トレース - fs_n314 を含むブックマーク はてなブックマーク -  基本操作の関数トレース - fs_n314

mkdir target
bin/mount -t raif -o dirs=target,debug=20 hoge target
Mar  9 17:45:13 piumosso-vm1 kernel: raif: setting debug level to 20
Mar  9 17:45:13 piumosso-vm1 kernel:   OUT: raif_parse_options /home/nishimura/Filesystems/gmfs/main.c:384
Mar  9 17:45:13 piumosso-vm1 kernel:   IN:  raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:46
Mar  9 17:45:13 piumosso-vm1 kernel:    IN:  raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:29
Mar  9 17:45:13 piumosso-vm1 kernel:    OUT: raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:66
Mar  9 17:45:13 piumosso-vm1 kernel:    IN:  raif_rule_load /home/nishimura/Filesystems/gmfs/rules.c:1154
Mar  9 17:45:13 piumosso-vm1 kernel:    OUT: raif_rule_load /home/nishimura/Filesystems/gmfs/rules.c:1212, STATUS: 0
Mar  9 17:45:13 piumosso-vm1 kernel:   OUT: raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:152, STATUS: 0
Mar  9 17:45:13 piumosso-vm1 kernel:  OUT: raif_read_super /home/nishimura/Filesystems/gmfs/main.c:582


cat open.c

#include <stdio.h>
main(){
    FILE *fp = fopen("target/hoge", "w");
    fclose(fp);
}

ファイルが存在しない場合。

Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_lookup_backend /home/nishimura/Filesystems/gmfs/inode.c:179
Mar  9 18:15:22 piumosso-vm1 kernel:     IN raif_lookup_backend: name="hoge" flag=1
Mar  9 18:15:22 piumosso-vm1 kernel:   IN:  raif_lookup_branch /home/nishimura/Filesystems/gmfs/inode.c:143
Mar  9 18:15:22 piumosso-vm1 kernel:     IN raif_lookup_branch: branch=0
Mar  9 18:15:22 piumosso-vm1 kernel:   OUT: raif_lookup_branch /home/nishimura/Filesystems/gmfs/inode.c:167, STATUS: 1033567451
Mar  9 18:15:22 piumosso-vm1 kernel:     OUT d_entry: c26506c0, d_inode: 00000000
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_lookup_backend /home/nishimura/Filesystems/gmfs/inode.c:293, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_create /home/nishimura/Filesystems/gmfs/inode.c:322
Mar  9 18:15:22 piumosso-vm1 kernel: name: hoge
Mar  9 18:15:22 piumosso-vm1 kernel:   IN:  raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:46
Mar  9 18:15:22 piumosso-vm1 kernel:    IN:  raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:29
Mar  9 18:15:22 piumosso-vm1 kernel:    OUT: raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:66
Mar  9 18:15:22 piumosso-vm1 kernel:   update_inode_size: i_size=0, i_blocks=0, i_size_max=0, i_blocks_max=0, iECCw=0
Mar  9 18:15:22 piumosso-vm1 kernel:   update_inode_size: inode: c77dfb88, new i_size=0, i_blocks=0
Mar  9 18:15:22 piumosso-vm1 kernel:   OUT: raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:152, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel: copy_inode_size: i_size=4096, i_blocks=0
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_create /home/nishimura/Filesystems/gmfs/inode.c:408, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_open /home/nishimura/Filesystems/gmfs/file.c:491
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_open /home/nishimura/Filesystems/gmfs/file.c:563, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_flush /home/nishimura/Filesystems/gmfs/file.c:577
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_flush /home/nishimura/Filesystems/gmfs/file.c:590, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_release /home/nishimura/Filesystems/gmfs/file.c:601
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_release /home/nishimura/Filesystems/gmfs/file.c:624, STATUS: 0
Mar  9 18:15:22 piumosso-vm1 kernel:  IN:  raif_d_delete /home/nishimura/Filesystems/gmfs/dentry.c:126
Mar  9 18:15:22 piumosso-vm1 kernel:  OUT: raif_d_delete /home/nishimura/Filesystems/gmfs/dentry.c:156, STATUS: 0

ファイルが存在する場合。

Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_lookup_backend /home/nishimura/Filesystems/gmfs/inode.c:179
Mar  9 17:52:41 piumosso-vm1 kernel:     IN raif_lookup_backend: name="hoge" flag=1
Mar  9 17:52:41 piumosso-vm1 kernel:   IN:  raif_lookup_branch /home/nishimura/Filesystems/gmfs/inode.c:143
Mar  9 17:52:41 piumosso-vm1 kernel:     IN raif_lookup_branch: branch=0
Mar  9 17:52:41 piumosso-vm1 kernel:   OUT: raif_lookup_branch /home/nishimura/Filesystems/gmfs/inode.c:167, STATUS: 980336895
Mar  9 17:52:41 piumosso-vm1 kernel:   IN:  raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:46
Mar  9 17:52:41 piumosso-vm1 kernel:    IN:  raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:29
Mar  9 17:52:41 piumosso-vm1 kernel:    OUT: raif_read_inode /home/nishimura/Filesystems/gmfs/super.c:66
Mar  9 17:52:41 piumosso-vm1 kernel:   update_inode_size: i_size=5, i_blocks=8, i_size_max=0, i_blocks_max=0, iECCw=0
Mar  9 17:52:41 piumosso-vm1 kernel:   update_inode_size: inode: c7897308, new i_size=5, i_blocks=8
Mar  9 17:52:41 piumosso-vm1 kernel:   OUT: raif_interpose_debug /home/nishimura/Filesystems/gmfs/main.c:152, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:     OUT d_entry: c2650f00, d_inode: c7897308
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_lookup_backend /home/nishimura/Filesystems/gmfs/inode.c:293, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1230
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_permission /home/nishimura/Filesystems/gmfs/inode.c:1243, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_setattr /home/nishimura/Filesystems/gmfs/inode.c:1316
Mar  9 17:52:41 piumosso-vm1 kernel: raif_setattr: requested size: 0
Mar  9 17:52:41 piumosso-vm1 kernel:   IN:  raif_truncate /home/nishimura/Filesystems/gmfs/inode.c:1297
Mar  9 17:52:41 piumosso-vm1 kernel:   OUT: raif_truncate /home/nishimura/Filesystems/gmfs/inode.c:1304, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel: raif_setattr: lower file[0] size is: 0
Mar  9 17:52:41 piumosso-vm1 kernel:   update_inode_size: i_size=0, i_blocks=0, i_size_max=0, i_blocks_max=0, iECCw=0
Mar  9 17:52:41 piumosso-vm1 kernel:   update_inode_size: inode: c7897308, new i_size=0, i_blocks=0
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_setattr /home/nishimura/Filesystems/gmfs/inode.c:1363, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_open /home/nishimura/Filesystems/gmfs/file.c:491
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_open /home/nishimura/Filesystems/gmfs/file.c:563, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_flush /home/nishimura/Filesystems/gmfs/file.c:577
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_flush /home/nishimura/Filesystems/gmfs/file.c:590, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_release /home/nishimura/Filesystems/gmfs/file.c:601
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_release /home/nishimura/Filesystems/gmfs/file.c:624, STATUS: 0
Mar  9 17:52:41 piumosso-vm1 kernel:  IN:  raif_d_delete /home/nishimura/Filesystems/gmfs/dentry.c:126
Mar  9 17:52:41 piumosso-vm1 kernel:  OUT: raif_d_delete /home/nishimura/Filesystems/gmfs/dentry.c:156, STATUS: 0

JasonIsofSJasonIsofS2017/01/25 04:23изготовление листовок http://wkrolik.com.ua/products/zhurnaly

トラックバック - http://filesystem.g.hatena.ne.jp/n314/20080321
日記の検索