Menu Close

Red Hat Training

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

第21章 ソリッドステートディスクのデプロイメントガイドライン

ソリッドステートディスク (SSD) は、NAND フラッシュチップを使用してデータを永続的に保存するストレージデバイスです。これは、回転する磁気プラッターにデータを保存する従来のディスクと異なります。SSD では、論理ブロックアドレス (LBA) の全範囲にわたるデータへのアクセス時間は一定ですが、回転メディアを使用する古いディスクでは、広いアドレス範囲にまたがるアクセスパターンにシークコストがかかります。そのため、SSD デバイスのレイテンシーとスループットは改善されています。
使用中のブロック数がディスクの容量に近づくと、パフォーマンスが低下します。パフォーマンスへの影響の度合いはベンダーにより大きく異なります。ただし、すべてのデバイスである程度の低下が発生します。
劣化の問題に対処するために、ホストシステム (Linux カーネルなど) は破棄要求を使用して、指定した範囲のブロックが使用されなくなったことをストレージに通知する場合があります。SSD はこの情報を使用して、ウェアレベリング用の空きブロックを使用して、内部のスペースを解放できます。破棄は、ストレージがストレージプロトコル (ATA または SCSI) の観点からサポートをアドバタイズする場合にのみ発行されます。破棄要求は、ストレージプロトコルに固有のネゴシエートされた破棄コマンド (ATA の場合はTRIMコマンド、UNMAP が設定された WRITE SAME、または SCSI の場合は UNMAP コマンド) を使用してストレージに発行されます。
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 のパーティションユーティリティーはデフォルトを選択します。ただし、デバイスがトポロジー情報をエクスポート しない 場合、Red Hat は、最初のパーティションを 1MB の境界に作成することをお勧めします。
SSD には、ベンダーの選択に応じてさまざまなタイプの TRIM メカニズムがあります。ディスクの初期バージョンは、read コマンドの後に起こりうるデータ漏洩を妥協することで、パフォーマンスを向上させていました。
以下は、TRIMメカニズムのタイプです。
  • 非確定的 TRIM
  • 確定的 TRIM (DRAT)
  • TRIM 後の確定的読み取りゼロ (RZAT)
最初の 2 つのタイプの TRIM メカニズムは、TRIM が異なるデータまたは同じデータを返した後、LBA への read コマンドとしてデータ漏洩を引き起こす可能性があります。RZAT は、read コマンドの後にゼロを返します。Red Hat はデータ漏洩を回避するためにこの TRIM メカニズムを推奨しています。これは SSD でのみ影響を受けます。RZAT メカニズムに対応するディスクを選択します。
使用される TRIM メカニズムのタイプは、ハードウェアの実装によって異なります。ATA の TRIM メカニズムのタイプを見つけるには、hdparm コマンドを使用します。TRIM メカニズムの種類を確認するには、以下の例を参照してください。
# hdparm -I /dev/sda | grep TRIM
Data Set Management TRIM supported (limit 8 block)
Deterministic read data after TRIM
詳細は、man hdparm を参照してください。
論理ボリュームマネージャー (LVM)、デバイスマッパー (DM) ターゲット、および LVM が使用する MD (ソフトウェア RAID) ターゲットは、破棄をサポートします。破棄に対応しない DM ターゲットは、dm-snapshot、dm-crypt、および dm-raid45 だけです。dm-mirror の破棄のサポートは、Red Hat Enterprise Linux 6.1 で追加され、7.0 以降は MD は破棄をサポートします。
SSD で RAID レベル 5 を使用すると、SSD がdiscard を正しく処理しない場合、パフォーマンスが低下します。破棄は、raid456.conf ファイルまたは GRUB2 設定で設定できます。手順は、以下の手順を参照してください。

手順21.1 raid456.conf で破棄を設定する

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

手順21.2 GRUB2 設定での破棄の設定

devices_handle_discard_safely モジュールパラメーターは、 raid456 モジュールで設定されます。GRUB2 設定で破棄を有効にするには、次のコマンドを実行します。
  1. ハードウェアが破棄に対応していることを確認します。
    # cat /sys/block/disk-name/queue/discard_zeroes_data
    戻り値が 1 の場合、破棄はサポートされます。コマンドが 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 では、破棄は ext4 ファイルシステムおよび XFS ファイルシステムでのみサポートされています。
Red Hat Enterprise Linux 6.3 以前では、ext4 ファイルシステムのみが破棄を完全にサポートしています。Red Hat Enterprise Linux 6.4 以降、ext4 と XFS の両方のファイルシステムが破棄を完全にサポートしています。デバイスで破棄コマンドを有効にするには、mount コマンドの discard オプションを使用します。たとえば、破棄を有効にして /dev/sda2/mnt にマウントするには、次を使用します。
# mount -t ext4 -o discard /dev/sda2 /mnt
デフォルトでは、ext4 は、破棄を適切に実装しない可能性のあるデバイスでの問題を主に回避するために、discard コマンドを発行しません。Linux swap コードは、有効なデバイスを破棄するために discard コマンドを発行します。この動作を制御するオプションはありません。

パフォーマンスチューニングの考慮事項

ソリッドステートディスクに関するパフォーマンスチューニングの考慮事項は、『Red Hat Enterprise Linux 7 Performance Tuning Guide』 の Solid-State Disks セクションを参照してください。