本文へ移動

CMM-DにおけるLinux NUMAの活用:メモリーティアリング

  • 共有
CMM-DにおけるLinux NUMAの活用:メモリーティアリング
CMM-DにおけるLinux NUMAの活用:メモリーティアリング
サムスン電子は12月、業界で初めてエンタープライズリナックス世界トップ企業であるレッドハット社と協業を行い、CMM-D(CXL* Memory Module-DRAM)メモリーの動作検証を完了 した。この動作検証は、従来のDRAMモジュールに限定されていたNUMA*(Non-Uniform Memory Access)構造のCMM-Dにおける活用が実現できた点で大きな意味がある。 サムスン電子とレッドハットは、サーバーユーザーがCMM-Dを手軽に活用できるよう、レッドハット社のホームページでRHEL(Red Hat Enterprise Linux)9 CXLの活用ガイドを提供 している。
• CXL(Compute Express Link): 高性能サーバシステムにおいてCPUとともに使われるアクセラレータ、DRAM、ストレージ装置などをより効率的に活用するための次世代インターフェース規格 • NUMA(Non-Uniform Memory Access): 各CPUごとにアクセスできるメモリー領域を区分し、ボトルネックを解決することでメモリーを効率的に管理する方法
本アーティクルでは、CMM-Dに拡張されたNUMA構造をサーバーで簡単かつ有用に使用できる機能の一つであるメモリーティアリングとその特性について詳しく紹介する。 メモリー階層構造 メモリー階層構造(Memory Hierarchy)とは、システムで使われる様々なタイプのメモリーを階層的に構成することを指す。 こうした階層構造は、速度、容量、頻度などに分けることができ、類似した特性のあるメモリーを使用することで、データの高速アクセスと効率的な管理を通じたシステム全体の性能向上を目指す。 メモリーの性能と容量に基づき、高速特性を持つキャッシュメモリー、メインメモリー、大容量の特性を持つメモリーエクスパンダーに分けることができる。それぞれのメモリーの特性は下図の通りである。
メモリー階層構造
メモリー階層構造
• メインメモリー : DRAMで構成されているシステムの主なメモリー。 保存容量は小さいが処理速度が速い。 CPUによるプロセスとデータを一時保存するスペース。 • メモリーエクスパンダー(CMM-D): CXLインターフェースを介して構成されるメモリーモジュール。 メインメモリーに比べて保存容量が大きいが処理速度が遅い。 メモリーティアリングによる効率改善を実現する。 • ストレージ: SSD、HDDなど、不揮発性ストレージ装置で構成されている。 容量はTBレベルで非常に大きいがメモリーに比べて速度が著しく遅く、極めて高い遅延時間を持つ。

メモリーティアリング CMM-Dがサーバーにインストールされると、Zero CPU NUMA(CPUのないNUMA)に認識され、DRAMモジュールと異なるNUMAノードとして認識され、CPUアクセス時間にずれが生じる。 この時発生するアクセス速度差を考慮し、メモリーを効率的に使用できるようにする技術がメモリーティアリングである。 メモリーティアリングは、カーネルレベルにおける機能を有効化したり、RAMディスク、HugePageを活用して機能を構成することができる。
メモリープロモーション、ディモーション メモリーティアリングの主な機能として、メモリープロモーションとメモリーディモーションがある。 メモリープロモーションは、メモリーへのアクセス頻度が高いホットデータを高速メモリーであるDRAMに配置する機能であり、メモリーディモーションは、アクセス頻度が少ないコールドデータを大容量のCMM-Dに配置する機能である。 このように配置されたデータを必要に応じてメモリー間でデータマイグレーションを行うことで、システムの運営効率を高めることができる。


メモリーティアリングの活用事例 以下は、CMM-Dを実際に用いたメモリーティアリングの活用方法である。 ■ メモリーティアリングの設定 dax device system-ram type構成のために、cxl、dax、numa関連パッケージをダウンロードする。dax装置リストを確認してみすると、CMM-Dをsystem-ram形式のノーマルタイプとして認識することが確認できる。
code image 1
code image 1
NUMA Demotion機能を活性化するために、numa_balancing Memory Tieringモードに設定する。 このオプションが有効化されると、CMM-Dにデータを保存することで、ローカルメモリー領域に発生する過度な負荷を防ぐことができる。
code image 2
code image 2
※ numa_balancing対応のオプションリスト 0 : NUMA_BALANCING_DISABLED 1 : NUMA_BALANCING_NORMAL 2 : NUMA_BALANCING_MEMORY_TIERING
■ メモリーティアリングの設定検証 NUMA Memory Tieringがきちんと設定されているかを検証するためには、Stressツールを活用することができる。 StressツールはEPEL Repositoryから提供されるため、先にEPELパッケージをダウンロードした上で、Stressパッケージをインストールする必要がある。 Stressベンチマークをインストールした後、スワップ使用のためにメモリー容量の70%超過負荷を行う。
code image 3
code image 3
CMM-Dの追加後、メモリーティアリングを設定せず、メモリーが過負荷状態になると、スワップメモリーが消費される。 しかし、メモリーティアリングが設定されている環境では、低速なスワップメモリーは消費されず、CMM-Dを通じてpgpromote_success、pgdemote_kswapd、pgmigrate_successなどが動作することを確認できる。
code image 4
code image 4
※ pgpromote_success: この値はページプロモーションを実行した回数を表す。 ページプロモーションは、高速データアクセスのためにメモリーのページをより高いレベルのキャッシュやメモリーなどに移動させるプロセスである。 ※ pgdemote_kswapd: この値はページディモーションを実行した回数を表す。 ページディモーションは、メモリーのページをより低いレベルのキャッシュやメモリーなどに移動させるプロセスである。 メモリースペースが足りない場合は、ページディモーションをしたり、スワップアウトを行ったりしてより多くの空きメモリーを確保する。