導入 コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加しています。仮想メモリ管理メカニズムを実装するために、オペレーティング システムはメモリ上でページング管理を実装します。メモリの「ページング メカニズム」が提案されて以来、メモリ ページのデフォルト サイズは 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のデータ保存場所を移動する方法
組合執行分析を簡単にするために、次のSQLを例として使用します。 テーブル t1 を作成します ( ...
Alibaba Cloud セキュリティグループの概要Alibaba Cloud Server セ...
序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...
目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...
システムとユーザー環境の設計<br />Apple システムの成功は、そのシステム アー...
目次解決策1: レプリカを再構築する前提条件アドバンテージ欠点手順マスター奴隷解決策2: データ修復...
1. yumの紹介Yum (フルネームは Yellow dogUpdater、Modified) は...
目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...
イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...
この記事では、Vue.jsの具体的なコードを共有して、シンプルな折りたたみパネルを実装する例を紹介し...
1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...
すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...
1. ツールディレクトリのファイル構造 [root@www tools]# ツリーツール/ ツール/...
1. muttをインストールするsudo apt-get install mutt 2. msmtp...
最近、実践的なトレーニング プロジェクトを実行する際に ssm フレームワークを使用しました。プロジ...