2023年3月にGAとなった Amazon Linux 2023、4半期毎のマイナーバージョンアップが計画されており、 2023年9月、新しいマイナーバージョン Amazon Linux 2023.2 がリリースされました。
今回 Amazon Linux 2023.2 で サポートされた新機能、 zram を利用した Swap について確認を試みる機会がありましたので、紹介させて頂きます。
ZRAM
Amazon Linux 2023.2 では、Fedora 33 以降でサポートされた zram を利用した Swap をサポート。 実メモリの不足時にメモリを圧縮して退避させる利用が可能となりました。
検証環境
Amazon Linux 2023.2.20231016 として公開されていた AMIを利用しました。
t3.nano
メモリ実装800MB以下のインスタンス(「t3.nano」、「t4g.nano」など)で、Amazon Linux 2023.2 を起動した場合、デフォルトで400MBのSwapが利用可能になります。
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle 407M 9.1M 2.4M 4M 2 [SWAP]
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 407M 9.3M 100
$ free -h
total used free shared buff/cache available
Mem: 407Mi 173Mi 64Mi 0.0Ki 170Mi 223Mi
Swap: 406Mi 0.0Ki 406Mi
t3.micro
メモリ1GB搭載する t3.micro インスタンス、初期状態では Swap は 設定されません。
$ zramctl
$ swapon --show
$ free -h
total used free shared buff/cache available
Mem: 904Mi 174Mi 490Mi 0.0Ki 239Mi 600Mi
Swap: 0B 0B 0B
「zram-generator.conf」の「host-memory-limit」値を変更、OS再起動後に Swap が有効となることが確認できました。
- 変更前
$ cat /usr/lib/systemd/zram-generator.conf | grep -v "^#"
[zram0]
zram-size = min(ram, 8192)
host-memory-limit=800
compression-algorithm=lzo-rle
- host-memory-limit 変更 (800→1200)
$ cat /usr/lib/systemd/zram-generator.conf | grep -v "^#"
[zram0]
zram-size = min(ram, 8192)
host-memory-limit=1200
compression-algorithm=lzo-rle
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle 904M 4K 80B 12K 2 [SWAP]
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 904M 0B 100
$ free -h
total used free shared buff/cache available
Mem: 904Mi 183Mi 482Mi 0.0Ki 238Mi 591Mi
Swap: 903Mi 0B 903Mi
アップグレード
Amazon Linux 2023.1、2023.0のAMI で起動した EC2環境、2023.2へのアップグレードは可能です。
20230906.1 更新例
- AMI: al2023-ami-2023.1.20230906.1-kernel-6.1-x86_64
sh-5.2$ sudo dnf upgrade --releasever=2023.2.20231016 -y
Last metadata expiration check: 0:00:16 ago on Wed Oct 18 13:49:41 2023.
Dependencies resolved.
=======================================================================================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================================================================================
Installing:
kernel x86_64 6.1.55-75.123.amzn2023 amazonlinux 32 M
Upgrading:
amazon-ec2-net-utils noarch 2.4.0-1.amzn2023.0.1 amazonlinux 17 k
amazon-linux-repo-s3 noarch 2023.2.20231016-0.amzn2023 amazonlinux 19 k
amazon-ssm-agent x86_64 3.2.1630.0-1.amzn2023 amazonlinux 24 M
bind-libs x86_64 32:9.16.42-1.amzn2023.0.5 amazonlinux 1.3 M
bind-license noarch 32:9.16.42-1.amzn2023.0.5 amazonlinux 14 k
bind-utils x86_64 32:9.16.42-1.amzn2023.0.5 amazonlinux 208 k
cloud-init noarch 22.2.2-1.amzn2023.1.11 amazonlinux 1.1 M
curl-minimal x86_64 8.3.0-1.amzn2023.0.2 amazonlinux 158 k
fonts-srpm-macros noarch 1:2.0.5-12.amzn2023.0.2 amazonlinux 27 k
glib2 x86_64 2.74.7-689.amzn2023.0.2 amazonlinux 2.7 M
glibc x86_64 2.34-52.amzn2023.0.6 amazonlinux 1.9 M
glibc-all-langpacks x86_64 2.34-52.amzn2023.0.6 amazonlinux 18 M
glibc-common x86_64 2.34-52.amzn2023.0.6 amazonlinux 305 k
glibc-gconv-extra x86_64 2.34-52.amzn2023.0.6 amazonlinux 1.5 M
glibc-locale-source x86_64 2.34-52.amzn2023.0.6 amazonlinux 4.0 M
kernel-livepatch-repo-s3 noarch 2023.2.20231016-0.amzn2023 amazonlinux 19 k
kernel-tools x86_64 6.1.55-75.123.amzn2023 amazonlinux 151 k
libcurl-minimal x86_64 8.3.0-1.amzn2023.0.2 amazonlinux 271 k
libffi x86_64 3.4.4-1.amzn2023.0.1 amazonlinux 39 k
libgcc x86_64 11.4.1-2.amzn2023.0.2 amazonlinux 93 k
libgcrypt x86_64 1.10.2-1.amzn2023.0.1 amazonlinux 524 k
libgomp x86_64 11.4.1-2.amzn2023.0.2 amazonlinux 268 k
libidn2 x86_64 2.3.2-1.amzn2023.0.5 amazonlinux 104 k
libnghttp2 x86_64 1.57.0-1.amzn2023.0.1 amazonlinux 78 k
libstdc++ x86_64 11.4.1-2.amzn2023.0.2 amazonlinux 731 k
libtasn1 x86_64 4.19.0-1.amzn2023.0.4 amazonlinux 75 k
libxml2 x86_64 2.10.4-1.amzn2023.0.5 amazonlinux 706 k
openssh x86_64 8.7p1-8.amzn2023.0.8 amazonlinux 454 k
openssh-clients x86_64 8.7p1-8.amzn2023.0.8 amazonlinux 708 k
openssh-server x86_64 8.7p1-8.amzn2023.0.8 amazonlinux 455 k
openssl x86_64 1:3.0.8-1.amzn2023.0.7 amazonlinux 1.2 M
openssl-libs x86_64 1:3.0.8-1.amzn2023.0.7 amazonlinux 2.2 M
p11-kit x86_64 0.24.1-2.amzn2023.0.3 amazonlinux 357 k
p11-kit-trust x86_64 0.24.1-2.amzn2023.0.3 amazonlinux 138 k
python3 x86_64 3.9.16-1.amzn2023.0.6 amazonlinux 28 k
python3-cffi x86_64 1.14.5-1.amzn2023.0.3 amazonlinux 242 k
python3-libs x86_64 3.9.16-1.amzn2023.0.6 amazonlinux 7.3 M
sudo x86_64 1.9.13-1.p2.amzn2023.0.4 amazonlinux 1.2 M
system-release noarch 2023.2.20231016-0.amzn2023 amazonlinux 30 k
systemd x86_64 252.16-1.amzn2023.0.1 amazonlinux 4.2 M
systemd-libs x86_64 252.16-1.amzn2023.0.1 amazonlinux 627 k
systemd-networkd x86_64 252.16-1.amzn2023.0.1 amazonlinux 619 k
systemd-pam x86_64 252.16-1.amzn2023.0.1 amazonlinux 329 k
systemd-resolved x86_64 252.16-1.amzn2023.0.1 amazonlinux 281 k
systemd-udev x86_64 252.16-1.amzn2023.0.1 amazonlinux 2.0 M
vim-common x86_64 2:9.0.1882-1.amzn2023.0.1 amazonlinux 7.3 M
vim-data noarch 2:9.0.1882-1.amzn2023.0.1 amazonlinux 25 k
vim-enhanced x86_64 2:9.0.1882-1.amzn2023.0.1 amazonlinux 1.8 M
vim-filesystem noarch 2:9.0.1882-1.amzn2023.0.1 amazonlinux 20 k
vim-minimal x86_64 2:9.0.1882-1.amzn2023.0.1 amazonlinux 789 k
xxd x86_64 2:9.0.1882-1.amzn2023.0.1 amazonlinux 38 k
Transaction Summary
=======================================================================================================================================================================================
Install 1 Package
Upgrade 51 Packages
Total download size: 123 M
2023.2のアップグレード後、 zram 関連パッケージのインストールと再起動により、zram が利用可能となります。
$ sudo dnf install -y zram-generator zram-generator-defaults
Last metadata expiration check: 0:01:39 ago on Wed Oct 18 13:49:41 2023.
Dependencies resolved.
=======================================================================================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================================================================================
Installing:
zram-generator x86_64 1.1.2-67.amzn2023 amazonlinux 413 k
zram-generator-defaults noarch 1.1.2-67.amzn2023 amazonlinux 10 k
Transaction Summary
=======================================================================================================================================================================================
Install 2 Packages
まとめ
Amazon Linux 2023.2 でzram Swap がサポート、メモリ500MB設定の 「nano」インスタンスでは デフォルトで有効となった事で、 従来メモリ不足がネックとなっていたユースケースでも、廉価な「t3.nano」「t4g.nano」などのインスタンスが利用できる可能性が増えました。
また、これまでの Amazon Linuxでも Swap設定は可能でしたが、Swapファイル、Swapパーティション を EBSに配置した場合、ストレージや スナップショットのコスト影響や、 Swap利用に伴うIO発生時、顕著な性能影響が出るなどの課題がありました。
- UserDataを利用したSwapファイル設定例
UserData: !Base64
Fn::Sub: |
runcmd:
- /usr/bin/dd if=/dev/zero of=/swapfile bs=1M count=128
- chmod 600 /swapfile
- /usr/sbin/mkswap /swapfile
- /usr/sbin/swapon /swapfile
Amazon Linux 2023 で 予期せぬメモリ対策として EBSにSwapファイルを利用されている場合、Amazon Linux 2023.2でサポートされた zram swap を お試しください。
なお、性能影響が少ないとされる zram swapも過剰な利用は望ましくない場合があります。 性能担保が必要なワークロードで swapを設定される場合、 CloudWatch Agentなどを利用した Swap 消費状況の可視化の用意と、一定以上のSwap消費が検知された際には、上位インスタンスへのスペックアップや、メモリ最適化インスタンス(R7iなど)への変更パスを準備して用意する事をおすすめします。