9

プロセスのコア ダンプを使用してチェックポイント/再起動を実装できますか? コア ファイルにはプロセスの完全なメモリ ダンプが含まれているため、理論的には、コアがダンプされたときと同じ状態にプロセスを復元できるはずです。

4

4 に答える 4

10

はい、可能です。GNU Emacs は、起動時間を最適化するためにこれを行います。一連の Lisp ファイルをロードしてイメージを生成し、再起動可能なコアをダンプします。

数年前、私は GNU Make 3.80 用のパッチを作成して、まったく同じことを行いました (GNU Emacs から借用したコードを使用)。

このパッチにより、make: に新しいオプションが追加されましたmake --dump。ユーティリティは を読み取りMakefile、ルールを実行する代わりにコア ダンプを生成します。これを再起動して実際のビルド (解析されたルール ツリーの評価) を実行できます。

プロジェクトが非常に大きかったため、ソース ツリー全体のすべての make ルールをロードするのに 30 秒かかりました。この最適化により、インクリメンタル ビルドは、30 分間の起動ペナルティなしで、ほぼ瞬時に開始されました。

これにはカーネルサポートは必要ありません。必要なのは、コア ファイルの構造に関する知識です。

このアプローチに加えて、何年も前に Linux 用のプロセス チェックポイント プロジェクトがありました (何が起こったのだろうか)。

于 2013-04-16T22:55:38.687 に答える
7

コメントしたように、アプリケーション チェックポイントを探して、Berkley Lab Checkpoint & Restartなどのライブラリを使用できます。ただし、これらのライブラリは正確にcore(5)ダンプ ファイルを使用するわけではなく、チェックポイント プログラムが実行できること、およびチェックポイント イメージ内で正確に何が永続化されるかについて、いくつかの制限と規則があります。(開いているファイル記述子とネットワーク ソケットは、通常、永続化できません)。

一部の Unix (およびおそらくパッチが適用された Linux カーネルの一部) では、カーネル自体のチェックポイント機能が制限されていました (1980 年代の Cray Unix にはいくつかの機能がありました)。

于 2013-04-17T05:43:46.510 に答える
6

いいえ、カーネルからの特別なサポートがなければ、これは一般的に不可能です。カーネルは、ファイル記述子テーブル、IPC オブジェクトなど、プロセスごとの多くの状態を維持します。

ファイルが開いていない、ソケットが開いていない、IPCオブジェクトが生きていない、共有メモリ領域がないなど、多くの単純化の仮定を喜んで行う場合、理論的には可能ですが、実際にはそうではありませんこれらの譲歩があっても、Linux では可能です。

于 2013-04-16T21:56:47.973 に答える
0

Debian には、参照したいパッケージがいくつかあります。

  1. blcr-util - Linux プロセスをチェックポイントして再起動するためのユーザー空間ツール

これは BLCR (Berkeley Lab Checkpoint/Restart) に関連しています。https://upc-bugs.lbl.gov/blcr/doc/html/FAQ.html#whatisblcr を参照してください。

  1. criu - ユーザー空間でのチェックポイントと復元https://criu.org/Main_Page

    2.1 docker - 最近のバージョンではチェックポイントをサポートしています 。https: //criu.org/Docker を参照してください。

    2.1. containerd - runC を制御するデーモン

これには、興味深いチェックポイント機能が含まれています。

ライブ マイグレーションをサポートする openvz も参照してください: https://openvz.org/Checkpointing_and_live_migration

于 2016-09-10T17:22:30.453 に答える