タグ

2015年7月30日のブックマーク (3件)

  • Linux I/O のお話 write 編 - naoyaのはてなダイアリー

    write はページに dirty フラグを立てるだけなので決してユーザープロセスを待たせない って、当にそうなんでしょうか?(否定しているわけではなく、純粋な疑問です。) と質問をもらったので、最近追ったことをここでまとめます。かなり長文です、すいません。また、まだまだ不勉強なので間違っているところもあるかもしれません。ツッコミ大歓迎です。 まず、オライリーのカーネルの 15章 ページキャッシュ 15.3 汚れたページのディスクへの書き込み から引用。 ご存知のように、カーネルは、ブロック型デバイスのデータを含むページをページキャッシュに蓄えています。プロセスが何らかのデータを更新した場合は、必ず対応するページに汚れている印をつけます。すなわち、PG_dirty フラグを設定します。 UNIX システムでは、汚れたページのブロック型デバイスへの書き込みを遅延することができます。この方

    Linux I/O のお話 write 編 - naoyaのはてなダイアリー
  • ファイルに書きこみを行ったらかならず fsync しよう - にょきにょきブログ

    通常、なんの考えも無しにプログラムがファイルに書きこみを行った後、運悪くシステムがクラッシュするとファイルが失われる可能性がある。通常のファイル書き込みはファイルに書き込んでいるように見えて実はバッファがメモリ上に蓄えているだけだからだ。このメモリ上に蓄えられた、いずれストレージに書き込むデータのことをダーティページと言う。何もしなくてもダーティページに書きこまれたデータはカーネルが定期的にストレージに書き込むのだが、若干のタイムラグがある。この間にクラッシュするとデータが失われるわけだ。データが書き込んだ直後、すぐストレージに書き出したい場合は fsync システムコールを呼ぶ必要がある。 C や C++ といった低レイヤーを扱う言語なら fsync を呼ぶだけで良いが、Java のような高級言語でどうやって fsync を発動させればよいか。 通常のファイル書き込み 下記のような一般的

    ファイルに書きこみを行ったらかならず fsync しよう - にょきにょきブログ
  • NFS経由で正しい内容が読めない場合がある問題の原因と解決策 : DSAS開発者の部屋

    今日はLinuxのNFSの問題について書きたいと思います。 (Linux以外の実装は調べていませんm(_ _)m) その問題とは、NFS経由で読んだファイルの内容が正しくない場合がある、というもので、NFSクライアントがnoacオプションつきでmountしていても発生してしまいます。(noacオプションが指定されていない場合は、これから述べる原因とは関係なく、メタ情報がキャッシュされるのでそもそも正しい情報が得られない可能性があります) 同じファイルに対して 一秒間の間に 異なるNFSクライアントホストから 同じサイズのデータを書き込んだ このとき、自分より後に誰かが書き込んでいても、それより前に自分で書き込んだデータが読み出されてしまいます。 ちょっとわかりづらいので図示します。 時間 NFSクライアント1 NFSクライアント2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    NFS経由で正しい内容が読めない場合がある問題の原因と解決策 : DSAS開発者の部屋