ソリッドステートドライブ/NVMe

提供: ArchWiki
2022年12月8日 (木) 21:45時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎ファームウェアアップデート: 追加)
ナビゲーションに移動 検索に移動

関連記事

NVM Express (NVMe) とは、PCI Express バスで接続されている SSD にアクセスするための規格です。論理デバイスインターフェイスとして、NVM Express は新規に設計されました。PCI Express SSD の低遅延性と並列性を活かし、現代の CPU、プラットフォーム、アプリケーションの並列性を映し出しています。

インストール

Linux の NVMe ドライバはバージョン 3.3 からネイティブにカーネルに含まれています。NVMe デバイスは /dev/nvme* に現れるはずです。

その他のユーザスペース NVMe ツールは nvme-clinvme-cli-gitAUR に含まれています。

サポートされているファイルシステム、パフォーマンスの最適化、ディスクの読み書きの最小化などは ソリッドステートドライブ を見てください。

管理

ノート: この章は [1] を元にしています。

接続されているすべての NVMe SSD の名前、シリアル番号、サイズ、LBAフォーマット、シリアルを一覧表示します:

# nvme list

ドライブとドライブがサポートする機能に関する情報を、人間にわかりやすい方法で一覧表示します:

# nvme id-ctrl -H /dev/nvme0
ヒント: 使用されている略語の意味を理解するには、関連する NVMe 仕様書のリファレンスセクション 5.15.2.2 ("Identify Controller data structure") を参照してください (例: 1.4a 仕様書の172ページの下部)。

名前空間とサポートされている機能に関する情報を一覧表示します:

ノート: 名前空間 (namespace) とは NVMe 技術の構成要素で、ユーザデータを保持します。NVMe コントローラには複数の名前空間を付けることができます。今日のほとんどの NVMe SSD は単一の名前空間しか使用しませんが、マルチテナント型アプリケーション、仮想化、セキュリティの場面においては複数の名前空間が使用されることがあります。
# nvme id-ns /dev/nvme0n1
ヒント: 使用されている略語の意味を理解するには、関連する NVMe 仕様書のリファレンスセクション 5.15.2.1 ("Identify Namespace data structure") を参照してください (例: 1.4a 仕様書の163ページ)。

NVMeエラーログページを表示します:

# nvme error-log /dev/nvme0
ヒント: エラーログにエラーが記録されているか調べるには、エラーカウント (error_count) が0でないエントリを探してください。

名前空間を削除します:

警告: このコマンドは、指定された名前空間のすべてのデータを削除します。注意して使用してください。
# nvme delete-ns /dev/nvme0n1

新しい名前空間を作成します。例えば、より小さなサイズの名前空間を作成して、SSDをオーバープロビジョニングし、耐久性、パフォーマンスおよび遅延を改善します:

# nvme create-ns /dev/nvme0

すべてのコマンドのリストと簡潔な説明については、nvme helpnvme(1) を参照してください。

SMART

健康状態、温度、耐久性などの NVMe SMART ログページを出力します:

# nvme smart-log /dev/nvme0
ヒント: -H オプションを使うと更に多くの情報を出力できます。例: nvme smart-log -H /dev/nvme0

NVMe サポートは smartmontools バージョン 6.5 で追加されました。

ノート: smartmontools の公式 wiki では、このサポートは実験的であると報告されています。

現在実装されている機能は (wiki から拝借):

  • コントローラ名、ファームウェア、容量に関する基本的な情報 (smartctl -i)
  • コントローラと名前空間の機能 (smartctl -c)
  • SMART の総合的健康状態の自己評価テストの結果と警告 (smartctl -H)
  • NVMe の SMART 属性 (smartctl -A)
  • NVMe のエラーログ (smartctl -l error[,NUM])
  • nvme ログをフェッチする機能 (smartctl -l nvmelog,N,SIZE)
  • smartd デーモンによる健康状態 (-H)、エラーカウント (-l error)、温度 (-W DIFF,INFO,CRIT) の追跡

詳細は S.M.A.R.T.公式 wiki エントリ を参照してください。コマンドの出力に関する文脈情報は この記事 を見てください。

Secure erase

ソリッドステートドライブ/メモリセルの消去#NVMe ドライブ を見てください。

ファームウェアアップデート

一般

ファームウェアは nvme-cli を使って管理できます。利用可能なスロットを出力し、スロット1が読み取り専用になっているかどうかを確認するには:

# nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x11
frs1 : 0x32303132345a3553 (S5Z42102)
frs2 : 0x32303132345a3553 (S5Z42102)
# nvme id-ctrl /dev/nvme0 -H | grep Firmware
[0:0] : 0	Firmware Slot 1 Read/Write

ファームウェアをダウンロードし、指定されたスロットにコミットしてください。下記の例では、ファームウェアはまずアクティブ化されずにコミットされます (-a 0)。次に、既存のイメージをアクティベーションします (-a 2)。ファームウェアコミットの action 値に関する詳細は、NVMe 仕様書を参照してください。

