正規の開発者がリリース Linuxカーネル開発メーリングリスト経由で、 のパッチのセット の実装 日和見メモリクリーニング、 睡眠時間を大幅に短縮 システムの。
最適化 記憶構造の解放を積極的に呼び出すことによって達成されます 一意の情報を含まず、スリープモードから戻った後に動的に復元できる子(たとえば、匿名メモリ領域や複数のメモリページキャッシュ)。
パッチについて
主なアイデア 不要なデータを削除した後、 メモリ画像サイズが縮小されます 保存するrスリープモードに入る前 その結果、低速メディアからの書き込みと読み取りに必要な時間が短縮されます。
デフォルトでは、 メモリダンプを保存するとき スリープモードの場合、カーネルはメモリを節約します すべてのキャッシュはどうですかしかし リリースの標準的な可能性があります スリープモードへの移行の初期段階で不十分なリソース条件をシミュレートする不要な構造。
この機能 パラメータ「/ sys / power / image_size」を使用してアクティブ化できます スリープモードに移行するまでの時間が大幅に短縮されます。
Canonicalは、さらにXNUMXつのパラメーターを追加することを提案しています、これにより、不要な構造を事前に解放できるため、実際のスリープモードへの移行が可能な限り迅速に完了し、スリープモードからの復帰にパラメータを適用した場合とほぼ同じ時間がかかります。
テストと結果
8GBのRAMを搭載したシステムでのテスト および8GBのスワップパーティション メモリの85%を使用している間 デフォルト設定で表示(image_size = default) 時間の減少 スリープモードに移行するには 51.56の4.19 スリープモードに切り替わる60秒前に過剰メモリクリーンアッププロセスが開始された秒数。
保存されたメモリイメージのサイズが縮小されたため、回復時間は26.34秒から5秒に短縮されました。
これは、システムを休止状態にする前に、ユーザースペースタスクが日和見的なメモリ再利用をトリガーできるようにするインターフェイスを提供する最初の試みです。
事前にメモリを呼び出す(システムがアイドル状態のときなど)と、
休止状態の画像のサイズを縮小し、休止状態を大幅に高速化し、時間を再開します。
通常のクリーニングモードの場合 過剰なメモリの場合(image_size = 0) 有効になりました システムでは、スリープモードに移行する時間 73.22秒から5.36秒に減少しました スリープモードから戻るまでの時間は変わりませんでした(5.32秒から5.26秒にほんの一瞬だけ減少しました)。
この機能の一般的な使用例は、優先度の高いクラウドインスタンスが、優先度の低いインスタンス(たとえば、スポットインスタンス[1])を休止状態にすることで追い越すことができるようにすることです。
オポチュニスティックメモリ再利用は、最小限のワーキングセットのみを使用して、大量のメモリを割り当て、ほとんどの時間アイドル状態を維持するインスタンスをすばやく休止状態にする場合に非常に効果的です。
使用
提案された方法は、スリープモードに迅速に移行する必要があり、そのような移行の必要性が事前に予測できる状況で要求することができます。
たとえば、クラウドシステムでは、優先度の低い仮想環境(Amazon EC2のポイント環境)が動的に休止状態になり、プライマリリソースの消費量が増えるにつれて占有メモリを解放できます。
負荷が軽減されたとき 一次設定では、 優先度の低い環境はスリープモードから復帰します。 このような状況では、適切なサービス品質を維持するために、スリープモードに出入りする時間を最小限に抑えることが重要です。
予防的クリーニングフェーズは、主負荷の特定のレベルに達したときに開始できます。これは、優先度の低い環境の凍結につながるレベルに先行します。