【Linux】カーネル総合4【Kernel】at LINUX
【Linux】カーネル総合4【Kernel】 - 暇つぶし2ch374:login:Penguin
08/10/06 04:07:11 Oq5Gl4Q6
>>368
locklessといっても実はいろいろあってな。
代表例をあげていく。

まず、時刻更新時のxtime更新処理。これは速度云々以前にタイマ割り込みの延長で走る更新処理が遅れちゃいけないという制約がある。時計狂いに直結するから。
だから、普通のread/write lockでは不十分で、「どれだけreaderがいても、writerは(待ったりスピンしたりせずに)即座に書き込めるロックが必要。
逆にreaderはwriterがごにょごにょやってるときは、多少処理が遅くなってもかまわない。だって時刻更新なんてせいぜい1000Hzでしかおきないレアイベントなんだもの。大局的には誤差。
詳細は、seqlockとかシーケンスロックでググってくれ。

次はRCU。
ようするに更新するときに、古いデータが載っているメモリを直接書き換えるのではなく新しいデータが載ったコピーを作る。
んで、read側は古いデータをちゃんと読めるのでロックいらず、write側がread側が知り得ない新しいコピーに書き込めるのでロックいらず。
というアイデア。
なんと、read側はCASもメモリバリアもいらないという最強アルゴリズムなのでlinuxでは適用箇所がガンガン広がっている。
もちろん、read側がクリティカルセクション抜けたときに(ガベコレ的な感覚で)あとから古いデータの削除処理が走るので、適用箇所によってはキャッシュヒット率の関係で性能が下がるときがまれにある。
まあ、readが大多数のデータ構造にしかつかうなってこった。






次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch