このトピックでは、AMD CPU を搭載した Elastic Compute Service (ECS) インスタンスの GuestOS カーネルを更新した後にパフォーマンスが低下する問題の原因と解決策について説明します。
問題の説明
第 6 世代以降の AMD CPU を搭載した ECS インスタンスの Linux オペレーティングシステムのバージョンを更新した後、または現在の Linux オペレーティングシステムのカーネルを更新した後、インスタンスのパフォーマンスが低下する場合があります。
原因
デフォルトでは、AMD の投機的リターンスタックオーバーフロー (SRSO) の脆弱性を修正するためのパッチが Linux オペレーティングシステムの最新バージョンに組み込まれており、SafeRET 緩和策が有効になっています。 これにより、インスタンスのパフォーマンスが低下する可能性があります。
SafeRET は、SRSO の脆弱性を修正するために使用される緩和メカニズムです。 追加のセキュリティチェックが導入されるため、プロセッサのパフォーマンスが低下します。 AMD の声明によると、ほとんどの本番環境では SRSO のリスクは低いとのことです。 パフォーマンスの低下を防ぐために、SafeRET を無効にすることをお勧めします。 詳細については、「Speculative Return Stack Overflow Mitigation Options and Considerations for Public Cloud Users」をご参照ください。
解決策
grep . /sys/devices/system/cpu/vulnerabilities/*
コマンドを実行して、有効な緩和策を表示します。
spec_rstack_overflow 緩和策に SafeRET が含まれている場合、SRSO の脆弱性に対する緩和策がカーネルで有効になっています。 これにより、特定のアプリケーションでパフォーマンスが大幅に低下する可能性があります。
ユーザーモードアプリケーションが安全であり、アプリケーションのパフォーマンスがパッチパッケージの影響を受けないようにするには、
spec_rstack_overflow=off
パラメーターをカーネルコマンドラインに追加し、カーネルを再起動して、SRSO の脆弱性に対する緩和策を強制的に無効にします。
クラウドアシスタントプラグインを使用して、SRSO の脆弱性に対する緩和策をクエリ、有効化、および無効化する
SRSO の脆弱性のステータスをクエリする
sudo acs-plugin-manager -e -P ecs_amd_srso_config -p --status
SRSO の脆弱性に対する緩和策を有効にする
sudo acs-plugin-manager -e -P ecs_amd_srso_config -p --enable
SRSO の脆弱性に対する緩和策を無効にする
sudo acs-plugin-manager -e -P ecs_amd_srso_config -p --disable
SRSO の脆弱性に対する緩和策を手動で有効または無効にする
Alibaba Cloud Linux、Anolis、CentOS、CentOS Stream、AlmaLinux、Rocky Linux、Fedora、または RHEL
grubby コマンドを実行する
grubby コマンドが存在するかどうかを確認します。
デフォルトでは、grubby コマンドラインツールは RHEL ディストリビューションにプリインストールされています。 次のコマンドを実行して、grubby コマンドが存在するかどうかを確認できます。
which grubby
ビジネス要件に基づいて、SRSO の脆弱性に対する緩和策を有効または無効にします。
SRSO の脆弱性に対する緩和策を有効にします。
sudo grubby --update-kernel="$(grubby --default-kernel)" --remove-args="spec_rstack_overflow=off"
SRSO の脆弱性に対する緩和策を無効にします。
sudo grubby --update-kernel=ALL --args="spec_rstack_overflow=off"
設定を有効にするには、インスタンスを再起動します。
sudo reboot
grub2-mkconfig または grub-mkconfig コマンドを実行する
この例では、grub2-mkconfig コマンドを使用します。 grub-mkconfig コマンドは、grub2-mkconfig コマンドと同様の方法で使用できます。
grub2-mkconfig コマンドが存在するかどうかを確認します。
デフォルトでは、grub2-mkconfig コマンドは RHEL ディストリビューションに含まれています。 次のコマンドを実行して、grub2-mkconfig コマンドが存在するかどうかを確認できます。
which grub2-mkconfig
ビジネス要件に基づいて、SRSO の脆弱性に対する緩和策を有効または無効にします。
SRSO の脆弱性に対する緩和策を有効にします。
sudo sed -i "s/ spec_rstack_overflow=off//g" /etc/default/grub
SRSO の脆弱性に対する緩和策を無効にします。
sudo sed -i "/GRUB_CMDLINE_LINUX=\"/s/\"$/ spec_rstack_overflow=off\"/" /etc/default/grub
GRand Unified Bootloader (GRUB) 構成ファイルを生成します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
設定を有効にするには、インスタンスを再起動します。
sudo reboot
Debian または Ubuntu
update-grub2 または update-grub コマンドを実行する
この例では、update-grub2 コマンドを使用します。 update-grub コマンドは、update-grub2 コマンドと同様の方法で使用できます。
update-grub2 コマンドが存在するかどうかを確認します。
which update-grub2
ビジネス要件に基づいて、SRSO の脆弱性に対する緩和策を有効または無効にします。
SRSO の脆弱性に対する緩和策を有効にします。
sudo sed -i "s/ spec_rstack_overflow=off//g" /etc/default/grub
SRSO の脆弱性に対する緩和策を無効にします。
sudo sed -i "/GRUB_CMDLINE_LINUX=\"/s/\"$/ spec_rstack_overflow=off\"/" /etc/default/grub
GRUB 構成ファイルを生成します。
sudo update-grub2
設定を有効にするには、インスタンスを再起動します。
sudo reboot