

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EC2 インスタンスのパフォーマンスを調整する
<a name="ec2-instance-performance-tuning"></a>

**注記**  
CloudFormation テンプレートを使用して AWS リソースをプロビジョニングした場合、これらのチューニングは自動的に適用されます。AMI を使用した場合、または EC2 インスタンスを手動で作成した場合、最も信頼性の高いパフォーマンスを実現するには、これらのパフォーマンスチューニングを適用する必要があります。

チューニングを適用した後は、必ずインスタンスを再起動してください。

**トピック**
+ [ハードウェア割り込みの調整とキューの受信 - CPU とネットワークに影響](#tune-hardware-interrupts)
+ [Rx 割り込みの結合を調整する - ネットワークに影響します](#tune-rx-interrupts)
+ [Rx リングバッファを調整する - ネットワークに影響します](#tune-rx-ring-buffer)
+ [カーネルブートパラメータを設定する (CPU C ステートとインターフェイスの命名) - CPU とネットワークに影響します](#tune-cpu-c-state)
+ [進入ポートを予約する - ネットワークに影響します](#reserve-ingress-ports)
+ [リブート](#reboot)

## ハードウェア割り込みの調整とキューの受信 - CPU とネットワークに影響
<a name="tune-hardware-interrupts"></a>

このセクションでは、systemd、SMP IRQ、受信パケットステアリング (RPS)、受信フローステアリング (RFS) の CPU コア使用率を設定します。使用しているインスタンスタイプに基づく一連の推奨設定については、「[付録: 割り込み/RPS チューニングの推奨パラメータ](#recommended-parameters)」を参照してください。

**重要**  
 **Amazon Linux 2023 のみ:** 続行する前に cron デーモンをインストールして有効にします。  

```
sudo dnf install -y cronie
sudo systemctl enable --now crond
```
 このセクションとそれに続く 2 つは `@reboot` crontab エントリを追加します。このエントリでは、実行中の cron デーモンを各ブートで有効にする必要があります。Amazon Linux 2023 では、cron デーモンはデフォルトではインストール**されない**ため、上記のコマンドを使用しないと、これらのエントリは書き込まれますが実行されません。Amazon Linux 2 では、cron デーモンはすでにインストールされ、有効になっています。アクションは必要ありません。

1. systemd プロセスをエージェント CPU コアから切り離します。

1. ハードウェア割り込みリクエストをエージェント CPU コアから離してルーティングします。

1. 1 つのネットワークインターフェイスカードのハードウェアキューがネットワークトラフィックのボトルネックにならないように RPS を設定します。

1. CPU キャッシュヒットレートを高め、ネットワーク遅延を低減するように RFS を設定します。

RPM が提供する `set_irq_affinity.sh` スクリプトは、上記のすべてを自動的に構成します。を crontab に追加すると、起動ごとに適用されます。

```
echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '${interrupt_core_list}' '${rps_core_mask}' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ をカーネルと OS 用に予約されたコア`interrupt_core_list`に置き換えます。通常は 1 番目と 2 番目のコアペアとハイパースレッドコアペアです。これと、上記で選択したコアとが重複しないようにしてください。(例: ハイパースレッドの 96-CPU インスタンスの場合は「0,1,48,49」）。
+ `rps_core_mask` は、受信パケットを処理する CPU を指定する 16 進数のビットマスクで、各桁は 4 個の CPU を表します。また、右から 8 文字ごとにカンマで区切る必要があります。すべての CPU を許可し、キャッシュにバランシングを任せることをお勧めします。
  + 各インスタンスタイプに推奨されるパラメータのリストについては、「[付録: 割り込み/RPS チューニングの推奨パラメータ](#recommended-parameters)」を参照してください。
+  96-CPU インスタンスの例: 

  ```
  echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '0,1,48,49' 'ffffffff,ffffffff,ffffffff' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root
  ```

## Rx 割り込みの結合を調整する - ネットワークに影響します
<a name="tune-rx-interrupts"></a>

 割り込み合体により、ホストシステムに大量の割り込みが発生するのを防ぎ、ネットワークのスループットを向上させることができます。この構成では、パケットが収集され、128 マイクロ秒ごとに 1 つの割り込みが発生します。を crontab に追加すると、起動ごとに適用されます。

```
echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ `interface` を、データを受信するように設定されたネットワークインターフェイス (イーサネットアダプタ) に置き換えます。通常、これは EC2 インスタンスに割り当てられたデフォルトのネットワークインターフェイス`eth0`です。

## Rx リングバッファを調整する - ネットワークに影響します
<a name="tune-rx-ring-buffer"></a>

 Rx リングバッファのリングエントリ数を増やして、バースト接続中のパケットドロップやオーバーランを防止します。を crontab に追加すると、起動するたびに正しく設定されます。

```
echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
```
+ `interface` を、データを受信するように設定されたネットワークインターフェイス (イーサネットアダプタ) に置き換えます。通常、これは EC2 インスタンスに割り当てられたデフォルトのネットワークインターフェイス`eth0`です。
+ `c6i` ファミリーインスタンスを設定する場合、リングバッファを ではなく `8192`に設定するためにコマンドを変更する必要があります`16384`。

## カーネルブートパラメータを設定する (CPU C ステートとインターフェイスの命名) - CPU とネットワークに影響します
<a name="tune-cpu-c-state"></a>

 これらのカーネルブートパラメータは、 を設定することで CPU のアイドリングを防止します`intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1`。CPU アイドリングは、問い合わせの開始時にパケットが失われる可能性があります。パラメータには、レシーバーのネットワークインターフェイスの名前を に変更`net.ifnames=0 biosdevname=0`する も含まれます`eth0`。この章の他の調整ステップと同様に、これらのパラメータは で説明されている再起動時に有効になります[リブート](#reboot)。他のセクションから任意の順序で適用できます。

 を使用してカーネル引数`grubby`を設定します。はブートローダー設定を両方で直接`grubby`管理するため、これは Amazon Linux 2023 (UEFI) と Amazon Linux 2 の両方で機能します。

```
sudo grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1"
```

**注記**  
 `net.ifnames=0` 引数は、次回の起動`eth0`時にネットワークインターフェイスの名前を に変更します。他のチューニングセクションとエージェント設定ターゲットは であるため`eth0`、これらのパラメータを適用して再起動することが推奨パスです。これらのパラメータを適用しないことを選択した場合、インターフェイスはデフォルト名を保持します (`ens5`Amazon Linux 2023 など）。その場合は、このガイドが を使用する`ip link show`すべての場所で、 を実行して見つかった実際のインターフェイス名を置き換えます`eth0`。

## 進入ポートを予約する - ネットワークに影響します
<a name="reserve-ingress-ports"></a>

 カーネルの使用状況と競合しないように、`AwsGroundStationAgentEndpoint` の入力アドレスのポート範囲内のすべてのポートを予約します。ポートの使用が競合すると、コンタクトやデータ配信の失敗につながります。

```
echo "net.ipv4.ip_local_reserved_ports=${port_range_min}-${port_range_max}" >> /etc/sysctl.conf
```
+ 例えば、`echo "net.ipv4.ip_local_reserved_ports=42000-43500" >> /etc/sysctl.conf` などです。

## リブート
<a name="reboot"></a>

すべてのチューニングが正常に適用されたら、インスタンスを再起動してチューニングを有効にします。

```
sudo reboot
```

## 付録: 割り込み/RPS チューニングの推奨パラメータ
<a name="recommended-parameters"></a>

 このセクションでは、チューニングセクション「ハードウェア割り込みと受信キューのチューニング - CPU とネットワークに影響あり」セクションで使用するための推奨パラメータ値を決定します。


| ファミリー | インスタンスタイプ | ${interrupt\_core\_list} | ${rps\_core\_mask} | 
| --- | --- | --- | --- | 
| c7i |  + c7i.24xlarge<br />+ c7i.12xlarge  |  + 0、1、48、49<br />+ 0、1、24、25  |  + ffffffff,ffffffff,ffffffff<br />+ ffff,ffffffff  | 
| C6i |  + c6i.32xlarge  |  + 0、1、64、65  |  + ffffffff,ffffffff,ffffffff,ffffffff  | 
| c5 |  + c5.24xlarge<br />+ c5.18xlarge<br />+ c5.12xlarge  |  + 0、1、48、49<br />+ 0、1、36、37<br />+ 0、1、24、25  |  + ffffffff,ffffffff,ffffffff<br />+ ff、ffffffff、ffffffff<br />+ ffff,ffffffff  | 
| c5n |  + c5n.metal<br />+ c5n.18xlarge  |  + 0、1、36、37<br />+ 0、1、36、37  |  + ff、ffffffff、ffffffff<br />+ ff、ffffffff、ffffffff  | 
| m5 |  + m5.24xlarge<br />+ m5.12xlarge  |  + 0、1、48、49<br />+ 0、1、24、25  |  + ffffffff,ffffffff,ffffffff<br />+ ffff,ffffffff  | 
| r5 |  + r5.metal<br />+ r5.24xlarge  |  + 0、1、48、49<br />+ 0、1、48、49  |  + ffffffff,ffffffff,ffffffff<br />+ ffffffff,ffffffff,ffffffff  | 
| r5n |  + r5n.metal<br />+ r5n.24xlarge  |  + 0、1、48、49<br />+ 0、1、48、49  |  + ffffffff,ffffffff,ffffffff<br />+ ffffffff,ffffffff,ffffffff  | 
| g4dn |  + g4dn.metal<br />+ g4dn.16xlarge<br />+ g4dn.12xlarge  |  + 0、1、48、49<br />+ 0、1、32、33<br />+ 0、1、24、25  |  + ffffffff,ffffffff,ffffffff<br />+ ffffffff,ffffffff<br />+ ffff,ffffffff  | 
| p4d |  + p4d.24xlarge  |  + 0、1、48、49  |  + ffffffff,ffffffff,ffffffff  | 
| p3dn |  + p3dn.24xlarge  |  + 0、1、48、49  |  + ffffffff,ffffffff,ffffffff  | 