LinuxのRAMを制限するメモ

LinuxでRAMの少ない状態のテストをしたいなと思ってコマンドラインオプションにメモリ制限のオプションをつけて試してみました．

物理RAMモジュールが制限したい容量に刺し直すことができればいいのですが，都合の良いサイズのRAMモジュールがあるとは限りません．Linuxの起動オプションで制限できそうだったので試してみました．

Linuxマシンを起動して，GRUBのメニューで編集したいエントリを矢印上下キーで選択して， e ボタンを押して編集メニューに入ります．
linux /vmlinuz〜 といった行に移動して末尾に追加の起動オプションを追記します．今回はメモリを2GBに制限したいので， mem=2048m を指定します．(実メモリ以上にも設定できるようですがそこを使おうとしたときにクラッシュしそうですね)

旧

linux /vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga—​260—​vg-root ro

新

linux /vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga—​260—​vg-root ro mem=2048m

Ctrl + x を押してこのオプションで起動します．

起動したら確認してみます．

$ cat /proc/cmdline (1)
BOOT_IMAGE=/vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga--260--vg-root ro mem=2048m
$ head -1 /proc/meminfo (2)
MemTotal: 2032968 kB
$ free (3)
total used free shared buff/cache available
Mem: 2032968 1575032 70032 161360 387904 139588
Swap: 0 0 0

コマンドラインオプションの確認

メモリの確認

メモリの確認

2GBに制限できたようです :)

詳細はKernelドキュメントを

linux-5.13/Documentation/admin-guide/kernel-parameters.txt

mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory
Amount of memory to be used in cases as follows:

1 for test;
2 when the kernel is not able to see the whole system memory;
3 memory that lies after 'mem=' boundary is excluded from
the hypervisor, then assigned to KVM guests.

[X86] Work as limiting max address. Use together
with memmap= to avoid physical address space collisions.
Without memmap= PCI devices could be placed at addresses
belonging to unused RAM.

Note that this only takes effects during boot time since
in above case 3, memory may need be hot added after boot
if system memory of hypervisor is not sufficient.

今回の手順はアドホックな手順で再起動すれば元に戻ってしまいます．もし永続化したいのであれば， grub.cfg を書き換えればOKなはずです．今回のDebian Bullseye の場合は， /etc/grub.d/10_linux を編集して sudo update-grub2 の実行で /boot/grub/grub.cfg が更新されます．

環境

$ dpkg-query -W grub2* linux-image-`uname -r` procps
grub2
grub2-common 2.04-19
linux-image-5.13.2-mptcp+le9 5.13.2-mptcp+le9-3
procps 2:3.3.17-5
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
$ arch
x86_64