導入 コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加しています。仮想メモリ管理メカニズムを実装するために、オペレーティング システムはメモリ上でページング管理を実装します。メモリの「ページング メカニズム」が提案されて以来、メモリ ページのデフォルト サイズは 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のデータ保存場所を移動する方法
MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...
まとめプロジェクトの説明形式<img src="..."> H2+ ...
Dockerfile でのボリュームのマウントと docker -v コマンドによるマウントには明ら...
I. 概要HTML テンプレートを作成するときに、テキスト レイアウトの手段としてスペースが使用さ...
目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...
はじめに: 時間ポイントによる MySQL データベースの復旧どの企業にとっても、データは最も価値の...
nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...
この記事では、画像切り替え機能を実装するためのVue.jsの具体的なコードを参考までに共有します。具...
SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...
この記事の例では、フロントエンドのページング効果を実現するためのJSの具体的なコードを参考までに共有...
Centos システムの指定された場所に Nginx をインストールするにはどうすればいいですか?は...
Web ページには、非常に複雑な HTML 構造があります。CSS を使用して関連するスタイルを定義...
位置 / { インデックス index.jsp; proxy_next_upstream http...
序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...
目次0x0 はじめに0x1 インストール0x2 ノードサイドバー0x3 統合例0x0 はじめにプロジ...