クラウドシステムのメモリアクセスを改善する
新しいシステムは、クラウドアプリケーションのメモリアクセス効率を向上させるためにDRAMキャッシングを使ってるよ。
― 1 分で読む
目次
メモリプーリングがクラウドプロバイダーやシステムビルダーの間で増えてきてるよ。このアプローチはシステムがメモリリソースを共有できるようにするから、お金の節約になる。でも、これによってメモリアクセス時間が遅くなることもあるんだ。この問題に対処するために、ローカルDRAM(動的ランダムアクセスメモリ)をファブリック接続メモリ(FAM)のキャッシュとして使うことができる。データプリフェッチ技術を使うことで、FAMにアクセスする際の待機時間を減らせるんだ。
この記事では、FAMから小さなデータブロックをDRAMキャッシュにプリフェッチして、データへのアクセススピードを改善するシステムを紹介するよ。提案されたシステムはデータアクセスの遅延を減らして、アプリケーションのパフォーマンスを上げるんだ。さらに、このプロセスを強化するために、FAMでの帯域幅競争に関連する問題を最小限に抑える手順を追加している。目的は、メモリノード内でデータリクエストをうまく処理することで、需要とプリフェッチリクエストのニーズのバランスを取ること、さらに観測された遅延に基づいてプリフェッチレートを調整することだよ。
評価では、このシステムがシングルノードとマルチノードのセットアップで異なるアプリケーションベンチマークを使用してどのように機能するかを調べる。結果として、DRAMキャッシュのプリフェッチを使うことで、命令あたりのサイクル(IPC)が約7%改善されることが示された。追加の最適化を行うことで、さらに7-10%の改善が見込まれるかもしれない。
ワークロードの進化
現代のアプリケーションは急速に変わっている、特に機械学習(ML)手法の台頭によって。これらの手法は、大きなデータセットを必要とするんだ。データセンターでは、ワークロードがテラバイトのデータを参照することができて、メモリシステムに高い要求をかける。
時間が経つにつれて、DRAMとディスクの速度差が広がってきていて、システム設計者は追加ストレージのためにディスクを使うよりも大きなDRAM容量を好むようになった。データ移動に関連するコストやページフォルトによる遅延を減らすためのさまざまな技術が提案されている。これらの方法のいくつかは、より多くのDRAMを使用したり、アプリケーションをメモリ内で専用に実行したり、データブロックをプリフェッチしたり、リモートメモリを利用することを含んでいる。
データセンターのサーバーは、異なるメモリニーズを持つアプリケーションを実行することが多い。サーバーに必要以上のDRAMがあると、一部のアプリケーションは利用可能なメモリを十分に活用できないことがある。このメモリの過小利用は広く見られるようになっていて、GoogleやAlibabaのデータによれば、割り当てられたメモリのかなりの部分が未使用のままになっていることが多い。
DRAMのコストは安定しているから、サーバーのメモリ容量を拡張するのがどんどん高くなってきている。実際、メモリはサーバーフリートの総コストの大部分を占めることが多い。過小利用されたメモリは、大規模なデータセンターの管理においてかなりのコストを引き起こすことがある。
メモリの非集約化を理解する
メモリの非集約化によって、アプリケーションは特定のサーバーに縛られることなく、必要に応じて集中プールからメモリにアクセスできるようになる。新しいデータセンターのサーバーは、メモリリソースを安価に提供する方法を見つけるために、非集約メモリを探っている。探索されている主なアプローチは二つある。
- RDMA(リモートダイレクトメモリアクセス)メソッドは、他のサーバーのメモリに標準的なOSページングメソッドを使ってアクセスできるようにする。
- 二つ目のアプローチは、CXL(コンピュートエクスプレスリンク)を使用して、サーバー間で共有メモリプールを作ることだ。
これらのアプローチは、新しいメモリ階層に新たなレイヤーを追加して、インターコネクトを介して共有DRAMを導入する。非集約メモリや不揮発性メモリなどの新しいメモリタイプが従来のメモリに近い速度になってきているので、これらのメモリレベルからデータにアクセスするためのより速い方法を見つける必要がある。
この記事では、DRAMと非集約メモリのような下位メモリ層との間でデータを転送するプリフェッチメソッドについて説明するよ。
DRAMキャッシュ提案
この提案は、ファブリック接続メモリ(FAM)とDRAMとの間でプリフェッチメカニズムを形成するために、ルートコンプレックスレベルで検出されたLLC(最終レベルキャッシュ)ミスを使用することを提案している。アイデアは、FAMのキャッシュとしてローカルDRAMの一部を使うことで、これをDRAMキャッシュと呼ぶよ。
このアプローチの利点を示すために、Signature Path Prefetcher(SPP)を例として使う。これにより、DRAMキャッシュを使用することで得られるパフォーマンスの改善を示すことができるが、他のプリフェッチャーもこの目的に適応できる。DRAMキャッシュプリフェッチャーは、キャッシュされたFAMデータのメタデータを追跡するよ。もしキャッシュされているデータにリクエストがあった場合、それはFAMにアクセスする際の長い遅延ではなく、DRAMの遅延で処理される。
以前のシステムがDRAMと他のメモリ間でページレベルの転送を使っていたのとは異なり、この提案はハードウェア内でサブページレベルのプリフェッチを直接行うことに焦点を当てている。
複数のノードがFAMを利用できるため、これらのノード間でFAMの帯域幅が効果的に使用されることを確保することが重要だ。以前の研究では、プリフェッチスロットリングがメモリ帯域幅を最適化するのに役立つことが示されている。したがって、私たちの提案では、複数のノードからの需要ストリームとプリフェッチストリームの間でFAMの帯域幅を管理するために、プリフェッチスロットリングを統合している。
主要な貢献
この研究は、以下のいくつかの重要な貢献を行っている。
- FAMからローカルDRAMにデータをキャッシュしてプリフェッチするシステムアーキテクチャを提案し、サブページブロックレベルでキャッシュを管理する。
- FAMでの混雑のレベルに基づいてDRAMキャッシュプリフェッチのレートを調整する適応プリフェッチ機構を導入する。
- メモリノードでWeighted Fair Queueing(WFQ)戦略を使用することを提案し、その有効性をプリフェッチスロットリング手法と比較する。
- 提案されたプリフェッチ機構をシングルノードとマルチノードの両方のセットアップで評価する。
CXLの接続
CXLはキャッシュコヒーレンスを保証し、プロセッサーがアクセラレーターやメモリエクスパンダーなどのさまざまなデバイスと通信できるようにする標準だ。既存のPCIe物理層に基づいており、CXL.cache、CXL.mem、CXL.ioの三つの異なるプロトコルを提供している。CXLを介してプロセッサーに接続されるデバイスは、これらのプロトコルの一つまたは複数を使用することができる。
この記事では、主にCXL.memプロトコルを使用したメモリプーリングのシステムについて説明する。このセクションの図は、計算ノードが共有メモリノードからメモリをプールする様子を示していて、このメモリをファブリック接続メモリ(FAM)と呼んでいる。
CXLルートコンプレックスにはCXL.memプロトコルを実装するエージェントが含まれている。このエージェントはCPUを代表して通信し、CXLエンドポイントとのデータ転送を管理する。このシステムにおいて、エンドポイントはFAMデバイスとそのコントローラーで構成されている。FAMコントローラーは、CXLコマンドをFAMデバイスが理解できるリクエストに変換する。
キャッシュミスや書き戻しが発生すると、物理アドレスに基づいてローカルメモリコントローラーまたはCXLルートコンプレックスによって処理され、ホスト管理デバイスメモリ内の特定のデコーダーによってアドレスデコードが行われる。
メモリプリフェッチの概要
データプリフェッチは、異なるメモリレベルでのアクセス遅延を隠すために使われる技術だ。プリフェッチャーは、過去のアクセスパターンに基づいて未来のメモリアドレスを予測する。一般的な戦略には、アドレスデルタの分析、キャッシュミスを引き起こすプログラムカウンター、アクセス履歴の調査が含まれる。最近の進展には、ニューラルネットワークや強化学習を使ったプリフェッチが含まれている。
この作品では、SPPがDRAMキャッシュプリフェッチャーのベースラインアーキテクチャとして機能する。このプリフェッチャーは、過去のアクセス行動のコンパクトな表現であるシグネチャを使用して、メモリアクセスパターンを追跡する。SPPはシグネチャテーブルとパターンテーブルの二つのテーブルから構成されている。
キャッシュミスが発生すると、このミスの物理アドレスを使ってシグネチャテーブルを検索し、最後のキャッシュミスのアドレスと現在のシグネチャを見つける。この状態を利用して、次に期待されるアクセスパターンを計算し、今後のアクセスについて予測を行う。
SPPは、アクセスストリームが一つのメモリページから別のページに変わるときに文脈を構築するためのグローバル履歴テーブルを維持している。このテーブルのエントリは、各アクセス時に更新され、学習して適応できるようになる。
システムアーキテクチャの詳細
このセクションでは、DRAMキャッシングとプリフェッチメカニズムを可能にするシステムアーキテクチャの構成要素を概説する。ここでは、需要リクエストとDRAMキャッシュプリフェッチリクエストについて話す。DRAMキャッシュプリフェッチは、コアプリフェッチリクエストとは異なるもので、コアのキャッシュプリフェッチャーによって発行される。しかし、私たちのシステムはLLCでミスしたすべてのリクエストを需要リクエストとして扱う。したがって、LLCでミスしたコアプリフェッチリクエストもDRAMキャッシュプリフェッチャーのトレーニングに寄与する。
強化されたルートコンプレックス
DRAMキャッシングとプリフェッチメカニズムは、ルートコンプレックスに加えられた強化によってサポートされている。これには、プリフェッチャーとプリフェッチキューが追加されていて、FAMに送信される需要リクエストとプリフェッチリクエストを同時に処理できるようになっている。
私たちのDRAMキャッシュプリフェッチャーはSPPアーキテクチャに基づいているが、標準的なキャッシュブロックサイズではなく、より小さなサブページブロックで動作するように修正されている。プリフェッチャーは、LLCミスの物理アドレスに基づいてアルゴリズムをトレーニングし、正確に整列されたプリフェッチアドレスを生成する。
メモリアクセスを完了するためには、物理アドレスをローカルのFAMアドレスに変換する必要がある。私たちは、この変換プロセスがメモリ階層内の他のコンポーネントによって管理されると仮定している。私たちのプリフェッチャーを実装するためのストレージニーズは約11KBだ。
プリフェッチキュー
プリフェッチャーに加えて、ルートコンプレックスに固定長のプリフェッチキューが追加されている。LLCでFAMに向けたリードミスが発生するたびに、プリフェッチャーは「プリフェッチ度」と呼ばれる数のプリフェッチリクエストを生成する。各プリフェッチリクエストは、FAMに送信される前に、プリフェッチキュー内にスペースが必要だ。
現在処理中のリクエストはこのキューに保存されていて、需要リクエストアドレスがアクティブなプリフェッチに属するかどうかを確認するのを助けている。プリフェッチキューの機能は、プロセッサキャッシュで使われるミスステータス処理レジスタ(MSHR)のそれに似ている。キューがいっぱいになると、以前のリクエストからの応答が受信されるまで、新しいプリフェッチを発行することができない。
プリフェッチキューは、その固定長のおかげで発行されるプリフェッチリクエストのレートを効果的に制御できる。静的な方法は一部のアプリケーションにとってはうまく機能するが、他のアプリケーションにとっては効率的でないプリフェッチにつながる場合もある。したがって、私たちの設計には、プリフェッチキューのみに頼るのではなく、プリフェッチレートを適応させるメカニズムも含まれている。
DRAMキャッシュ
DRAMキャッシュは、オペレーティングシステムに頼るのではなく、ハードウェアによって管理される。OSはセットアッププロセス中のみ役割を果たし、物理メモリを分割し、DRAMキャッシュとして使用する範囲を指定する。私たちのシステムは、DRAMキャッシュをセット連想キャッシュとして管理し、最も最近使用されていない(LRU)置換ポリシーを使用する。
FAMはDRAMキャッシュに比べて大きなアドレス空間を持つ可能性があるため、DRAMキャッシュのメタデータをFAMアドレスをハッシュして限られた数のスロットに管理する。アドレスの衝突を最小限に抑えるために、スロットの数を使用可能なFAMブロックの数を超えたり、Cuckooハッシングのような別の技術を検討することができる。
需要リクエストとプリフェッチリクエストの処理
システム内での需要リクエストの流れは、要求されたブロックがすでにDRAMキャッシュにあるかどうかを確認するためにプリフェッチャーに相談することを含む。もしデータブロックが存在すれば、DRAMキャッシュのブロックアドレスを持つリクエストがローカルメモリコントローラーに送信される。この元々の需要リクエストは、この新しいリクエストが必要なデータを戻してくるのを待つことになる。
要求されたブロックがDRAMキャッシュに見つからない場合、元々の需要リクエストは通常のアクセスとしてFAMに直接進む。DRAMキャッシュのヒットかミスに関係なく、プリフェッチャーはすべての発信される需要リクエストに対してプリフェッチアドレスを生成し、プリフェッチキューとDRAMキャッシュのメタデータをチェックして冗長なリクエストを避ける。
プリフェッチリクエストが発行されると、プリフェッチャーはDRAMキャッシュのメタデータをチェックして、利用可能なスペースがあるかどうかを確認する。スペースがある場合、入ってきたプリフェッチされたブロックがキャッシュに直接送信される。もしスペースがない場合、プリフェッチャーは最も最近使用されていないブロックを排出して新しいデータのためのスペースを作る。
FAMコントローラー
FAMコントローラーは、CXL.memプロトコルを使用して受信リクエストをFAMが処理できるDDRリクエストに変換する役割を担っている。実際の実装では、さまざまなPCIe/CXLレーンに対応する複数ポートを持ち、バックエンドで複数のDDRメモリチャンネルを管理することができる。
コントローラーは、受信リクエストを入力キューに整理し、DDRチャネル全体で利用可能な最大メモリ帯域幅を把握すべきだ。需要リクエストとプリフェッチソースのリクエストをFIFOシステムに従って指示する。
この設計により、FAMコントローラーは需要リクエストとプリフェッチリクエストの二つのクラスのリクエストを管理できる。どのようにこれらのリクエストがスケジュールされるかは、全体のパフォーマンスに影響を与える。
ブロックサイズのトレードオフ
ブロックサイズと遅延の関係を分析するために、いくつかの構成を調べた。DRAMキャッシュブロックサイズが64から512バイトに増加するにつれてIPCが比較的安定していることがわかったが、128バイトと256バイトでわずかな改善が見られた。ただし、512バイトを超えると遅延の増加によりIPCが減少した。
したがって、DRAMキャッシュブロックサイズの適切な選択は128、256、512バイトとする。CPUキャッシュブロックサイズ(64バイト)の倍数を使用することで、ファブリックでのデータパッケージングに関連する遅延を減少させながら、メタデータ管理に関連するオーバーヘッドも最小化できる。
プリフェッチの最適化
DRAMキャッシュプリフェッチャーを最適化することに焦点を当てて、需要とプリフェッチリクエストの相互作用を改善し、FAMアクセスの有効性を最大化することを目指している。提案された戦略には、メモリノードでのWeighted Fair Queueing(WFQ)の採用と、コンピュートノードでのプリフェッチ帯域幅の適応が含まれる。
Weighted Fair Queueing(WFQ)
WFQは、FAM内でプリフェッチリクエストよりも需要リクエストを優先する方法として適用される。需要リクエストにより高い帯域幅スライスを割り当てることで、混雑時のプリフェッチリクエストによる遅延を減少させる。
FAMコントローラーのベースライン実装は、需要リクエストとプリフェッチリクエストのための別々のキューを追加することで改善されている。これにより、各リクエストタイプが独立して発行されるようになる。プリフェッチャーはリクエストにタグを付け、コントローラーにそれぞれのキューに配置できるようにしている。
WFQスケジューラーを使用すると、両方のキューからのリクエストがその重みに従って処理される。各サイクルで需要リクエストが優先されるが、需要リクエストが利用できない場合にはプリフェッチリクエストも処理される可能性がある。
帯域幅の適応
従来のプリフェッチャーでは、各LLCミスに対して固定数のプリフェッチリクエストが生成される。FAMデバイスでの需要リクエストが大量に発生して混雑を引き起こしている場合、追加のプリフェッチリクエストを送信すると遅延が増加し、パフォーマンスが低下する可能性がある。そのため、プリフェッチリクエストのレートは、現在のシステム状態に基づいて調整する必要がある。
私たちのアプローチでは、需要リクエストの状態に関するデータを収集するためにカウンターを使用する。これらのリクエストの遅延を監視し、遅延が一定の閾値を超えた場合にはプリフェッチ発行レートを減少させる。時間が経つにつれて、パフォーマンスを最適化するためにプリフェッチレートを調整できる。
シミュレーションシステム構成
DRAMキャッシュプリフェッチャーと関連する最適化の効果を評価するために、さまざまなベンチマークワークロードでシミュレーションを行った。計算ノードとメモリデバイスの両方をシミュレートするツールを使用し、オペレーティングシステムがメモリを割り当てる方法を模倣した。
多様なメモリ集約型ワークロードのセットを評価し、実用シミュレーション速度のためにスケールダウンした構成を採用した。このセットアップにより、シングルノードとマルチノードシステムの両方を分析し、さまざまなワークロードミックスが帯域幅を競い合う様子を調べた。
パフォーマンス指標
異なる構成の結果を分析し比較するために、いくつかの指標を定義した。
- IPCゲイン: ワークロード構成のIPCの比率をベースラインワークロードと比較したもの。高い比率はより良いパフォーマンスを示す。
- 相対FAM遅延: 特定のワークロード構成における平均FAMアクセス遅延の比率をベースラインと比較したもの。低い比率はより良いパフォーマンスを示す。
- 発行された相対DRAMプリフェッチリクエスト: 与えられた構成に対するプリフェッチリクエストの比率を最適化なしで発行したリクエストと比較したもの。
- 需要ヒット率: LLCでミスするがDRAMキャッシュでヒットする需要リクエストの割合。
帯域幅適応によるパフォーマンス結果
私たちの分析では、さまざまなワークロードを複数ノードで実行し、適応プリフェッチ構成と従来のセットアップのパフォーマンスを比較した。結果は、DRAMキャッシュプリフェッチャーと帯域幅の適応を導入することで、特にマルチノード構成においてIPCが全般的に改善されたことを示した。
IPCのパフォーマンス向上
DRAMプリフェッチの導入により、コアプリフェッチングだけを使用する場合と比較して、すべてのベンチマークでパフォーマンスが改善された。特に適応プリフェッチメカニズムを追加することで、さらなるIPCの向上が見られた。たとえば、2ノードのセットアップではIPCゲインが約4%増加し、4ノードのセットアップでは8%増加した。
FAMアクセス遅延への影響
平均FAMアクセス遅延の全体的な削減が、これらのパフォーマンス改善に大きく寄与した。DRAMキャッシュプリフェッチングを使用することで、この遅延が2ノードと4ノードのセットアップでそれぞれ約29%と34%減少した。
WFQの効果を探る
私たちはまた、WFQスケジューリングアルゴリズムがパフォーマンスに与える影響も評価した。テスト結果は、WFQがさまざまなノード構成で単純なFIFOスケジューリングに対してIPCを改善することを示した。需要リクエストとプリフェッチリクエストに重みを割り当てることで、全体的なシステムスループットが改善され、FAMアクセス遅延が減少した。
異なるベンチマークワークロードでの結果
異なるベンチマークは、帯域幅適応とWFQの二つのアプローチによる調整に対してさまざまなレベルの感受性を示した。一部のワークロードはWFQから大きな恩恵を受けたが、他のワークロードはわずかな改善見られた。
マルチノードパフォーマンス分析
7つの異なるマルチノードワークロードミックスにおけるさまざまな構成の累積性能を調べたところ、両方の適応プリフェッチ戦略がIPCの向上に期待できることがわかった。ただし、特定のゲインはワークロードタイプやそれらの相互作用によって影響を受けた。
メモリ割り当て比率
さまざまなメモリ割り当て比率がパフォーマンスに与える影響を分析したところ、FAMリソースの使用が増えるにつれてコアプリフェッチの効果が減少することが明らかになった。しかし、適応アプローチはプールメモリ構成によって引き起こされるパフォーマンスのギャップを埋めるのに役立った。
結論
この記事では、ファブリック接続メモリからローカルDRAMに小さなデータブロックをキャッシュすることでアクセス遅延を減らすプリフェッチ戦略を紹介した。適応メカニズムの実装は、現代のコンピューティングシステム内のメモリ階層における有用性とパフォーマンスを最大化する。私たちの発見は、これらのアプローチの効果を示しており、ますます複雑なワークロードにおけるメモリ関連の課題を解決する可能性を強調している。全体的に、この記事で強調された適応プリフェッチとキュー管理技術は、共有メモリのコンテキストでシステムのパフォーマンスを改善するための貴重なソリューションを提供している。
タイトル: Exploring DRAM Cache Prefetching for Pooled Memory
概要: Hardware based memory pooling enabled by interconnect standards like CXL have been gaining popularity amongst cloud providers and system integrators. While pooling memory resources has cost benefits, it comes at a penalty of increased memory access latency. With yet another addition to the memory hierarchy, local DRAM can be potentially used as a block cache(DRAM Cache) for fabric attached memory(FAM) and data prefetching techniques can be used to hide the FAM access latency. This paper proposes a system for prefetching sub-page blocks from FAM into DRAM cache for improving the data access latency and application performance. We further optimize our DRAM cache prefetch mechanism through enhancements that mitigate the performance degradation due to bandwidth contention at FAM. We consider the potential for providing additional functionality at the CXL-memory node through weighted fair queuing of demand and prefetch requests. We compare such a memory-node level approach to adapting prefetch rate at the compute-node based on observed latencies. We evaluate the proposed system in single node and multi-node configurations with applications from SPEC, PARSEC, Splash and GAP benchmark suites. Our evaluation suggests DRAM cache prefetching result in 7% IPC improvement and both of proposed optimizations can further increment IPC by 7-10%.
著者: Chandrahas Tirumalasetty, Narasimha Annapreddy
最終更新: 2024-06-20 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2406.14778
ソースPDF: https://arxiv.org/pdf/2406.14778
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。