...

ホスティングにおけるサーバーHugePagesとメモリの最適化

サーバーのHugePagesは、多くの4KBページを2MBや1GBといった大きな単位に束ねることで、ワーキングメモリーの管理労力を削減する。 TLBミス とカーネルのオーバーヘッドを削減します。データベース、JVM、キャッシュのあるホスティング環境では、このテクノロジーはレスポンスタイムを安定させ、スループットを向上させ、以下のCPUサイクルを節約する。 ワークロード.

中心点

  • 巨大ページ ページテーブルのエントリーを減らし TLBミス.
  • Linuxの設定 sysctl、/proc、および /シス.
  • ワークロード データベースやキャッシュなど 目立つ.
  • 仮想化 とNUMAアフィニティ・クリーン 投票.
  • モニタリング そしてステップ・バイ・ステップ チューニング ボトルネックを避ける。.

HugePagesは何をし、どのように動作するか

多くの小さなメモリー・ページを大きなページにまとめることで、その負荷を軽減している。 メモリー管理 カーネルのページが大きいと、アドレス変換のためのテーブル文字列が短くなり、アドレス変換が失敗する確率が低くなる。 TLBミス, これにより、特に高負荷時のレイテンシが短縮される。データベース、JVMサービス、インメモリ・キャッシュなど、大きなヒープやバッファ・プールを持つアプリケーションは、アクセスごとに必要な管理作業が少なくなるため、恩恵を受けることができます。その結果、応答時間がより安定し、コンテキスト・スイッチの回数が減り、生産的な負荷のピークに対してより余裕を持つことができる。私は特に、RAMフットプリントが2桁ギガバイトの範囲にあり、従来の4KBページが顕著なオーバーヘッドを発生させる場合に、この技術を使っている。.

hugepages linux: 設定の基本

Linuxでは、予約されたHugePagesの数とサイズは sysctl や/procや/sysにあるファイルと同様に、2MBや1GBページといったCPUの特徴に合わせている。カーネルは通常HugePagesを静的に確保するので、この部分を一般的なRAMから取り除き、他のプロセスの無秩序な成長を防ぐ。 システム 準備ができている。段階的なアプローチでボトルネックを防ぐ:消費量の分析、テスト環境の構成、メトリクスの測定、そして微調整。大きなヒープを持つワークロードの場合、バックグラウンドのデフラグによって引き起こされるレイテンシのピークを避けるために、自動モードではTransparent Huge Pagesを無効にし、専用のHugePagesを使用することが多い。私は、仮想メモリに関する背景知識を、以下のようなコンパクトな概念で統合している。 仮想メモリ管理, 生産的に服を着る前に。.

透明な巨大ページと専用の巨大ページ:ターゲット選択

私は透過型巨大ページ(THP)と専用巨大ページ(HugeTLB)を明確に区別している。THPは動的にラージページを形成し、便利で、混在するワークロードに対してしばしば「無料」の利点をもたらすが、カーネルがメモリをコンパクトにする必要がある場合、レイテンシのリスクを伴う。専用HugePagesは意図的に予約され、割り当てられる。最も安定したレイテンシを実現するが、計画と厳格なサイジングが必要である。.

  • THPのモード: 常に, マドヴァイズ, 決して. .待ち時間が重要なサービスには、通常 マドヴァイズ 或いは 決して.
  • デフラグ:THP-Defragはジッターを発生させる可能性がある。.
  • HugeTLB:固定プール、スワッピングなし、予測可能なレイテンシ。1GBページの予約と一部ブートパラメータが必要。.

これは快適さ(THP)と決定性(HugeTLB)を兼ね備えている:バックグラウンド・サービスは、多くの場合、THPと相性が良い。 マドヴァイズ-一方、大きなヒープ(DBバッファ、JVM)は意図的に専用のHugePagesで実行される。.

メモリ最適化サーバー:個別の微調整ではなく、全体的なアプローチ

HugePagesは強いように見えるが、私はそれらを全体的に分類している。 チューニング・コンセプト これには、カーネル・パラメーター、I/Oスケジューラー、スワッピネス、アプリケーション制限などが含まれる。JVMの場合は、ヒープ・サイズ、ガベージ・コレクター、HugePagesへのピン留めを調整し、PHPの場合は、クリアを設定する。 メモリ制限 と個別のFPMプールを提供する。データベースはHugePages上の専用バッファ・プールを取得し、Redisなどのキャッシュは十分なRAMとNUMAアウェアネスを取得する。仮想化スタックでは、バルーン制限とオーバーコミット戦略をチェックする。ハードウェア・レベルでは、十分なRAMチャンネル、拡張TLBを備えたCPUコア、そして適切な場合は1GBサポートを計画し、フルに活用するようにしている。.

実践的な設定レシピ

