2012-04-19 6 views
9

私は定期的に(1〜2秒後に)フォークすることでチェックポイントを取るアプリケーションを持っています。したがって、チェックポイントは、元のプロセスの何らかのエラーが発生したときに起動を要求されるまでアイドル状態を維持する元のプロセスのフォークです。ページフォールトトラップのコスト

私の質問は、フォークのコピーオンライトメカニズムがどれほどコストがかかります。元のプロセスがメモリページに書き込むたびに(最初にチェックポイントを取得した後に)発生するページフォールトトラップのコストはどれくらいですか?コピーオンライトメカニズムは元のプロセスにチェックポイントとは異なる物理ページ。

私の意見では、割り込みが発生したときにページフォールトトラップのオーバーヘッドがかなり高くなる可能性があります。ユーザー空間の土地からカーネルスペースの土地に着陸し、カーネルからユーザースペースに戻ることになります。このようなaページフォールトトラップから失うことができるCPUサイクルの数。 RAMは十分に大きく、ハードディスクに交換する必要はありません。

私は、チェックポイント方式がこれよりも効率的であると想像するのは難しいので、なぜページトラップのオーバーヘッドについて心配しているのだろうかと言うことができますが、どれだけのコストがかかりますかこのスキームのためにそこに。

+0

これは、アプリケーションのデータアクセスパターンに大きく依存します。チェックポイントの有無にかかわらずランタイムを比較して、チェックポイントがランタイムにどのように影響するかを確認してください。 –

+1

このチェックポイントの有用性はわかりません。 fork()の後、親と子は同じです。親がexit()を実行すると、子プロセスは、親プロセスが参照を削除したため、おそらく同じ物理ページを参照している可能性があります(子プロセスのCOW状態は子プロセスの "attached"プロセスを参照するだけで意味がありません) – wildplasser

+0

ワイルドプラッサー、チェックポイントの必要性は、アプリケーションの再起動を避けることです。これは、以前に保存された状態であるチェックポイントa.k.aから再開することができる。 – pythonic

答えて

10

教育的な推測のために荒い数学を自分で行うことができます。何のディスクアクセス(〜100億サイクル)ないと仮定すると、あなたが不明(約、x86_64版の)トラップと戻るための

  • 160サイクル
  • 有効性チェック、クォータ、会計、そしてその他もろもろ(を考慮する必要があり、 キャッシュされたデータの
  • )最初のアクセスで10〜100サイクルが追加されます4096バイト、何かの周りに500〜800サイクル
  • TLB無効化(のmemcpyを揃え
  • )千サイクル百おそらくいくつかのいずれかで立ち退きまたは memcpyの実装に依存して、1つの保証されたキャッシュミス(80〜400サイクル)。あなたのアクセスパターンには、どちらか一方が優れているかどうかが重要です。

このように、2000サイクル前後で、いくつかのエフェクト(TLBやキャッシュエフェクトなど)が広がっていて、すぐには見えないという話があります。 OmondiとSedukhinは2003年にP-IIIに戻って1700回のサイクルを報告しました。これはこの見積もりと一致しています。

ページが以前に書かれたことがない場合、2000年のL. Torvaldsのコメントによれば、物は少し異なります。ゼロページのコピーオンミスはプールから別のゼロページを引き出しますゼロをコピーしません。しかし、それはキャッシュ・ミスを保証するものでもあります。

+0

非常に有益です。ありがとう! – pythonic

関連する問題