

# EC2 インスタンスの SSD インスタンスストアボリューム
<a name="ssd-instance-store"></a>

他のインスタンスストアボリュームと同様に、インスタンスの SSD インスタンスストアボリュームを起動するときにマップする必要があります。SSD インスタンスボリューム上のデータは関連するインスタンスの存続期間中のみ維持されます。詳細については[EC2 インスタンスへのインスタンスストアボリュームの追加](add-instance-store-volumes.md)を参照してください。

## NVMe SSD ボリューム
<a name="nvme-ssd-volumes"></a>

インスタンスによってはNon-Volatile Memory Express (NVMe) ソリッドステートドライブ (SSD) インスタンスストアボリュームを提供するものもあります。各インスタンスタイプによりサポートされるインスタンスストアボリュームのタイプの詳細については[EC2 インスタンスのインスタンスストアボリュームの制限](instance-store-volumes.md)を参照してください。

NVMe インスタンスストレージのデータはインスタンスのハードウェアモジュールに実装されている XTS-AES-256 ブロック暗号を使用して暗号化されます。暗号化キーはハードウェアモジュールで作成され、NVMe インスタンスストレージデバイスごとに固有です。すべての暗号化キーはインスタンスが停止または終了して復元できないときに破棄されます。この暗号化を無効にしたり、独自の暗号キーを指定したりすることはできません。

### Linux インスタンス
<a name="nvme-ssd-linux"></a>

NVMe ボリュームにアクセスするにはNVMe ドライバーをインストールする必要があります。以下の AMI はこの要件を満たしています。
+ AL2023
+ Amazon Linux 2
+ Amazon Linux AMI 2018.03 以降
+ `linux-aws` カーネルを搭載した Ubuntu 14.04 以降
**注記**  
AWS Graviton ベースのインスタンスタイプには`linux-aws` カーネル搭載の Ubuntu 18.04 以降が必要です
+ Red Hat Enterprise Linux 7.4 以降
+ SUSE Linux Enterprise Server 12 SP2 以降
+ CentOS 7.4.1708 以降
+ FreeBSD 11.1 以降
+ Debian GNU/Linux 9 以降
+ Bottlerocket

インスタンスに接続したら、**lspci** コマンドを使用して NVMe デバイスをリストできます。次に示すのは4 つの NVMe デバイスをサポートする `i3.8xlarge` インスタンスの出力例です。

```
[ec2-user ~]$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Device 1d0f:ec20
00:17.0 Non-Volatile memory controller: Device 1d0f:cd01
00:18.0 Non-Volatile memory controller: Device 1d0f:cd01
00:19.0 Non-Volatile memory controller: Device 1d0f:cd01
00:1a.0 Non-Volatile memory controller: Device 1d0f:cd01
00:1f.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01)
```

サポートされているオペレーティングシステムを使用しているが、NVMe デバイスが表示されない場合は次のコマンドを使用して NVMe モジュールが読み込まれていることを確認します。
+ Amazon Linux、Amazon Linux 2、Ubuntu 14/16、Red Hat Enterprise Linux、SUSE Linux Enterprise Server、CentOS 7

  ```
  $ lsmod | grep nvme
  nvme          48813  0
  ```
+ Ubuntu 18

  ```
  $ cat /lib/modules/$(uname -r)/modules.builtin | grep nvme
  s/nvme/host/nvme-core.ko
  kernel/drivers/nvme/host/nvme.ko
  kernel/drivers/nvmem/nvmem_core.ko
  ```

NVMe ボリュームは NVMe 1.0e 仕様に準拠しています。NVMe コマンドは NVMe ボリュームで使用できます。Amazon Linux では`nvme-cli` コマンドを使用して repo から **yum install** パッケージをインストールできます。サポートされているバージョンの Linux ではイメージで利用可能でない場合は `nvme-cli` パッケージをダウンロードできます。

### Windows インスタンス
<a name="nvme-ssd-windows"></a>

以下のオペレーティングシステムの最新の AWS Windows AMI にはAWS NVMe ドライバーが含まれています。これらはパフォーマンス向上のために NVMe ブロックデバイスとして公開される SSD インスタンスストアボリュームを操作するために使用します。
+ Windows Server 2025
+ Windows Server 2022
+ Windows Server 2019
+ Windows Server 2016
+ Windows Server 2012 R2

インスタンスに接続したら、ディスクマネージャーで NVMe ボリュームが表示されることを確認できます。タスクバーで、Windows ロゴのコンテキスト (右クリック) メニューを開き、[**Disk Management**] を選択してください。

Amazon が提供する AWS Windows AMI にはAWS NVMe ドライバーが含まれています。最新の AWS Windows AMI を使用していない場合は[現行の AWS NVMe ドライバーをインストール](aws-nvme-drivers.md)できます。

