第2章 アクション項目

SMTは様々な方法で無効にできます。通常、使用可能なオプションは、使用しているハードウェアまたは実行中のカーネルによって異なります。SMTを無効にするためにお薦めする方法は、次の各項で説明します。システムで信頼できないコードを実行する可能性がある場合や、入力値を適切にチェックおよびサニタイズできないコードに対してユーザー入力を許可する場合は、SMTの無効化を検討する必要があります。

2.1 システム・ファームウェアでSMTを無効にする

SMTはハードウェア機能であるため、どのシステムでもシステム・ファームウェアで無効にするのが最も現実的な方法ですこれは通常、システムのBIOSまたはUEFIにアクセスしてオプションを設定することによってブート時に実行されます。この方法の詳細は、システム・ベンダーのドキュメントを参照してください。

ファームウェアでSMTが無効になっている場合、オペレーティング・システムはこの機能を有効にできません。

ファームウェア内のオプションを無効にすることは必ずしも実用的ではなく、そのためにはブート時に手動で介入する必要があり、大規模なデータ・センターでは柔軟性が得られない可能性があります。さらに、他のユーザーがファームウェアでこのオプションを再度有効にした場合、変更を検出できないことがあります。

ファームウェアでSMTを無効にすることはお薦めしますが、カーネル・ブート・オプションを構成して、ファームウェアでSMTを再度有効にした場合でもSMTを無効にしたり、単にファームウェア内でこのオプションをハード設定する必要がないようにすることが必要な場合があります。2.2項「SMTを無効にするカーネル・ブート・パラメータを設定する」を参照してください。

2.2 SMTを無効にするカーネル・ブート・パラメータを設定する

最新のカーネル・リリースが、ブート時にブート引数として適用できるnosmtブート・オプションをサポートしています。このオプションは、カーネル内のSMTを無効にします。2.3項「実行時にSMTを無効にする」の説明に従ってSMTをオンに切り替えようとしても、実行中のシステムでこのオプションをオーバーライドすることはできません。

grubbyコマンドを使用して、デフォルト・カーネルのカーネル・ブート構成にnosmtオプションを適用できます。

# grubby --args=nosmt --update-kernel=DEFAULT

この変更は、デフォルトのカーネルのみを更新しますが、通常、変更はOracle Linux 6およびOracle Linux 7の以降のカーネル更新にも適用されます。Oracle Linux 8では、変更は現在のデフォルトのカーネルのみを更新し、以降のカーネル更新には適用されません。

grubbyを使用してこのパラメータを設定することをお薦めしますが、システムでgrub2-mkconfigが使用される可能性がある場合は、grubbyによって設定されたパラメータが上書きされることがあります。これを防ぐには、nosmt引数が/etc/sysconfig/grubGRUB_CMDLINE_LINUX行に適用されていることを確認してください。

これらの変更を有効にするには、システムを再起動する必要があることに注意してください。

2.3 実行時にSMTを無効にする

カーネルは実行時にSMTを制御するオプションを提供できるため、リブートせずにSMTを無効にできます。これを実行すると、SMTが永続的に無効になることはなく、システムのリブート時に再度有効になることに注意してください。このオプションを使用する場合は、次回ブート時にファームウェアのオプションも無効にすることを選択するか、カーネル・ブート・パラメータを構成してこのオプションがブート時にトリガーされるようにSMTを無効にしてください。

また、動作中のシステムで一度無効にしたSMTを再び有効にすることはお薦めしないことにも注意してください。SMTを再度有効にする場合は、システムの安全で予測可能な動作のために再起動が必須と考えてください。

SMTの現在のランタイム・ステータスは、次を実行することで確認できます。

# cat /sys/devices/system/cpu/smt/control

このコマンドは、次のいずれかの状態を返す可能性があります。

  • on。 SMTはCPUによってサポートされ、有効になっています。すべての論理CPUが、制限なくオンラインおよびオフラインにできます。この値を書き込むことでこれをオプションとして設定できますが、CPUがSMTをサポートしていない場合、SMTがシステム・ファームウェアで無効になっている場合、またはnosmtカーネル・ブート・オプションが設定されている場合、この値は無視されます。

  • off。 SMTはCPUによってサポートされ、無効になっています。いわゆるプライマリSMTスレッドのみが、制限なしでオンラインおよびオフラインにできます。非プライマリの兄弟をオンラインにしようとすると、拒否されます。この値を書き込むことで、これをオプションとして設定できます。

  • forceoff。 'off'と同じですが、状態は制御できません。この状態が設定されると、制御ファイルへの書込みは拒否されます。この値を制御ファイルに書き込むことでこのステータスを設定できますが、通常はブート時にカーネルでSMTが無効になっているときにこの値に設定されます。この値の設定を解除するにはリブートが必要であり、nosmtカーネル・ブート引数の設定が解除されていることの確認が必要な場合があります。

  • notsupported。 プロセッサはSMTをサポートしていません。そのため、L1TFのSMTへの影響を受けません。制御ファイルへの書込みの試行は拒否されます。これをオプションとして設定することはできません。

実行時にこれらのオプションのいずれかを設定するには、次のコマンドを入力します。

# echo off > /sys/devices/system/cpu/smt/control