のぴぴのメモ

自分用のLinuxとかの技術メモ

【RHEL/CentOS】RHEL6.6にMemAbailableがバックポートされている件

はじめに

先日の下記の記事で「RHEL6ではバックポートされてMemAvailableが使えるよ」という情報を頂いたので、追加で情報を整理しました。
nopipi.hatenablog.com

RHEL6.6へのMemAvailableのバックポート

MemAvailableは、RHEL6.6でバックポートされてました。というのも、ググったらredhatのナレッジ情報が出てきました。
詳細はログインしないと見れないのですが、MemAvailableは"kernel-2.6.32-504.el6"以上で利用可能とあり、このバージョンがRHEL6.6のカーネルバージョンになります。
Backport "MemAvailable" field to /proc/meminfo in Red Hat Enterprise Linux 6. - Red Hat Customer Portal

使い方

MemAvailableの有効化

デフォルトでは互換性に配慮し非表示に設定されているため、カーネルパラメータvm.meminfo_legacy_layoutを無効する必要があります。

# vim /etc/sysctl.conf
vm.meminfo_legacy_layout=0

書き込み後、下記コマンドで反映&確認。
# sysctl -p
# sysctl vm.meminfo_legacy_layout
vm.meminfo_legacy_layout = 0

表示

RHEL7とは表示位置が違ったり、freeコマンドの表示形式が違うとかありますが、availableがキチンと表示されます。

/proc/meminfo

一番最後の行に表示されます。取ってつけたようなとも思いますが、コード修正の影響を考えたらしょうがないですね。

# cat /proc/meminfo
MemTotal:        1020236 kB
MemFree:           76136 kB
Buffers:          230192 kB
Cached:           596980 kB
SwapCached:          332 kB
Active:           328452 kB
Inactive:         519032 kB
Active(anon):       3200 kB
Inactive(anon):    17380 kB
Active(file):     325252 kB
Inactive(file):   501652 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:        1046720 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         20084 kB
Mapped:             7884 kB
Shmem:               268 kB
Slab:              72596 kB
SReclaimable:      45560 kB
SUnreclaim:        27036 kB
KernelStack:        1312 kB
PageTables:         5976 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1558688 kB
Committed_AS:     108076 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      138664 kB
VmallocChunk:   34359594564 kB
HardwareCorrupted:     0 kB
AnonHugePages:      2048 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        8192 kB
DirectMap2M:     1040384 kB
MemAvailable:     813196 kB
freeコマンド

freeコマンドは、"-a"オプションで表示されます。

# free -a
             total       used       free     shared    buffers     cached  available
Mem:       1020236     944480      75756        268     230216     597172     813036
-/+ buffers/cache:     117092     903144
Swap:      1048572       1852    1046720

ちなみに、MemAvailableが無効化(vm.meminfo_legacy_layout=1)の場合、availableは0と表示されます。

# free -a
             total       used       free     shared    buffers     cached  available
Mem:       1020236     944472      75764        268     230248     597192          0
-/+ buffers/cache:     117032     903204
Swap:      1048572       1852    1046720

補足

upstreamカーネルのMemAbailableコミット情報

ちなみにナレッジには以下の通り、upstream(コミュニティのカーネル)からRHEL6バックポートしているよと記載があります。

Backport upstream commit id: 34e431b0ae398fc54ea69ff85ec700722c9da773 to add MemAvailable field to /proc/meminfo in Red Hat Enterprise Linux 6

そして、このgitのコミットIDを探すとupstreamカーネルのコミットとLKMLの情報は以下の通りでした。
kernel/git/torvalds/linux.git - Linux kernel source tree
LKML: Rik van Riel: [RFC PATCH -mm] provide estimated available memory in /proc/meminfo