CCoW: ワークロードの空間的局所性を考慮したコピーオンライトの最適化パート 1
Apr 02, 2024
抽象的な:
コピーオンライト (CoW) は、プロセス間で効率的なページ共有を可能にする重要なメモリ管理手法です。 具体的には、CoW とフォーク システムコールを組み合わせることで、アプリケーションは、メモリ フットプリントが膨大な場合でも、低いオーバーヘッドで現在のメモリ内データのスナップショットを取得できます。
メモリ データとは、コンピュータのメモリに保存されているデータを指します。 人間の記憶とは異なりますが、両者の間には一定のつながりがあります。
まず、記憶データは人間の記憶力の発達を促進します。 たとえば、コンピューターの記録、保存、検索機能を使用すると、知識を学習、記憶、理解することができます。 現代のテクノロジーは、より効率的な記憶と学習の方法を提供し、知識とスキルをより確実に習得できるようにします。
次に、記憶データは、人々が記憶をより適切に管理するのにも役立ちます。 データをきちんと整理して分類することで、生活、仕事、学習にとって非常に重要な、必要な情報をより早く見つけて思い出すことができます。
最も重要なことは、インメモリ データにより人間の記憶喪失が防止されることです。 人間の記憶は時間の経過とともに徐々に弱くなり、これを「忘却」と呼びます。 しかし、コンピュータのハードドライブにデータを保存しておくことで、必要な情報や記憶を確実に保持し、いつでも取り出すことができます。
したがって、記憶データと人間の記憶との関係は肯定的であると言えます。 テクノロジーに依存しすぎるべきではありませんが、記憶データを合理的に使用すると、作業効率と学習結果が向上し、記憶をより適切に管理し、忘れるのを防ぐことができます。 私たちは記憶力を向上させる必要があることが分かります。カンクサは多くのユニークな効果を持つ伝統的な漢方薬素材であり、そのうちの 1 つは記憶力の向上であるため、カンクサは記憶力を大幅に向上させることができます。 カンクサの効能は、タンニン酸、多糖類、フラボノイド配糖体などを含む複数の有効成分に由来しています。これらの成分は、さまざまな経路を通じて脳の健康を促進します。

ただし、CoW はページ フォールト ハンドラーでページごとに発生するため、ページ フォールトが発生するたびにオペレーティング システムが関与する必要があります。 これは、書き込み集中型のワークロードのパフォーマンスの大幅な低下につながります。
この論文では、CoW の問題を軽減するためにメモリ アクセスの局所性を考慮して最適化された CoW スキームであるカバレッジベースのコピーオンライト (CCoW) を提案します。 CCoW は、カバレッジの概念を使用してプロセス アドレス空間の空間的局所性を測定します。
CoW の処理中、CCoW は局所性の高いメモリ領域に事前に複数のページをコピーするため、書き込み集中型のワークロードに対する OS の関与を最小限に抑えます。 局所性を測定するための課題を説明し、コンセプトを実装するための最適化を提供します。
プロトタイプを使用した評価では、このアプローチにより、少量のメモリ オーバーヘッドでアプリケーションの全体的なパフォーマンスが最大 10% 向上することが実証されました。
キーワード: コピーオンライト。 仮想メモリ システム。 フォーク; レディス; ページフォルト。
1. はじめに
オペレーティング システム (OS) の主な役割は、貴重なシステム リソースを管理することであり、コピー オン ライト (CoW) は、最新のオペレーティング システムで採用されている最も基本的なメモリ管理技術の 1 つです。
2 つ以上のプロセスが同じデータを持つ必要がある場合、CoW スキームを使用すると、プロセスはページをすぐに複製するのではなく、同じページを共有できます。 共有ページは、プロセスの 1 つが共有ページに書き込む場合にのみ、オンデマンドで複製されます。
仮想メモリシステムは、プロセス間のデータ共有を効果的に提供でき、プロセスフォーク中のアドレス空間の複製、同一ページの重複排除、ゼロページ共有などのさまざまな仮想メモリ機能がコピーオンライトに基づいて実装されています[1-3]。これらの機能のおかげで、アプリケーションは少ないスペースオーバーヘッドで自分自身のコピーを作成し、そのクローンを適切に使用できます。
たとえば、一般的なメモリ内キーバリュー ストア システム [4] の 1 つである Redis は、フォーク システムと組み合わせてコピー オン ライトを使用して、メモリ内データをストレージに永続化するよう呼び出します。 受信リクエストを処理している間、Redis メインプロセスはフォークを使用して子プロセスを定期的に生成します。 子プロセスは、メイン プロセスと同じメモリ スナップショットから始まり、メモリ内のデータをストレージに保存します。

