Amazon Linux 2023.2 で zram swapping がサポートされました

2023年9月にリリースされた Amazon Linux 2023.2 で サポートされた新機能、 zram を利用した swapについて確認しました。
2023.10.18

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を利用しました。

EC2-amazonlinux2023-2

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など)への変更パスを準備して用意する事をおすすめします。