プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

i_size_writeでpreempt_disable()しないのはOKなのか? の続き このエントリーをはてなブックマークに追加

seqcountが preempt_disableしてない件について というエントリで、seqcountってプリエンプションをなーんも考えてないんだけど、呼び出し側のi_size_write() もなーんも考えてないように見える。これって大丈夫なの?

という疑問を問いかけたら、ひらさんから、i_semを忘れてる。とご指摘をいただいた。
なるほど。おっしゃる通りである。

とゆーわけで安心しつつも、いつおうkernel2.6.17で確認をいれてみる。



・・・・




・・・・・・・・・・・






・・・・・・・・・・・・・・・・・・・






i_sem がそもそも消えていますがなにか?



いや、かわりに i_mutex が追加されていて、
セマフォじゃなくてミューテックスで保護してるので、排他自体はしてるだが、ミューテックスって誰かとバッティングしないかぎり

atomic_xchg();
smp_mb();

の2行で抜けてくるので、プリエンプションはdisableされてないっぽげ。

なので、やっぱりワーストケースでは、i_size_write中にプリエンプションされてi_size_readがえらい待たされるケースがありそうな気がするでゴワスよ。


今のところの結論。
前回の指摘の1は、やっぱり疑わしい。
2と3は脳みそが腐っていたっぽげ。


しかし、つくづく記事にミスが多いブログだこと(^^ゞ


Dont worry
細かい事は気にしない! ランキング!
関連記事


linux | 【2006-06-25(Sun) 01:51:34】 | Trackback:(0) | Comments:(3)
コメント


i_semをロックする際、preempt_disableはしてないです。勘違いしてました、ぺこり。i_size_write()のwrite_seqcount_begin()直後に割り込みが発生し、プリエンプションしたら他のスレッドにて実行中のi_size_read()はread_seqcount_retry()しまくるでしょうね。なので、

>なので、やっぱりワーストケースでは、i_size_write中にプリエンプションされてi_size_readがえらい待たされるケースがありそうな気がするでゴワスよ。

同意です。
運用的に考えるとCONFIG_SMP&CONFIG_PREEMPTは”今まで”はあまり考えられないケースです。MPは通常サーバなのでスループット重視でCONFIG_PREEMPT_NONEに設定されます。なのでもしかすると、このコードを書いた人はそういった想定をしていない可能性はあります。


inode->i_sizeの扱いに関して、個人的にセマフォやmutexを使う必要があったのか疑問を持っています。排他区間が極めて小さいことを考えるとスピンロックを使うべきではないかと。スリープさせるよりビジーウェイトで回した方が排他コストが低いように思います。
2006-06-25 日 03:53:12 | URL | ひら #G3vcSUbA [ 編集]

ああ、なるほどね。
そんな運用しませんから。と。
それは納得できる意見ですね。

スピンロックの件はすいません。オイラI/O系あんまり強くないんで判断できません。
i_sizeに限ればその通りだけど、他のメンバの更新でスピンじゃまずいケースってないのかなぁ・・・・
2006-06-25 日 04:09:11 | URL | 革命の日々 #- [ 編集]


>i_sizeに限ればその通りだけど、他のメンバの更新でスピンじゃまずいケースってないのかなぁ・・・・

まずいですねぇ(笑)
なので撤回(^^;)
2006-06-25 日 05:12:37 | URL | ひら #G3vcSUbA [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。