Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第20章 ソリッドステートディスクの導入ガイドライン

ソリッドステートディスク (SSD) とは、永続的なデータの格納に NAND フラッシュチップを使用するストレージデバイスを指します。今までのディスクとは大きく異なり、回転する円盤状の磁気記憶媒体にデータを格納します。SSD では、論理ブロックアドレス (LBA) 全体における、データへのアクセス時間は一定になります。一方、回転媒体を使用するこれまでのディスクでは、広範囲のアドレスにまたがるデータにアクセスするため時間がかかります。このように、SSD デバイスの方が待ち時間やスループットに優れています。
使用中のブロック数がディスクの最大容量に近づくにつれ、パフォーマンスが低下してきます。パフォーマンス低下の度合いはデバイスのベンダーごとに大きく異なりますが、いずれのデバイスにもある程度のパフォーマンス低下が見られます。
パフォーマンス低下の問題に対応するため、ホストシステム (Linux カーネルなど) では、特定のブロック範囲が使用されなくなっていることをストレージに知らせる discard 要求を使用できます。SSD はこの情報に基づいて領域を内部で解放し、解放した空きブロックをウェアレベリングに使用することができます。discard 要求が実行できるのは、そのストレージが、ストレージプロトコル (ATA または SCSI) に対応している場合のみです。discard の要求は、ストレージプロトコル固有のネゴシエート済みの discard コマンドによって、ストレージに対して発行します (ATA の場合は TRIM コマンド、SCSI の場合は WRITE SAME (UNMAP を設定)、または UNMAP コマンドになります)。
以下の 2 つの条件を満たす場合は、discard のサポートを有効にすると大変便利です。
  • ファイルシステムに空き容量がある場合。
  • 基盤のストレージデバイスの論理ブロックが、ほぼ書き込み済みである場合。
TRIM の詳細は、『Data Set Management T13 Specifications』 (以下のリンク) を参照してください。
UNMAP の詳細については、『SCSI Block Commands 3 T10 Specification』 (以下のリンク) のセクション 4.7.3.4を参照してください。

注記

市場で販売されているソリッドステートデバイスのすべてが discard に対応している訳ではありません。ソリッドステートデバイスが discard に対応しているかを判別するには、/sys/block/sda/queue/discard_granularity を確認します。

導入に関する考慮事項

SSD の操作および内部のレイアウト上、デバイスのパーティション設定は、内部の 消去ブロックの境界 で行うのが最適です。SSD によりトポロジー情報がエクスポートされると、Red Hat Enterprise Linux 7 のパーティション設定ユーティリティーによって、適切なデフォルト設定が選択されます。
ただし、デバイスがトポロジー情報を エクスポートしない場合は、1 番目のパーティションを 1MB の境界に作成することが推奨されます。
LVM が使用する論理ボリュームマネージャー (LVM)、device-mapper (DM) ターゲット、および MD (ソフトウェア RAID) は discard 要求をサポートします。discard 要求に対応しない DM ターゲットは dm-snapshot、dm-crypt、dm-raid45 です。dm-mirror では、Red Hat Enterprise Linux 6.1 で discard 要求に対応するようになり、MD は、バージョン 7.0 以降で discard 要求に対応するようになりました。
SSD で RAID レベル 5 を使用する場合は、SSD で discard が適切に処理されないとパフォーマンスが低下します。discard は、raid456.conf ファイルまたは GRUB2 設定にします。手順については、以下を参照してください。

手順20.1 raid456.conf に discard の設定

devices_handle_discard_safely モジュールパラメーターが raid456 モジュールに設定されています。raid456.conf ファイルで discard を有効にするには、以下の手順を行います。
  1. ハードウェアが discard をサポートするかどうかを確認するには、以下のコマンドを実行します。
    # cat /sys/block/disk-name/queue/discard_zeroes_data
    戻り値が 1 の場合は discard が有効です。0 が返った場合は、RAID コードがディスクを取り除く必要があるため、さらに時間がかかります。
  2. /etc/modprobe.d/raid456.conf ファイルを作成し、次の行を追加します。
    options raid456 devices_handle_discard_safely=Y
  3. dracut -f コマンドを実行して、初期 ramdisk (initrd) を再構築します。
  4. システムを再起動して、変更を有効にします。

手順20.2 GRUB2 設定に discard を設定します。

devices_handle_discard_safely モジュールパラメーターは raid456 モジュールに設定されています。GRUB2 設定で discard を有効にするには、以下を行います。
  1. ハードウェアが discard をサポートするかどうかを確認するには、以下のコマンドを実行します。
    # cat /sys/block/disk-name/queue/discard_zeroes_data
    戻り値が 1 の場合は discard が有効です。0 が返った場合は、RAID コードがディスクを取り除く必要があるため、さらに時間がかかります。
  2. /etc/default/grub ファイルに次の行を追加します。
    raid456.devices_handle_discard_safely=Y
  3. GRUB2 設定ファイルの場所は、システムが BIOS ファームウェアか UEFI を使っているかで異なります。次のいずれかのコマンドを実行し、GRUB2 設定ファイルを再作成します。
    • BIOS ファームウェアを使用している場合は、以下のコマンドを使用します。
      # grub2-mkconfig -o /boot/grub2/grub.cfg
    • UEFI ファームウェアを使用している場合は、以下のコマンドを使用します。
      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  4. システムを再起動して、変更を有効にします。

注記

Red Hat Enterprise Linux 7 で discard に完全に対応しているファイルシステムは、ext4 と XFS だけです。
Red Hat Enterprise Linux 6.3 以前では、ext4 ファイルシステムだけが discard に完全に対応しています。Red Hat Enterprise Linux 6.4 以降では、ext4 ファイルシステムと XFS ファイルシステムの両方が discard を完全にサポートします。デバイスで discard コマンドを有効にするには、mount コマンドの discard オプションを使用します。たとえば、discard を有効にして /dev/sda2/mnt にマウントするには、以下のコマンドを実行します。
# mount -t ext4 -o discard /dev/sda2 /mnt
ext4 は、デフォルトでは discard コマンドを発行しません。discard コマンドを正しく実装しないデバイスで問題が発生するのを回避するためです。Linux の swap コードは、discard を有効にしたデバイスに対して discard コマンドを発行するため、この動作を制御するオプションはありません。

パフォーマンスチューニングに関する注意点

ソリッドステートディスクでのパフォーマンスチューニングに関する詳細は、『Red Hat Enterprise Linux 7 パフォーマンスチューニングガイド』の「ソリッドステートディスク」セクションを参照してください。