私は再現可能な方法でコンフィギュレーションを設定し、ロールアウトで自動化できるように手順を書き留めておく。代表的なコマンドとスイッチ

# THPのステータスとスロットルをチェックする
cat /sys/kernel/mm/transparent_hugepage/enabled
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

実行時に# 2-MB-HugePagesを確保する(十分な連続RAMが空いている場合)。
sysctl -w vm.nr_hugepages=32768
#またはNUMA固有
echo 16384 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 16384 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

# 1-GB-HugePages は通常、ブートパラメータ経由です。
カーネル cmdline の # を使う:
# default_hugepagesz=1G hugepagesz=1G hugepages=64

# は hugetlbfs を提供します。
mkdir -p /dev/hugepages
mount -t hugetlbfs nodev /dev/hugepages

# 大きなページをロックするための制限(データベース/JVM用など)
# /etc/security/limits.d/hugepages.conf
#  ソフト memlock 無制限
#  ハード memlock 無制限

systemdサービスについては、さらに LimitMEMLOCK=infinity 必要に応じて許可する. CAP_IPC_LOCK, HugePagesのプロセスが確実に文書化できるように。私は vm.swappiness が保守的であれば、キャッシュの圧力が手に負えなくなることはなく、スラブの増加も制限内に収まる。実行時の割り当てが断片化によって失敗することが多いので、私は1GBページのブート時の予約を計画している。.

典型的なウェブホスティングワークロードにおけるHugePages

ウェブサーバー、アプリケーションサーバー、データベース、キャッシュはそれぞれ異なる挙動を示す。 ベネフィット サービスあたり。大きなバッファプールとSGAのような構造を持つデータベースは、ページテーブルエントリと TLBミス CPUを直接節約できる。安定した大きなヒープを持つJVMサービスでは、ヒープをHugePagesに固定することで、 よりスムーズなレイテンシ曲線が得られることが多い。PHP-FPMは主に、システム内のオーバーヘッドを減らし、OSレベルでクリーンなキャッシュを行うことで、間接的に恩恵を受ける。RedisとMemcachedについては、一貫したサイズ、明確なNUMAアロケーション、安全なリザーブを計画し、断片化によって大きなページができないようにする。.

DB、JVM、キャッシュのワークロード固有の微妙な違い

  • データベース:PostgreSQLの場合は、以下のものを使用しています。 huge_pages=on 或いは 試す 寸法 shared_buffers HugePageの予約と一致します。私はMySQL/MariaDBと適切なラージページスイッチを使用しています。 メモロック; 大きなページが使われていることをログで確認する。予約が無駄にならないように、オラクル的なSGAを厳密に事前計算している。.
  • JVM:ラージページを有効にして、ヒープ(Xms/Xmx)を固定値に設定し、アロケータが頻繁なサイズ変更を引き起こさないようにする。GCモード(例えばG1)は、安定したヒープから利益を得ることができる。 マドヴァイズ または専用のHugePagesの方がうまくいく。.
  • キャッシュ:Redisのメモリバジェットをクリアにし、積極的なTHPのデフラグを解除する。MemcachedをNUMA-locallyにバインドし、静的なウェブ資産が移動しないように、ページキャッシュに十分なスペースを残しています。.

私は、サービスが起動時に実際に大きなページをマッピングしていることを確認している:これは、予約を増やす前にプロセスマップとカーネルカウンターで確認できる。.

仮想化、コンテナ、ターゲット仮想化チューニング

VM環境では、HugePagesを ホスト を作成し、オーバーヘッドが重複しないようにゲストに渡します。KVM、VMware、Hyper-Vは、ラージページを利用するためのメカニズムを提供します。 CPU とRAMを使用する。アグレッシブな戦略は大きなページを断片化し、その結果優位性が低下するため、バルーニングとオーバーコミットは慎重に使用する。コンテナについては、クリティカルなプロセスが他のグループのページ変更に影響されないように、厳格なメモリ制限とリクエストを設定している。さらに詳しく見ると メモリのオーバーコミットメント 密度とパフォーマンスのバランスを保つのに役立っている。.

仮想化の詳細:EPT/NPT、ライブマイグレーション、密度

EPT/NPTでは、大きなホストページもゲストに利益をもたらします。EPT/NPTでは、大きなホスト・ページもゲストに利益をもたらします。ゲスト・ページが2 MBで、ホストが4 KBしかマッピングしない場合(断片化などによる)、その効果は失われます。そのため、私はホスト上に十分に大きなページを確保し、VMの一貫したNUMA配置を保証しています。.

  • ライブマイグレーション:移行元ホストと移行先ホストでHugePageのサイズや可用性が異なると、移行が遅くなったり、失敗したりすることがある。私は事前にプロファイルを調和させ、プールをチェックします。.
  • バルーン/オーバーコミット:積極的なバルーンを制限している。レイテンシが重要なVMについては、保守的に計画し、メモリを分離します。.
  • コンテナ:cgroups v2を使って、グループごとにHugetlbバジェットをコントロールし、予期せぬプロセスが大きなページをブロックするのを防いでいる。明確なリクエスト/リミットは、密度と予測可能性を安定させる。.

