導入 コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加しています。仮想メモリ管理メカニズムを実装するために、オペレーティング システムはメモリ上でページング管理を実装します。メモリの「ページング メカニズム」が提案されて以来、メモリ ページのデフォルト サイズは 4096 バイト (4 KB) に設定されています。メモリ ページ サイズは原則として構成可能ですが、ほとんどのオペレーティング システムの実装では、デフォルトの 4 KB ページが依然として使用されています。 「ページング機構」が提案された当時は、メモリサイズが数十メガバイトしかなかったため、4KB ページは妥当でした。しかし、物理メモリ容量が数 GB、さらには数十 GB にまで増大した現在でも、オペレーティングシステムは依然として 4KB をページの基本単位として使用しています。これはまだ妥当なのでしょうか? Linux オペレーティング システムで大量のメモリを必要とするアプリケーションを実行する場合、使用されるデフォルトのページ サイズは 4 KB であるため、TLB ミスとページ フォールトがさらに発生し、アプリケーションのパフォーマンスに大きな影響を与えます。オペレーティング システムが 2MB 以上のページング ユニットを使用すると、TLB ミスとページ フォールトの数は大幅に減少し、アプリケーションのパフォーマンスが大幅に向上します。これは、Linux カーネルがラージ ページのサポートを導入した直接的な理由でもあります。利点は明らかです。アプリケーションが 2MB のメモリを必要とするとします。オペレーティング システムがページングの単位として 4KB を使用する場合、512 ページが必要となり、TLB に 512 エントリが必要になります。同時に、512 のページ テーブル エントリも必要になります。オペレーティング システムは、2MB のアプリケーション空間全体を物理メモリにマッピングするために、少なくとも 512 の TLB ミスと 512 のページ フォールトを経験する必要があります。ただし、オペレーティング システムがページングの基本単位として 2MB を使用する場合、2MB のアプリケーション空間の仮想から実へのマッピングを確立するために必要なのは 1 つの TLB ミスと 1 つのページ フォールトのみであり、操作中に TLB ミスとページ フォールトの割り込みは必要ありません (TLB エントリの置き換えとスワップが発生しないと仮定)。 最低コストで大規模ページのサポートを実現するために、Linux オペレーティング システムでは、hugetlbfs 特殊ファイル システムに基づく 2M バイトの大規模ページのサポートを使用します。特別なファイル システムの形式で大きなページをサポートするこの方法により、アプリケーションは 2 MB の大きなページの使用を強制されることなく、必要に応じて仮想メモリ ページ サイズを柔軟に選択できます。 Linux で Redis を起動すると、通常は 透明な大きなページについては、公式の紹介を見てみましょう
透過的な巨大ページが有効になっているかどうかを確認する 1: コマンド cat /sys/kernel/mm/redhat_transparent_hugepage/enabled このコマンドはRed Hat Enterprise Linuxシステムに適用可能です [root@getlnx06 ~]# /etc/issue の詳細 Red Hat Enterprise Linux Server リリース 6.6 (サンティアゴ) カーネル \r と \m [root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled [常に]決して勧めない 2: コマンド cat /sys/kernel/mm/transparent_hugepage/enabled このコマンドは他のLinuxシステムにも適用できます [root@getlnx06 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled いつもアドバイスする[決して] [root@getlnx06 ~]# コマンドを使用して表示すると、出力結果が [always] の場合、透過的巨大ページが有効になっていることを意味します。 [never]は透過的な巨大ページが無効であることを意味し、[madvise]は 3: HugePages_Total が 0 を返す場合、透過的な巨大ページが無効になっていることを意味します。 [root@getlnx06 ~]# grep -i HugePages_Total /proc/meminfo 巨大なページの合計: 0 4: cat /proc/sys/vm/nr_hugepages は 0 を返します。これも透過的な巨大ページが無効になっていることを意味します。 [root@getlnx06 ~]# cat /proc/sys/vm/nr_hugepages 0 透過的な巨大ページ機能を無効または有効にする 方法 1: システムの起動時に無効になるように /etc/grub.conf ファイルを設定します。 [root@getlnx06 ~]# vi /etc/grub.conf # anaconda によって生成された grub.conf # # このファイルを変更した後、grubを再実行する必要はありません。 # 注意: /boot パーティションがあります。これは、 # すべてのカーネルおよび initrd パスは /boot/ からの相対パスです。例: # ルート (hd0,0) # カーネル /vmlinuz-version ro ルート=/dev/mapper/VolGroup--LogVol0-LogVol01 # initrd /initrd-[generic-]バージョン.img #boot=/dev/sda デフォルト=0 タイムアウト=5 スプラッシュイメージ=(hd0,0)/grub/splash.xpm.gz 隠しメニュー タイトル Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64) ルート (hd0,0) カーネル /vmlinuz-2.6.32-504.el6.x86_64 ro ルート=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-504.el6.x86_64.img 透明な巨大ページ=決して 方法2: /etc/rc.localファイルを設定する [root@getlnx06 ~]# vi /etc/rc.local #!/bin/sh # # このスクリプトは、他のすべての init スクリプトの *後に* 実行されます。 # ここに独自の初期化用コードを入れることもできます # 完全な Sys V スタイルの init 処理を実行したい。 /var/lock/subsys/local をタッチする テスト -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; の場合 エコーなし > /sys/kernel/mm/redhat_transparent_hugepage/enabled フィ 上記の設定を使用した後、設定を有効にするにはオペレーティング システムを再起動する必要があります。オペレーティング システムを再起動せずに次のコマンドを実行することもできます。 [root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled [root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled いつもアドバイスする[決して] [root@getlnx06 ~]# ヒント: 1: RedHat 6、OEL 6、SLES 11、UEK2 カーネル以降では、Transparent HugePages がデフォルトで有効になっています。これは、メモリ管理のパフォーマンスを向上させるために使用されます。Transparent HugePages は、以前のバージョンの huge Page に似ています。主な違いは、Transparent HugePages はリアルタイムで構成でき、構成を有効にするために再起動する必要がないことです。 2: Transparent Huge Pages は 32 ビット RHEL 6 ではサポートされていません。 3: ORACLE は、RedHat 6、OEL 6、SLES 11、UEK2 カーネルを使用する場合に Transparent HugePages を有効にすることを公式には推奨していません。これは、Transparent HugePages にいくつかの問題があるためです。
要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Centos7でmysql5.7.19のデータ保存場所を移動する方法
目次不変の値とは何ですか?不変の値を使用するのはなぜですか? Reactのパフォーマンス最適化は不変...
1. インターネットで長時間検索しましたが、判定表が存在するかどうかがわからなかったので、漠然と削除...
序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...
1. リストシンボルを設定するlist-style-type: attribute; //リストの...
v-model を使用してページング情報オブジェクトをバインドします。ページング情報オブジェクトに...
前提複雑なシナリオでは、複数の異なるページ間で大量のデータを使用したり変更したりする必要があります。...
CSS を使ってさまざまなグラフィックを実現できるのは素晴らしいことです。画像を切り取る必要はなく、...
この記事では、参考までに、JSでスネークゲームを書くための具体的なコードを紹介します。具体的な内容は...
序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...
MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...
コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...
1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...
この記事は主に、Nginx 7 層負荷分散のいくつかのスケジューリング アルゴリズムを紹介します。こ...
目次概要マップされた型を使用して Object.freeze() を構築するマッピングタイプの構文は...
序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...