すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:巨大なページ

最終更新日:Jul 05, 2024

メモリは、ページと呼ばれるブロックで割り当てられ、管理されます。 巨大なページは、サイズが4 KBを超えるメモリのブロックです。 透過的巨大ページ (THP) 機能の拡張と最適化として、巨大ページ機能を使用すると、アプリケーションとダイナミックリンクライブラリ (DLL) の実行可能部分を、通常2 MB以上のサイズの巨大ページに割り当てることができます。 このようにして、巨大ページ機能は、アプリケーションの命令変換索引バッファ (iTLB) ミスを大幅に削減し、CPUの2MBのiTLB利用率を向上させます。 巨大なページは、メモリの断片化やメモリの肥大化などの問題を防ぎ、メモリ使用量を改善するのに役立ちます。 巨大なページは、データベースや大規模なアプリケーションなど、大規模なコードセグメントを含むシナリオに最適です。 このトピックでは、巨大ページの使用方法と巨大ページのパフォーマンス上の利点について説明します。

説明

巨大ページがアプリケーションパフォーマンスの向上に役立つ範囲は、プラットフォームとアプリケーションの実行方法によって異なります。

巨大なページに関連する一般的な用語については、「付録: 用語集」をご参照ください。

制限事項

次のカーネルバージョンを含むAlibaba Cloud Linuxイメージは、巨大ページをサポートしています。

  • Alibaba Cloud Linux 2: カーネル4.19.91-25以降

  • Alibaba Cloud Linux 3: カーネル5.10.112-11以降

説明

uname -rコマンドを実行して、イメージに含まれるカーネルのバージョンを確認できます。

使用状況

巨大ページ機能を有効にする

デフォルトでは、巨大ページ機能は無効になっています。 sysfsインターフェイスを使用して機能を有効にできます。 次のいずれかの方法を使用して、巨大ページ機能を有効にできます。

  • 方法1: バイナリページと動的ライブラリページを有効にします。

    sudo sh -c 'echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled '
  • 方法2: 匿名実行可能ページを有効にします。

    sudo sh -c 'echo 2 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled '
  • 方法3: バイナリページ、動的ライブラリページ、および匿名実行可能ページを有効にします。

    sudo sh -c 'echo 3 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled '
説明

巨大ページ機能は非同期です。 メモリページは、機能が有効になった直後に巨大なページにマージされません。

巨大ページ機能が有効になっているかどうかを確認する

次のコマンドを実行して、/proc/<pid>/smapsFilePmdMappedフィールドを確認し、巨大ページ機能が有効になっているかどうかを確認します。 FilePmdMappedフィールドは、プロセスによって使用される巨大なページのサイズを指定します。 (単位:KB)

sudo cat /proc/<pid>/smaps | grep FilePmdMapped | awk '{sum +=$2}END{print "Sum= ",sum}'
説明

<pid> を実際のプロセスIDに置き換えます。 pidof sshdコマンドを実行して、プロセスIDを照会できます。

巨大なページ機能を無効にする

次のコマンドを実行して、sysfsインターフェイスを使用して巨大ページ機能を無効にします。

sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled '
説明
  • 巨大ページ機能は非同期です。 機能が無効になった直後に巨大なページは分割されません。

  • コードセグメントが巨大なページにマージされた場合、巨大なページ機能が無効になった後も、巨大なページキャッシュは残ります。

hugetextパラメーターを0、1、2、または3に設定して、システムブートオプションの巨大ページ機能のステータスを設定できます。 GRand Unified Bootloader (GRUB) のバージョンとイメージに基づいて、システム起動オプションを構成します。

巨大ページ機能を無効にすると、次のいずれかの方法を使用して、使用済みの巨大ページをクリアできます。

  • 方法1: システム全体のページキャッシュをクリアします。

    sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches '
  • 方法2: ファイル固有のページキャッシュをクリアする。

    sudo vmtouch -e /<path>/target
    説明
    • Virtual Memory Toucher (vmtouch) は、ファイルがメモリにロードされているかどうか、メモリ内のファイルをロックするか、メモリからファイルをアンロードするかどうかを確認するために使用されるツールです。 vmtouchがインストールされていない場合は、sudo yum install vmtouchコマンドを実行してvmtouchをインストールします。

    • <path> をアプリケーションファイルの実際のディレクトリに置き換えます。

  • 方法3: 残りの巨大なページをクリアします。

    sudo sh -c 'echo 1 > /sys/kernel/debug/split_huge_pages '

パフォーマンス上のメリット

巨大ページによって提供されるパフォーマンスの利点は、異なるプラットフォーム上のTranslation Lookaside Buffer (TLB) モジュールによって異なります。 巨大なページは、データベース (MySQLやPostgreSQLデータベースなど) やJavaアプリケーションなどのシナリオに適しています。 巨大なページは、物理マシン上の8% に5% することでアプリケーションのパフォーマンスを向上させ、仮想マシン上のアプリケーションのパフォーマンスを向上させます。 次の例では、MySQLを使用して、巨大ページがArmプラットフォームにもたらすパフォーマンス上の利点を説明します。

説明

コードセグメントが巨大なページにマージされた場合、巨大なページ機能が無効になった後でも、巨大なページキャッシュは残ります。 パフォーマンステストを実行するときは、echo 3 > /proc/sys/vm/drop_cachesコマンドを実行してシステム全体のページキャッシュをクリアし、正確なテスト結果を得ることを推奨します。