# nvme fw-download -f S5Z42_fw_S5Z42105.bin /dev/nvme0
Firmware download success
# nvme fw-commit -s 2 -a 0 /dev/nvme0
Success committing firmware action:0 slot:2
# nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x21
frs1 : 0x32303132345a3553 (S5Z42102)
frs2 : 0x35303132345a3553 (S5Z42105)
# nvme fw-commit -s 2 -a 2 /dev/nvme0
Success committing firmware action:2 slot:2

最後に、コントローラをリセットし、新しいファームウェアをロードしてください:

# echo 1 > /sys/class/nvme/nvme0/reset_controller

Intel

「インテル®メモリおよびストレージツール (インテル® MAS) は、インテル®SSDおよび®インテルのオプタン™メモリデバイス用のドライブ管理ツールであり、Windows*、Linux*、およびESXi*でサポートされています。[...] このツールを使用して、PCIe*-/NVMe*-および SATA ベースのクライアントおよびデータセンターインテル®SSDデバイスを管理し、最新のファームウェアにアップデートします。」[2]

solidigm-sst-storage-tool-cliAUR/intel-mas-cli-toolAURインストールし、あなたのドライブに利用可能なアップデートがあるかチェックしてください:

# intelmas show -intelssd
- Intel SSD 660p Series redacted -

Capacity : 512.11 GB
CurrentPercent : Property not found
DevicePath : /dev/nvme0n1
DeviceStatus : Healthy
Firmware : 002C
FirmwareUpdateAvailable : 004C
Index : 0
MaximumLBA : 1000215215
ModelNumber : INTEL SSDPEKNW512G8
ProductFamily : Intel SSD 660p Series
SMARTEnabled : True
SectorDataSize : 512
SerialNumber : redacted

ある場合は、以下のように load コマンドを実行してください:

# intelmas load -intelssd 0
WARNING! You have selected to update the drives firmware! 
Proceed with the update? (Y|N): Y
Checking for firmware update...

- Intel SSD 660p Series redacted -

Status : Firmware updated successfully. Please reboot the system.

Kingston

Kingston はウェブサイトでの個別のファームウェアダウンロードを提供しておらず、その代わりに Windows のみのユーティリティを紹介しています。ファームウェアファイルは、ファームウェアのリビジョンに基づく予測可能な命名規則を使用しているようです:

https://media.kingston.com/support/downloads/S5Z42105.zip

次に、一般的なフラッシュの手順に進んでください。

パフォーマンス

セクタサイズ

Advanced Format#HDD が 4k セクタを使用しているかどうか判断する方法を見てください。

Discard

ノート: SSD では定期的な TRIM の適用を選択できる (推奨しません) のに反して、NVMe デバイスでは discard は実行するべきではありません

ext4LVM を使用する普通のセットアップではデフォルトで Discard は無効になりますが、ファイルシステムによっては明示的に無効化する必要があります。

SSD メーカーの Intel はファイルシステムレベルで discard を有効にすることを非推奨としており、代わりに fstrim で定期的に TRIM を適用する方法を提案しています [3]

エアフロー

NVMe SSD は負担時に高熱になることが知られており、特定の閾値に達すると性能が制限されます [4]

テスト

デバイスの性能テストは hdparm で実行できます:

# hdparm -Tt --direct /dev/nvme0n1

省電力 APST

NVME 省電力パッチ

Andy Lutomirski は Linux における NVMe デバイスの省電力機能を修正するパッチセットをリリースしています。メインラインカーネル v4.11 でパッチはマージされました。

NVME の電源管理が動作しているかテストするには、nvme-cli をインストールして # nvme get-feature -f 0x0c -H /dev/nvme[0-9] を実行してみてください:

# nvme get-feature -f 0x0c -H /dev/nvme0
get-feature:0xc (Autonomous Power State Transition), Current value:0x000001
        Autonomous Power State Transition Enable (APSTE): Enabled
        Auto PST Entries        .................

...

ASPT が有効になっている場合 Autonomous Power State Transition Enable (APSTE): Enabled と出力されます。表のエントリは各ステートに移行するときの待機時間を示しています。

ASPT が有効になっているのにステートが表に表示されない場合、高遅延のせいでデフォルトで有効になっていない可能性があります。# nvme id-ctrl /dev/nvme[0-9] を使うことで NVME コントローラの未使用のステートを確認できます。ステートの遅延の合計 (enlat + xlat) が 25000 (25ms) よりも大きい場合、有効にするにはブートパラメータを使って nvme_core カーネルモジュールdefault_ps_max_latency_us オプションで最低でもこれよりも高い値を渡す必要があります。ASPT が有効になり # nvme get-feature の表にエントリが表示されるようになります。

Linux 4.10 における Samsung ドライブのエラー

Linux 4.10 では、ドライブのエラーが発生してシステムが不安定になることがあります。省電力状態となったときにドライブが使えなくなるようです。カーネルパラメータ nvme_core.default_ps_max_latency_us=5500 は一番低い省電力ステートを無効にし、書き込みエラーを防止します [5][6]

参照