HugePageとは?
HugePageとは、OSが扱うメモリサイズをより大きなサイズとして扱うことによりパフォーマンス向上を狙う技術です。
x86-64 系のOSでは、通常 4K byte単位でメモリを扱います。近年のメモリの単価下落と大容量化により、数百G Byteのメモリを搭載しているマシンも珍しくありません。
このような状況で伝統的な 4K byte 単位でメモリを扱うことでパフォーマンス上の利点が得られなくなってきているという背景があります。
・物理メモリと仮想メモリの管理テーブルの肥大化によるメモリ自体へのオーバーヘッドの増加
・TLBテーブル(物理メモリと仮想メモリのマッピング情報を保持しているキャッシュテーブル)のキャッシュヒット率の低下
このような背景があり、近年 HugePage と呼ばれる技術が登場しました。
これは、4K byte単位のメモリページを、2M byte や 1G byte といったより大きなサイズとして扱う技術です。これにより様々なパフォーマンス上の利点が得られます。
・TLBのキャッシュヒット率の向上
・HugePageはページアウトの対象とならないためメモリがSwapされることによるパフォーマンス低下を防げる
・物理メモリと仮想メモリの管理テーブルのスリム化
CVIM での HugePage 設定方法
Cisco VIM では、HugePageの割合(物理サーバーに搭載されているメモリの何%をHugePageとして設定するか)と、HugePageのサイズ(2Mと1Gのどちらかを選択)を設定することができます。
以下、CVIMインストールファイルの setup_data.yaml ファイルの抜粋です。
SERVERS:
::
bglCSsv-up05:
VM_HUGEPAGE_PERCENTAGE: 70 # このサーバーは全メモリ容量の70%をHugePageとして割当て
VM_HUGEPAGE_SIZE: 1G # HugePage のサイズ、2Mか1Gのどちらかを選択
::
VM_HUGEPAGE_PERCENTAGE: 30 # SERVERSで個別のサーバーの値を設定してない場合この値が全てのサーバーで適用される
詳しくはCisco VIM のマニュアルページを参照して下さい。
HugePage確認方法
HugePage は NUMA ドメインごとに割り当てられます。
以下の例は、NUMA node0 の使用されている2MのHuge Page の数です。
[root@bglCSsv-up05 ~]# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
89994
一方、以下は使用されてない2MのHuge Page の数です。
[root@bglCSsv-up05 ~]# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/free_hugepages
89994
nr_hugepages=free_hugepages ですので、node0 に関しては全ての HugePage が使用されてないことがわかります。
1GのHuge Page については、/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/ の値を確認して下さい。
Openstackから HugePage を使用する方法
Openstack Instance 起動時に HugePage を使用するためには、Flavor に HugePage の設定をした上で、Instance 起動時にそのFlavorを適用します。
・HugePageを有効にしたFlavorの作成
[root@bglCSsv-mgt01 ~]# openstack flavor set --property hw:mem_page_size='large' m1.medium
・HugePageを有効にしたFlavorの確認
[root@bglCSsv-mgt01~]# openstack flavor show m1.medium
+----------------------------+--------------------------------------+
| Field | Value |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| access_project_ids | None |
| disk | 60 |
| id | 1c70b3cf-00a3-489c-83d6-b1195de23134 |
| name | m1.medium |
| os-flavor-access:is_public | True |
| properties | hw:mem_page_size='large' |
| ram | 10240 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 4 |
+----------------------------+--------------------------------------+