はじめに
IBM Power 環境では、VM(LPAR)作成時に割り当てたメモリー量と、OS 上で認識されるメモリー量が一致せず、OS 側が少なくなることがよくあります。これは、割り当てたメモリーの一部を PowerVM ハイパーバイザーがページテーブルや I/O 用の領域として確保するためです。
この差異を意識していないと、たとえばメモリー要件 16GB のソフトウェアに対して LPAR へ 16GB を割り当てても、OS 上で使用可能なメモリーは要件を下回り、導入時の前提条件チェックで失敗することがあります。
実際に、Ansible Automation Platform の導入時にメモリー不足で停止したログの例です。
TASK [ansible.containerized_installer.preflight : Fail if this machine lacks sufficient RAM] *******
ok: [aap-test-contrl.cloud.ibm.com] => {
"changed": false,
"msg": "All assertions passed"
}
fatal: [aap-exec1.cloud.ibm.com]: FAILED! => {
"assertion": "ansible_memtotal_mb >= 15000",
"changed": false,
"evaluated_to": false,
"msg": "This machine does not have sufficient RAM to run Ansible Automation Platform. Required RAM is 16GB but this machine only has 7280MB.\n"
}
環境
IBM Power Virtual Server 上の RHEL 9.6
RHEL on Power 確認
LPAR に 8GB を割り当てた環境で、OS がどこまで認識しているかを確認します。
(上で記載したログは 16GB 割り当てでOS認識が足りず、16BG の要件で引っかかった例ですが、以下は別のVMで 8GB を割り当てて、OS認識との差異を確認しています)
まず dmesg では、8388608K(8GB)のうち 1008448K(約 985MB)が reserved として確保され、利用可能なメモリーは 7380160K になっていることが分かります。
$ dmesg | grep -i reserved
[ 0.000000] Memory: 7380160K/8388608K available (17088K kernel code, 5888K rwdata, 10816K rodata, 7232K init, 3175K bss, 1008448K reserved, 0K cma-reserved)
/proc/meminfo でも、MemTotal は 7454848 kB(約 7280MB)となり、割り当てた 8GB には届きません。先ほどの導入エラーで報告された「7280MB」と一致します。
$ cat /proc/meminfo
MemTotal: 7454848 kB
MemFree: 5988608 kB
MemAvailable: 6464896 kB
Buffers: 15424 kB
Cached: 587456 kB
SwapCached: 0 kB
Active: 457344 kB
Inactive: 271488 kB
Active(anon): 206912 kB
Inactive(anon): 0 kB
Active(file): 250432 kB
Inactive(file): 271488 kB
Unevictable: 155264 kB
Mlocked: 155264 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Zswap: 0 kB
Zswapped: 0 kB
Dirty: 384 kB
Writeback: 0 kB
AnonPages: 281664 kB
Mapped: 147776 kB
Shmem: 33280 kB
KReclaimable: 47104 kB
Slab: 349696 kB
SReclaimable: 47104 kB
SUnreclaim: 302592 kB
KernelStack: 10400 kB
PageTables: 6336 kB
SecPageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3727424 kB
Committed_AS: 800640 kB
VmallocTotal: 549755813888 kB
VmallocUsed: 88576 kB
VmallocChunk: 0 kB
Percpu: 89600 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 0 kB
DirectMap64k: 8388608 kB
DirectMap2M: 0 kB
DirectMap1G: 0 kB
まとめ
IBM Power 上では、OS が認識するメモリーは LPAR に割り当てた値より少なくなります。今回の環境では 8GB の割り当てに対して OS 認識は約 7.1GB(7280MB)で、およそ 1GB 弱がハイパーバイザー用に確保されていました。
要件ぎりぎりのメモリーでサイジングすると、ソフトウェアの導入前チェックで弾かれる可能性があります。メモリー要件が明示されているソフトウェアを導入する際は、要件値に対して余裕を持たせた割り当てを行うことにご注意いただければと思います。
ご参考:
・Understanding PowerVM Hypervisor Memory Usage
・Why does IBM i OS show less memory than HMC or PowerVS for the partition?
