導入 コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加しています。仮想メモリ管理メカニズムを実装するために、オペレーティング システムはメモリ上でページング管理を実装します。メモリの「ページング メカニズム」が提案されて以来、メモリ ページのデフォルト サイズは 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 でよく使用される表示コマンド1. 現在のデータベース サーバー内のデータベースの一覧を表...
RocketMQ イメージを検索するには、Docker の hub.docker.com で検索する...
1. Nginxの同時実行性を最適化する [root@proxy ~]# ab -n 2000 -c...
1. TEXTとBLOBの違いTEXT ファミリと BLOB ファミリの唯一の違いは、BLOB 型は...
目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...
目次まず、双方向バインディングを実装するアイデアについて説明します。これらの機能を実装するための j...
目次序文1. Dockerをインストールする2. Dapr CLIをインストールする3. Net6 ...
現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...
JSON データを美しいインデント形式で表示するには、最も単純な JSON.stringify 関...
1. はじめにMySQL グループ レプリケーション (略して MGR) は文字通り MySQL グ...
目次序文1. スケーラビリティとは何ですか?スケールアウトの利点:スケールアウトのデメリット:スケー...
CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...
HTMLはヘッドとボディの2つの部分で構成されています** ヘッド内のタグはヘッドタグです** タイ...
クラウドサーバーを使用するとデータベースに接続できる場合もありますが、Navicat Premium...
以下のように表示されます。 bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/...