テストインスタンスに32のvCPUがあり、インスタンスに対して1、8、16、32の同時MySQL接続が確立され、8、16、32のMySQL接続がCPU使用率を25% 、50% 、100% にプッシュすると仮定します。 次の図は、2MBの巨大ページと4KBの標準ページの1秒あたりのトランザクション (TPS) の比較を示しています。TPS数据

上の図に示すように、巨大なページは常に標準ページよりも優れています。

  • MySQL接続が1つだけ確立された場合、外部要因の影響はわずかであり、巨大なページは標準ページよりも約6.9% パフォーマンスが優れています。

  • 8または16の同時MySQL接続が確立されると、CPUの競合が解消され、巨大なページが標準ページよりも6.5% を超えてパフォーマンスが向上します。

  • 32の同時MySQL接続が確立されると、他のアプリケーションがCPUリソースを求めて競合する可能性があり、TPSレートは前述のテストシナリオで取得されたものよりも低くなります。 巨大なページは標準ページよりも安定しており、標準ページを約11% 上回っています。

iTLB数据上の図は、巨大ページと4KBページのiTLBデータを示しています。 左側の図はiTLBミス率を示し、右側の図は千命令当たりのiTLBミス数 (MPKI) を示す。 MySQLが巨大なページを使用すると、次の状況が発生します。

  • iTLBミスの数は約10倍に減少し、iTLBミス率は約0.09% から約0.08% に減少する。

  • iTLB MPKIレートは約6倍減少する。

PostgreSQLは、巨大なページを使用してパフォーマンスを7% 向上させることもできます。

間隔

パディングは、巨大ページ機能の最適化です。 パディングは、次の問題を解決するために使用されます。アプリケーションのロード後にコードセグメントによっては巨大なページを使用しないため、最適な効果が得られません。 これらのコードセグメントはホットスポットである。 たとえば、バイナリファイルの末尾のテキストセグメントのサイズが2 MBより小さく、テキストセグメントのサイズがhugetext_pad_thresholdパラメーターの値を超えているために巨大なページを使用できない場合は、テキストセグメントを2 MBにパディングして巨大なページを使用できるようにします。

  • パディングの有効化

    次のコマンドを実行して、sysfsインターフェイスを使用してパディングを有効にします。

    sudo sh -c 'echo [0 ~ 2097151] > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold '
    説明

    sudo sh -c 'echo 4096 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold 'コマンドでhugetext_pad_thresholdを4096に設定することを推奨します。

    ほとんどの場合、アプリケーションコードセグメントは2MBに対応したアドレスにマッピングされ、巨大ページ機能はアドレス対応の最適化に役立ちます。 しかしながら、rw − pまたはr_pに続く内容は、2MB整列されないことがある。 その結果、コンテンツはhugetext_pad_thresholdの値に基づいて期待どおりにパディングされず、一部のコードセグメントは4KBページを使用します。 パディング機能を使用する場合は、コードセグメントとデータセグメントを2MB整列することを推奨します。 2MBのコードまたはデータセグメントを整列するには、デフォルトのIDSファイルを変更し、を追加します。 =ALIGN(0x200000); コードまたはデータセグメントの前の

  • パディングを無効にする

    次のコマンドを実行して、sysfsインターフェイスを使用してパディングを無効にします。

    sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold '

付録: 用語集

次の表に、巨大ページ機能で一般的に使用される用語を示します。

期間

説明

巨大なページ

巨大ページは巨大ページメモリとも呼ばれます。 メモリは、ページと呼ばれるブロックで管理および割り当てられます。 巨大ページは、サイズが4 KBを超えるメモリページであり、ハードウェアのTLB利用率とパフォーマンスの向上に役立ちます。

透明な巨大なページ

透明な巨大ページ (THP) は、プロセスから巨大なページを使用する複雑さを隠します。 THPはバックグラウンドでカーネルスレッドを起動し、各プロセスの仮想メモリ領域 (VMA) を非同期にスキャンし、VMAを2MBページに統合します。

巨大なページ

THPと同様に機能し、コードのみを巨大なページに統合してパフォーマンスを大幅に向上させる機能。

iTLBミス

iTLBミスは、一致するエントリがiTLBに見つからない場合に発生する。 iTLBミス率が高い場合、CPUは効率的に実行できません。

iTLB使用率

iTLBの使用率。 システムパフォーマンスは、iTLB使用率とともに向上します。

iTLB MPKI

千命令あたりのiTLBミスの数 (MPKI) 。 より低いiTLB MPKIレートは、より高いシステム性能を示す。

関連ドキュメント

Alibaba Cloud Linuxは、THPを使用してメモリアクセス効率を向上させることもできます。 THPは、小さなページ (典型的には4KBのページ) を巨大なページ (典型的にはサイズが2 MB以上のページ) に統合して、ページテーブルエントリ (PTE) の数およびメモリアクセスの数を減らすことができる。 このようにして、TLBキャッシュへの圧力が低減され、アプリケーション性能が改善される。 詳細については、「」をご参照ください。THPを使用してAlibaba Cloud Linuxのパフォーマンスを調整する方法を教えてください。