NUMA、TLB、ページテーブル:レバーを理解する

私は、メモリ集中型のプロセスをNUMAを意識して配置し、スレッドができるだけローカルになるようにしている。 RAM また、クロスソケットレイテンシもない。大きなページはページテーブルのレベル数を減らし、TLBのヒット率を高め、クロスソケットレイテンシを最小にする。 アクセス時間 シンクする。マルチソケットホストでは、サービスを適切なNUMAノードにピン留めし、必要なHugePagesをそこで予約することで、断片化とスワッピングを回避している。この結合により、レイテンシのジッターが減少し、データベースやL7プロキシで顕著な違いが出る。私は、予約を保守的に計画し、定期的に効果を測定し、ワークロードが確実に巨大ページを使用する場合にのみ予約を増やします。.

サイズの選択とサイジング:4KBから1GBまで

適切なページサイズは ワークロード, ページ数は、ヒープサイズ、ヒープ形状、ハードウェアサポートに依存する:2MBページは多くのシナリオをカバーし、1GBページは非常に大きく、大部分が静的なヒープに価値がある。ヒープまたはバッファプールのサイズを決定し、安全マージンを追加し、必要なHugePagesの数を決定し、それらを予約します。その後、システムにページキャッシュと補助サービスのための十分なスペースがまだあるかどうかをチェックし、メモリボトルネックがないようにする。予約が厳しすぎることがわかったら、少しずつ増やしていき、レイテンシと利用率を監視します。このようにして、オーバーヘッドを低く保ち、大きなヒープに信頼できる大きなアドレス空間を与えている。.

メモリ領域 ページサイズ 必要なページ 相対的管理
64GBヒープ 4 KB 16.777.216 高い
64GBヒープ 2 MB 32.768 ミディアム
64GBヒープ 1 GB 64 ロー
128 GBバッファプール 2 MB 65.536 ミディアム
128 GBバッファプール 1 GB 128 ロー

モニタリングとトラブルシューティング:信頼性の高い測定

私は/proc/meminfoのカウンターをチェックしている。 巨大ページ, 空きページと占有ページを監視し、割り当てミスを探す。perf、ebpfベースのツール、またはvmstatを使って、メモリイベント、TLBヒット率、コンテキストスイッチを記録し、ボトルネックを可視化する。待ち時間の急増については、ページキャッシュの印刷、スワッピング、スラブの増加を調べます。ウェブサーバーホストについては ページキャッシュ排出-アセットとPHPのオペコードキャッシュがRAMに残るようにする。フラグメンテーションが発生した場合は、メンテナンス・ウィンドウで再起動を計画し、予約を調整し、NUMAピニングを再チェックする。.

運転中のエラーパターンの認識と検証

最適でないコンフィギュレーションの典型的な兆候は、高いコンテキスト・スイッチング、増加するTLBミス・レート、一定のトラフィックで変動するレイテンシーである。プロセスごとのラージページの実際の使用率を検証する:

# システム全体の表示
grep -E 'HugePages|AnonHugePages' /proc/meminfo

# プロセスごとに区別する: THP vs. HugeTLB
grep -E 'AnonHugePages|HugeTLB' /proc//smaps | awk '{s+=$2} END {print s " kB"}'.

# TLBイベントの一覧
perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses -- pid .

予約しているにもかかわらず、大きなページが使われていない場合、私は次のようにチェックする。 メモロック-制限、能力、アプリケーション開始パラメータ、NUMA配置。1GBページでは、エラーメッセージはしばしばメモリが十分に連続していないことを示しています。.

安全面と運営面:クリーンな規制

でHugePagesの設定をわかりやすく書いています。 ドキュメンテーション とバージョン管理により、変更が監査可能な状態に保たれている。危険な介入を防ぐために、sysctlと関連する/sysパスへのアクセス権を、権限を与えられた管理者に制限しています。クリティカルなデータベースヒープについては、ピーク負荷時にメモリ圧迫やクラッシュを引き起こす可能性のある安全でないオーバーコミット設定を防止している。ロールバックプランと反復可能なプレイブックは、ホストがサプライズなしに一貫して動作するようにアップデートを保護します。メンテナンスウィンドウの前にバックアップとチェックを行うことで、チューニング後にサービスの再起動や再割り当てが必要になった場合のデータ損失を防ぎます。.

コンプライアンスと業務統合