## 非 NVMe SSD ボリューム
<a name="ssd-volumes"></a>

C3、I2、M3、R3、X1 の各インスタンスは非 NVMe SSD を使用するインスタンスストアボリュームをサポートすることで、高いランダム I/O パフォーマンスを実現しています。各インスタンスタイプによりサポートされるインスタンスストアボリュームの詳細については[EC2 インスタンスのインスタンスストアボリュームの制限](instance-store-volumes.md)を参照してください。

## SSD ベースのインスタンスストアボリュームの I/O パフォーマンス
<a name="ssd-volume-perf"></a>

インスタンスに SSD ベースのインスタンスストアボリュームを使用するほど、アーカイブできる書き込み IOPS の数は減少します。これはSSD コントローラーが実行する必要がある追加の作業が原因です。SSD コントローラーは利用可能な領域を見つけ、既存のデータを再書き込みし、未使用の領域を消去して、再書き込みができるようにします。このガベージコレクションというプロセスにより、SSD への内部的な書き込み増幅が発生し、ユーザーの書き込み操作に対する SSD 書き込み操作の割合として表示されます。書き込み操作が 4,096 バイトの倍数でないか、4,096 バイトの境界に整合していない場合、パフォーマンスの低下はさらに大きくなります。少量のバイト数または整合していないバイト数で書き込む場合、SSD コントローラーは周辺のデータを読み取り、その結果を新しい場所に保存する必要があります。このパターンにより、書き込み増幅が大幅に増え、レイテンシーが増加し、I/O パフォーマンスが大きく低下します。

SSD コントローラーは複数の方法を利用すると、書き込み増幅の影響を減らすことができます。このような方法の 1 つにはSSD インスタンスストレージに領域を予約し、コントローラーが書き込み操作に利用できる領域をより効率的に管理できるようにすることです。これを*オーバープロビジョニング*と呼びます。インスタンスに提供された SSD ベースのインスタンスストアボリュームにはオーバープロビジョニングに対して予約された領域がありません。書き込み増幅を減らすにはボリュームの 10% を未使用の状態のままにし、SSD コントローラーがこれをオーバープロビジョニングに使用できるようにすることをお勧めします。これにより、使用できるストレージは減りますが、ディスクが総容量に近づいた場合でもパフォーマンスを向上させることができます。

TRIM をサポートするインスタンスストアボリュームの場合、TRIM コマンドを使用して、書き込んだデータが不要になったときはいつでも SSD コントローラーに通知することができます。これにより、より多くの空き領域がコントローラーに与えられ、その結果書き込み増幅が減り、パフォーマンスが向上します。詳細については「[インスタンスストアボリュームの TRIM のサポート](#InstanceStoreTrimSupport)」を参照してください。

## インスタンスストアボリュームの TRIM のサポート
<a name="InstanceStoreTrimSupport"></a>

一部のインスタンスタイプではTRIM を持つ SSD ボリュームがサポートされます。詳細については「[EC2 インスタンスのインスタンスストアボリュームの制限](instance-store-volumes.md)」を参照してください。

**注記**  
(Windows インスタンスのみ) Windows Server 2012 R2 を実行するインスタンスはAWS PV ドライバーバージョン 7.3.0 以降の TRIM をサポートしています。以前のバージョンの Windows Server を実行しているインスタンスは TRIM をサポートしていません。

TRIM をサポートしているインスタンスストアボリュームはインスタンスに割り当てられる前に完全に TRIM が実行されます。これらのボリュームはインスタンスの起動時にファイルシステムを使用してフォーマットされないため、マウントして使用する前にボリュームをフォーマットする必要があります。これらのボリュームを迅速に使用できるようにするにはボリュームをフォーマットするときに、TRIM 操作をスキップします。

(Windows インスタンス) 初回フォーマット中に TRIM のサポートを一時的に無効化するには`fsutil behavior set DisableDeleteNotify 1` コマンドを使用します。フォーマットが完了したら、`fsutil behavior set DisableDeleteNotify 0` を使用して TRIM のサポートを再度有効にします。

TRIM をサポートするインスタンスストアボリュームではTRIM コマンドを使用して、書き込んだデータが不要になったときに SSD コントローラーに通知することができます。これにより、より多くの空き領域がコントローラーに与えられ、その結果書き込み増幅が減り、パフォーマンスが向上します。**Linux インスタンス**では`fstrim` コマンドを使用して定期的な TRIM を有効にします。**Windows インスタンス**では`fsutil behavior set DisableDeleteNotify 0` コマンドを使用して、通常のオペレーション中に TRIM サポートが有効になるようにします。