私は定期的に(1〜2秒後に)フォークすることでチェックポイントを取るアプリケーションを持っています。したがって、チェックポイントは、元のプロセスの何らかのエラーが発生したときに起動を要求されるまでアイドル状態を維持する元のプロセスのフォークです。ページフォールトトラップのコスト
私の質問は、フォークのコピーオンライトメカニズムがどれほどコストがかかります。元のプロセスがメモリページに書き込むたびに(最初にチェックポイントを取得した後に)発生するページフォールトトラップのコストはどれくらいですか?コピーオンライトメカニズムは元のプロセスにチェックポイントとは異なる物理ページ。
私の意見では、割り込みが発生したときにページフォールトトラップのオーバーヘッドがかなり高くなる可能性があります。ユーザー空間の土地からカーネルスペースの土地に着陸し、カーネルからユーザースペースに戻ることになります。このようなaページフォールトトラップから失うことができるCPUサイクルの数。 RAMは十分に大きく、ハードディスクに交換する必要はありません。
私は、チェックポイント方式がこれよりも効率的であると想像するのは難しいので、なぜページトラップのオーバーヘッドについて心配しているのだろうかと言うことができますが、どれだけのコストがかかりますかこのスキームのためにそこに。
これは、アプリケーションのデータアクセスパターンに大きく依存します。チェックポイントの有無にかかわらずランタイムを比較して、チェックポイントがランタイムにどのように影響するかを確認してください。 –
このチェックポイントの有用性はわかりません。 fork()の後、親と子は同じです。親がexit()を実行すると、子プロセスは、親プロセスが参照を削除したため、おそらく同じ物理ページを参照している可能性があります(子プロセスのCOW状態は子プロセスの "attached"プロセスを参照するだけで意味がありません) – wildplasser
ワイルドプラッサー、チェックポイントの必要性は、アプリケーションの再起動を避けることです。これは、以前に保存された状態であるチェックポイントa.k.aから再開することができる。 – pythonic