ソリッドステートドライブ/NVMe
関連記事
NVM Express (NVMe) は PCI Express バスから SSD に接続するための規格です。論理デバイスインターフェイスとして NVM Express は新規に設計されています。PCI Express SSD の低遅延と並行性を活かすために、最新の CPU やプラットフォーム、アプリケーションの並列性を複製するように開発されました。
目次
インストール
Linux の NVMe ドライバーはカーネルバージョン 3.3 から含まれています。NVMe デバイスは /dev/nvme*
下に認識されます。
NVMe のユーザースペースツールは nvme-cli または nvme-cli-gitAUR に含まれています。
サポートされているファイルシステム、パフォーマンスの最適化・ディスクの読み書きの最小化などはソリッドステートドライブを見てください。
Management
List all the NVMe SSDs attached with name, serial number, size, LBA format and serial:
# nvme list
List information about a drive and features it supports in a human-friendly way:
# nvme id-ctrl -H /dev/nvme0
List information about a namespace and features it supports:
# nvme id-ns /dev/nvme0n1
Output the NVMe error log page:
# nvme error-log /dev/nvme0
Delete a namespace:
# nvme delete-ns /dev/nvme0n1
Create a new namespace, e.g creating a smaller size namespace to overprovision an SSD for improved endurance, performance, and latency:
# nvme create-ns /dev/nvme0
See nvme help
and nvme(1) for a list of all commands along with a terse description.
SMART
Output the NVMe SMART log page for health status, temp, endurance, and more:
# nvme smart-log /dev/nvme0
NVMe support was added to smartmontools in version 6.5 (available since May 2016 in the official repositories).
Currently implemented features (as taken from the wiki):
- Basic information about controller name, firmware, capacity (
smartctl -i
) - Controller and namespace capabilities (
smartctl -c
) - SMART overall-health self-assessment test result and warnings (
smartctl -H
) - NVMe SMART attributes (
smartctl -A
) - NVMe error log (
smartctl -l error[,NUM]
) - Ability to fetch any nvme log (
smartctl -l nvmelog,N,SIZE
) - The smartd daemon tracks health (
-H
), error count (-l error
) and temperature (-W DIFF,INFO,CRIT
)
See S.M.A.R.T. and the official wiki entry for more information, and see this article for contextual information about the output.
Secure erase
See Solid state drive/Memory cell clearing#NVMe drive.
パフォーマンス
セクタサイズ
Advanced Format#HDD が 4k セクタを使用しているかどうか判断する方法を見てください。
Discard
ext4 や LVM を使用する普通のセットアップではデフォルトで Discard は無効になりますが、ファイルシステムによっては明示的に無効化する必要があります。
SSD メーカーの Intel はファイルシステムレベルで discard を有効にすることを非推奨としており、代わりに fstrim で定期的に TRIM を適用する方法を提案しています [2]。
エアフロー
NVMe SSD は負担時に高熱になることが知られており、特定の閾値に達すると性能が制限されます [3]。
テスト
デバイスの性能テストは 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
は一番低い省電力ステートを無効にし、書き込みエラーを防止します [4][5]。