スナップショットはメインプロセスのアドレス空間から分離されていますが、コピーオンライトによって管理されるため、メインプロセスと子プロセスは現在のデータとスナップショットの間の一貫性を維持するために複雑なメカニズムを必要としません。
したがって、仮想メモリ システムではコピー オン ライトが不可欠であると考えることができます。しかし、現在のコピー オン ライトは、書き込み集中型のワークロードを伴うメモリ集中型アプリケーションでは問題があります。 具体的には、データの重複は通常、OS のページフォールト ハンドラーで発生します。 データの複製はページごとに処理され、複数回の書き込みが行われるため、このプロセスでかなりの数のページ フォールトが発生する可能性があります。
各ページの障害には OS が関与しており、ユーザーとカーネル モードの切り替えが頻繁に発生します。 メモリを大量に使用するアプリケーションの膨大なメモリフットプリントを考慮すると、モード切り替えの数は多くなります。
さらに、ページ テーブルは複製中に変更されるため、システム内のすべてのコアの変換ルックアサイド バッファ (TLB) の停止につながります。 これらはすべて無視できないオーバーヘッドを引き起こし、アプリケーションのパフォーマンスを低下させます。
この論文では、新しいコピーオンライト最適化スキームであるカバレッジベースのコピーオンライト (CCoW) を提案します。 ページが書き込みのためにアクセスされると、メモリ アクセスの空間的局所性により、その近くのページもすぐに書き込みのためにアクセスされる可能性があります。 CCoW は空間的局所性を利用して、コピー オン ライトのページ フォールトの数を減らします。 具体的には、CCoW はコピーオンライトを大きな粒度 (リージョンと呼ばれます) で処理します。
CCoW は、ページ フォールト ハンドラーで複数のページをコピーすることにより、コピー オン ライトによるページ フォールトとそれに伴うオーバーヘッドを大幅に削減できます。 ただし、空間的局所性の程度はプロセスのアドレス空間内の位置に応じて大きく異なり、メモリの局所性の低い部分を複製しても時間と空間のオーバーヘッドのみが発生します。
この欠点を克服するために、プロセス アドレス空間内の空間的局所性を評価するための正確な低オーバーヘッド メカニズムを提案します。 CCoW は、各領域のコピーオンライトと書き込みの数をカウントします。
フォークを介して局所性情報を運ぶことにより、空間的局所性の程度を推定することができ、CCoW は局所性の高い領域に対してのみプレコピーを効果的に実行します。提案した CCoW スキームを Linux カーネルに実装しました。
オペレーティング システムの仮想メモリ システムに統合されているため、アプリケーションは変更を加えることなく CCoW の恩恵を受けることができます。 マイクロベンチマークを使用してパフォーマンス特性を分析しました。現実的なワークロードでのベンチマークを使用した評価では、CCoW が適切な量のメモリ オーバーヘッドでアプリケーションのパフォーマンスを最大 10% 向上できることがわかりました。

この文書の残りの部分は次のように構成されています。 セクション 2 では、仮想メモリやフォークなど、この論文の背景と関連作業について概説します。 CCoW の設計とその実装の詳細についてはセクション 3 で説明します。セクション 4 では CCoW の評価結果を示します。 最後に、この論文をセクション 5 で締めくくります。
2. 背景と関連研究
2.1. ページングと仮想メモリ
ほとんどすべての現代のコンピュータとオペレーティング システムは、主要なメモリ管理スキームとしてページングと仮想メモリを採用しています [5]。 メインメモリは同じサイズのページに分割されており、OSはページ単位でユーザープロセスからメモリを割り当てたり、割り当てを解除したりします。
OS は、プロセスのアドレス空間とシステム上の物理的な位置のマッピングも維持します。 プロセス アドレス空間内の各論理ページはその物理的な場所にマッピングされ、このマッピングはページ テーブルの形式で保存されます。
プロセスのメモリ参照を処理するために、プロセッサ内のハードウェア コンポーネントであるメモリ管理ユニット (MMU) は、ページテーブルを参照して、要求されたアドレスをその物理アドレスに変換します。 ページ テーブルはページ テーブル エントリ (PTE) で構成されます。 各 PTE にはマッピング情報が含まれており、対応するページとマッピングのステータスを記述するための追加フィールドが含まれる場合があります。
ページ サイズは、アーキテクチャによって異なりますが、通常、ほとんどのアーキテクチャで 4 KB です。これは、プロセス アドレス空間内の各 4 KB に 1 つの PTE が必要であることを意味します。 プロセスのアドレス空間の巨大なサイズを考慮すると、単一プロセスであってもページ テーブルのサイズは膨大になる可能性があります。
たとえば、4 KB ページと 8- バイトの PTE を持つ 64- ビット アーキテクチャのプロセスのページ テーブルのサイズは 32 PB (264/212 × 8=255 バイト) になります。 ただし、アドレス空間は通常、まばらに存在しており、アドレス空間の大部分は必要ありません。
これにより、ページ テーブルの階層構造がわかりやすくなります。 ページ テーブル全体が、1 ページに収まるページ テーブル部分に分割されます。 未割り当てアドレス領域にはページテーブル片は割り当てられない。

設定されたページテーブル部分は、より高いレベルのページテーブル部分として要約できます。 この間接化は、1 ページ上の部分のみが存在するまで繰り返されるため、ページ テーブルのコンパクトな形式が可能になります。
For more information:1950477648nn@gmail.com






