他のプロセスに対するアプリケーションの時間認識を制御できるようにしたいです。これは私がすぐに時計を巻くことができるようにしたいことを意味します。加速または踏むことが許可されています(歩くのがより安全で簡単ですが)。
あることを知っていますが、電話をかけたりブロックしたりしている間に時計を15秒進めるなどのシナリオを処理しないfaketime
ため、それは私の要件には適していません。この場合、通話の完了にはまだ10秒かかります。これはカーネルが経過時間を追跡するシステムコールであるため意味があります。sleep(10)
epoll_wait(,,,10000)
最終的に私が望むのは、記録されたネットワークトラフィックをアプリケーションで再生することです。記録された各イベントを処理するとき、アプリケーションは前のイベントから実際に経過した時間のようにイベントを確認する必要があります。つまり、ログにイベントがあり、00:01:00
別のイベントがある場合、00:01:07
アプリケーションは再生時に7秒が経過したと考える必要があります(絶対時間は重要ではなく相対時間のみが重要です)。このトラフィックは数時間記録されている可能性があるため、再生を実行するのに時間を費やしたくありません。したがって、各アイドルサイクル中にその時間が自然に過ぎたかのように時計をすばやく巻くことがアイデアです。このような「アイドル期間」は長さが数ミリ秒に過ぎませんが(例えば約80ミリ秒)、その数は数千から数百万に達します。
VM内部でアプリケーションを実行し、VM外部からVMのクロックを制御する必要があるかもしれません。大丈夫ですが、ハイパーバイザーがこれを行うことができるかどうかはわかりません。
単にLinuxカーネルの時計を調整してみましたが、sleep(10)
上記の状況を処理することはできません。 (時計がスケジュールされた終了時間をスキップしても、まだ10秒間スリープ状態です。)