コアダンプ、クラッシュカーネル、監査証跡などの運用上の要件を考慮している。HugeTLBページはスワップ可能ではなく、しばしばブロックされる。これにより、クラッシュやコアダンプのサイズや記録時間が変化する。私はログとダンプのために十分なスペースを計画し、コールドスタート後の再起動をテストし、NUMAローカリティが有効になるようにBIOS/UEFIスイッチ(ノードインターリーブオフなど)を調和させる。規制の厳しい環境では、どのサービスがHugePagesを使用するのか、その正当性、測定値、フォールバックパスなどを文書化する。.

WordPressとCMSのホスティングを加速させます。

CMSスタックの構成 ウェブサーバー, PHP-FPM、データベース、キャッシュの各レベルで、一番大きなメモリアイランドを最初に最適化することで、ここでの利点を生み出している。データベース・バッファ・プールは専用のHugePages上で実行され、CPU負荷を軽減し、クエリをスムーズに実行できる。RedisやMemcachedは、十分なラージページを確保し、プロセスをCPUコアや適切なNUMAノードに密接にバインドすれば、恩恵を受けることができる。PHP-FPMには明確なワーカー制限と適切なオペコードキャッシュが与えられており、カーネルがメモリのブックキーピングを行うことは少なくなっています。webhoster.deが提供するような高性能なサーバーでは、このセットアップで多くの同時アクセスがあるピーク時にも対応できます。.

HugePagesでホスティングするためのプロバイダの選択とコストの考慮事項

私は現代に注目している CPU世代 広いTLB、十分なRAM、そして大きなヒープが必要な場合の1GBページのサポート。優れたホスティング・プロバイダーは、カスタマイズされたカーネル・パラメータ、NUMAチューニング、予約されたHugePagesを提供し、要求の厳しいプロジェクトが目標を達成できるよう支援します。VMからマネージドサーバーまで、柔軟な料金体系が不必要なリスクなしに段階的な移行を促進します。高密度を計画する場合は、オーバーコミットの明確なルール、信頼性の高い遠隔測定、インシデント発生時の迅速な応答時間が必要です。最終的に重要なのは、ユーロでの価格、パフォーマンス、微調整の自由度がお客様のロードマップと合致していることです。 ワークロード フィットしている。

実践ガイドステップ・バイ・ステップで最適な設定を

私はまず、実際のレコーディングから始める。 負荷プロファイル そして、最大のメモリフットプリントを持つプロセスを分離する。その後、HugePagesのテストセットを定義し、レイテンシ、CPU時間、欠損ページの測定を有効にして、ベースラインとチューニング状況を比較する。巨大ページが確実に機能するのであれば、メトリクスが有意な利益を示さなくなるまで、慎重に予約を増やす。同時に、ウェブ・コンテンツ用のページ・キャッシュ・バッファを確保し、バックグラウンド・サービスが十分な容量を保持しているかどうかをチェックする。最後に、決定事項を文書化する。 カーネル またはハードウェアは再現可能なままである。.

自動化とロールアウト戦略

私はHugePagesを段階的に展開している:最初にパイロットグループ、次にGuardrailsを使った大々的なロールアウトだ。Playbookはsysctl値、書き込み制限、hugetlbfsのマウントを設定し、リブート後に期待されるカウンターをチェックする。ヘルスチェックは、ターゲットプロセスが本当にラージページをマッピングしているかどうかを検証する。変更ウィンドウでは、予約が確実にアクティブになるように、1GBページのリブートをスケジュールしている。遠隔測定ダッシュボードには、TLBのミス率、コンテキストスイッチ、レイテンシパーセンタイル、NUMAノード別の利用率が表示されます。このようにして、リスクを最小限に抑え、効果が恒久的に測定可能なところだけをスケールするようにしている。.

簡単な要約:HugePagesのターゲット使用

サーバーHugePagesは、管理労力を削減し、削減 TLBミス 特に大きなヒープやバッファプールを使用する場合、レイテンシを安定させることができる。私は、OSのクリーンなチューニング、NUMAの認識、慎重なオーバーコミットと組み合わせることで、日常的な使用で効果を発揮するようにしています。仮想化環境は、ホストの割り当て、パススルー、および制限が一致したときに勝利します。CMS、DB、キャッシュの負荷には、測定ポイントと保守的な増加による構造的なアプローチが有効です。その結果、高速で信頼性が高く、コスト効率の高いホスティングプラットフォームが実現し、リソースを賢く利用することができます。 パフォーマンス それを利用できるようにする。.

現在の記事

メモリ最適化のためにワーキングメモリを集中させたデータセンターのサーバー
サーバーと仮想マシン

ホスティングにおけるサーバーHugePagesとメモリの最適化

Server HugePagesがホスティングにおける効率的なメモリ最適化をどのように実現するのか、またServer HugePagesをキーワードにLinuxで最大のパフォーマンスを実現する方法をご紹介します。.