家族向けに「つよつよPC」を用意する必要があったため、AMD Ryzen 7 5800Xを購入してみました。今年最後の連載では、年末年始にPCを新調する読者に向けて、 Windowsをインストールする前の動作確認も兼ねたUbuntuでシステム情報を収集したり、動作確認を行う方法を学んでみます。
久しぶりの自作PC
家族向けのPCはもともと2015年ぐらいに購入したIntel Core i7-6700ベースのSkylake世代のマシンでした。2、3年前には「そろそろ買い替えかな」という状況ではあったものの、家庭の事情やら半導体の事情やらでリプレースが繰り延べになっていたのです。
そして今回自作したPCの主なスペックは次のとおりです。リプレースを数年延期していたこともあったため、ほんのちょっとだけ豪華な構成にしてみました。
CPU
AMD
Ryzen 7 5800X
8C/16T 105W
CPUクーラー
NZXT
Kraken X53
水冷
メモリー
Crucial
CT2K32G4DFD832A
DDR4-3200 32GBx2
M/B
ASRock
B550 Steel Legend
ATX
ストレージ
Western Digital
SN750 SE M.2 NVMe 1TB
PCIe 4.0x4
GPU
玄人志向
GeForce GTX 1050Ti GF-GTX1050Ti-E4GB/SF/P2
電源
Fractal Design
Ion Gold 850W
ケース
Fractal Design
Define 7 Black Solid
どれも定番みたいな構成ですね。GPUだけ「GeForce GTX 1050Ti」と、2016年ごろのだいぶ古い型番です。そもそも全体的に予算オーバー気味で「GPUは型落ちのものを」という想定でした。しかしながらいざ調べてみると、型落ち品自体がほぼ市場に存在せず、新しい型番のものも軒並みすごい高くなっていたために、苦肉の策で見つけた製品です[1] 。
[1] ちなみに製品自体は2021年に新規に発売されたものらしいです。つまり5年前・2世代前のGPUを型番を変えて、なおかつ定価を5割増にして販売してもそれなりに需要があると見込める状況だと思われます。
なお家族のPCの使い方を考えると、GPUはそこまで強いものである必要はなく、要件としては「リトルウィッチノベタがプレイできればいい 」という話でした。よって1050Tiでも問題はないものと考えています。
というわけでこのマシンにWindowsをインストールする前に実施した、各種動作確認のための方法を紹介していきましょう。ちなみにストレージのテストやベンチマーク以外の「情報収集」に関しては、Live環境でも動くはずです。よってWindowsインストール済みのマシンであっても、USBスティック経由でUbuntuを起動し、ちょっとした動作確認やデバイスの情報収集ぐらいは可能だと思ってください。
Ubuntuをインストールしたらやるべきこと
さてPCを組み立てたら、実際に使い始める前にいろいろな動作確認が必要です。本連載ではこれまでにもさまざまなPCにUbuntuをインストールしてきました。直近のものをリストアップするだけでも、次のような記事が見つかります。
実際のところいわゆる「PC」と呼ばれることが多い、amd64アーキテクチャーのCPUが搭載されてたマシンなら、Ubuntuが動かないことはまずありません。使い勝手が良いかどうかは別にして「とりあえず起動する」ぐらいまではたどり着けることでしょう。
よって確認すべきは「きちんと動いているか」「 きちんと性能がでているか」「 周辺機器はどうか」といった部分になります。「 最低限問題はないよね?」という意味においては第628回の「PCの初期動作を確認する 」がよくまとまっています。
まずはこの記事を元に、テストを行うと良いでしょう。少なくともメモリーテストだけは実施するようにしておきましょう。それだけで「よくわからないけどたまにPCが落ちる」みたいな症状の多くを回避できます[2] 。
[2] 「メモリーの特定の領域が怪しい」ケースだと、カーネルの起動パラメーターに「memtest=64
」とか指定すると、起動時にカーネルがメモリーテストを行ってくれます。テストエラーが発生した場合は「Bad RAM detected」と表示し、その領域を予約領域として除外してくれますので、「 とりあえず怪しいところを除外して動かしたい」という用途なら使えるかもしれません。ただしその手のメモリーは、だいたい他のところもおかしくなることですし、そもそもカーネルのコードがロードされた領域はテストできません。あくまで緊急回避的な方法と考えておきましょう。
また今回は紹介しませんが、第696回の「UbuntuでもWi-Fi 6を使用する 」では、ネットワークのベンチマーク方法が紹介されています。最近のOSはネットワーク機能も重要なので、Ubuntuが起動したらネットワークテストをまず初めて見ると良いかもしれません。
システムの情報を取得する
Ubuntuを起動したらまずシステムの情報をきちんと取得できているか確認しましょう。新しめの機材だと、まずここで弾かれます。ただし「情報を表示できないだけ」で問題なく動くケースも多々ありますので、表示されないだけなら、そこまで心配する必要はないでしょう。気をつけるべきは「正しく表示されないデバイス」は、「 Ubuntuからすると新しすぎるか利用者が少ないデバイスである」ために「何がしかの機能が動かない可能性がある」という点です。要するに今後の調査においての、注意喚起として使えるのです。
情報を取得する際は、「 最初からインストールされているコマンドで情報を取得する方法」を知っておくことが重要です。「 情報を取得したいけれどもそもそもネットに繋がらない」とか「デスクトップが立ち上がらないのでCLIでなんとかしないといけない」というケースも稀に存在するからです[3] 。その手のツールとしては、Ubuntuデスクトップならシステム設定の「このシステムについて」を確認すれば基本的な情報は掲載されています。サーバーなら、lshw
コマンドやcpuinfo
などが使えるでしょう。dmesg
の中身にもそれなりに有用な情報が残っています。
[3] 「稀」とは言いましたが、ちょっと変わったコンピューターにインストールするようになると日常的に遭遇します。たとえかなり制約されたコマンドしかなくてもCLIに到達するだけで御の字という世界もあるのです。
よって新しいマシンを入手したら、これらのツールを使って記録を取るクセをつけておくと、その後トラブルに遭遇したときに役に立つかもしれません。とはいえこれらのツールは表示が若干味気ないです。どうせなら「それっぽい」表示ができるツールも試してみたいところ。そこでいくつか「見栄えのする」ツールも紹介しましょう。
図1 GNOMEのシステム設定とneofetch、cpu-xで情報を表示した様子
CLIでのシステム情報の定番「neofetch」
neofetch はシステム情報を取得し、端末に「いい感じのフォーマット」で表示してくれるbashスクリプトです。
LinuxだけでなくWindowsやmacOSをはじめとしたさまざまなシステムに対応しているため、neofetchをインストールした上で実行結果をスクリーンショットに撮っておけば、おおよそどんなシステムで動いているかわかるようになっています。
$ sudo apt install neofetch
図2 neofetchはOSのロゴもアスキーアートで表示してくれる
ロゴ画像も含めて、表示内容をいろいろカスタマイズできるため、興味のある人はneofetchのWiki を一通り読んでおくと良いでしょう。
ちなみにC言語で記述され高速なsysfetch やPOSIXシェルで作られNerdfontsを活用したNerdFetch なども存在します。残念ながらどちらもパッケージ化はされていないようです。
CPU-Zライクなマシン情報の表示「CPU-X」
CPU-X はCPUやマザーボード・GPUなどの情報を表示したり、簡単なベンチマークを行ってくれるGUI/CLIツールです。Windowsユーザーであれば、Linux版の「CPU-Z」と言えばわかりやすいでしょうか。
$ sudo apt install cpu-x
あとはアプリケーションから「cpu-x」を検索して表示するだけです。とてもCPU-ZっぽいUIが表示されます。
図3 CPUの情報
図4 キャッシュの情報
図5 マザーボードの情報
図6 システムの情報
図7 GPUの情報
図8 ベンチマーク
起動時は一般ユーザーの権限で取得できる情報のみが表示されます。画面右下の「デーモンを開始する」をクリックすると、パスワードの問い合わせが表示され、最終的に管理者権限が必要な情報も表示されるようになります。
図9 デーモンを開始したあとの結果。他にも「メモリー」というタブが追加される
ちなみにCPU-Xは、ncursesを利用したCLI表示にも対応しています。端末から「--ncurses
」オプションを付けてcpu-x
コマンドを実行すると、端末上にCPU-Xの画面が表示されます。カーソルキーでタブの移動、qキーでアプリケーションの終了です。
図10 CLI版のCPU-X
CPU-Xそのものは、2021年の1月に「新機能はもう追加しない」というステータスになりました。ただし引き続き不具合対応は行われる予定ですし、現時点でも十分な機能を持っているため、今後も問題なく使えることでしょう。
出力量を調整可能な情報表示ツール「inxi」
inxi はCLI用のシステム情報表示ツールです。これだけだとneofetchと機能が被ってしまいますが、inxiはより大量の情報を収集できる点が強みとなっています。
neofetchはどちらかというと他のユーザーに向けて、システム情報を表示するような作りになっています。つまり端末で表示された結果のスクリーンショットを撮って、SNSやブログに掲載するような用途です。それに対して、inxiは開発者向けにより効率よくシステム情報を共有することに注力しています。この場合、情報の粒度を決めて、メールやチャット等に文字列として貼り付ける用途が考えられます。
後者のケースではdmesgやlshwがその機能を担っているものの、どちらもそれ以外の情報も表示されているため、「 まずは必要な情報を検索し、抽出する」という工程が必要です。inxiはそのあたりをツール側で行ってしまおうという考え方になります[4] 。
$ sudo apt install inxi
$ inxi
CPU: 8-Core AMD Ryzen 7 5800X (-MT MCP-) speed/min/max: 2874/2200/3800 MHz Kernel: 5.13.0-22-generic x86_64 Up: 7d 3h 15m
Mem: 3013.1/64236.0 MiB (4.7%) Storage: 931.51 GiB (19.3% used) Procs: 393 Shell: Bash inxi: 3.3.06
引数を何も指定せずに実行すると、必要最低限の情報しか表示しません。inxiには多種多様なオプションが存在し、それで表示する項目を調整できます。しかしながら、あまりにオプションが多すぎて何を指定すれば良いかわからないかもしれません。そこで便利なのが「-v
」オプションです。-v
の後ろの数字を0から増やしていくことで表示する情報を順次増やしていきます。これを参考に自分にとってバランスの良いオプションを模索すると良いでしょう。
$ sudo inxi -v 6 -c 10
System: Host: ryzeon Kernel: 5.13.0-22-generic x86_64 bits: 64 compiler: gcc v: 11.2.0 Console: tty pts/0 wm: gnome-shell
DM: GDM3 Distro: Ubuntu 21.10 (Impish Indri)
Machine: Type: Desktop Mobo: ASRock model: B550 Steel Legend serial: HQ0201216800884 UEFI: American Megatrends v: P1.80
date: 12/01/2020
Battery: Device-1: hidpp_battery_0 model: Logitech Wireless Touch Keyboard K400 serial: 400e-9a-6f-a6-3a
charge: 55% (should be ignored) status: Discharging
Memory: RAM: total: 62.73 GiB used: 2.94 GiB (4.7%)
Array-1: capacity: 128 GiB slots: 4 EC: None max-module-size: 32 GiB note: est.
Device-1: DIMM 0 size: No Module Installed
Device-2: DIMM 1 size: 32 GiB speed: 3200 MT/s type: DDR4 manufacturer: Crucial part-no: CT32G4DFD832A.C16FE
Device-3: DIMM 0 size: No Module Installed
Device-4: DIMM 1 size: 32 GiB speed: 3200 MT/s type: DDR4 manufacturer: Crucial part-no: CT32G4DFD832A.C16FE
CPU: Info: 8-Core model: AMD Ryzen 7 5800X bits: 64 type: MT MCP arch: Zen 3 rev: 0 cache: L1: 512 KiB L2: 4 MiB
L3: 32 MiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm bogomips: 121372
Speed: 2870 MHz min/max: 2200/3800 MHz boost: enabled Core speeds (MHz): 1: 2870 2: 3193 3: 2872 4: 2873 5: 3595
6: 3589 7: 3754 8: 2870 9: 2876 10: 2852 11: 2834 12: 2870 13: 3575 14: 2869 15: 2866 16: 2873
Graphics: Device-1: NVIDIA GP107 [GeForce GTX 1050 Ti] driver: nouveau v: kernel bus-ID: 09:00.0 chip-ID: 10de:1c82
Display: server: X.Org 1.21.1.2 compositor: gnome-shell driver: loaded: nouveau note: n/a (using device driver)
resolution: 1920x2160~60Hz s-dpi: 96
OpenGL: renderer: NV137 v: 4.3 Mesa 21.2.2 direct render: Yes
Audio: Device-1: NVIDIA GP107GL High Definition Audio driver: snd_hda_intel v: kernel bus-ID: 09:00.1 chip-ID: 10de:0fb9
Device-2: Advanced Micro Devices [AMD] Starship/Matisse HD Audio vendor: ASRock driver: snd_hda_intel v: kernel
bus-ID: 0b:00.4 chip-ID: 1022:1487
Sound Server-1: ALSA v: k5.13.0-22-generic running: yes
Sound Server-2: PulseAudio v: 15.0 running: yes
Sound Server-3: PipeWire v: 0.3.32 running: yes
Network: Device-1: Realtek RTL8125 2.5GbE vendor: ASRock driver: r8169 v: kernel port: f000 bus-ID: 07:00.0
chip-ID: 10ec:8125
IF: enp7s0 state: up speed: 1000 Mbps duplex: full mac: 70:85:c2:9b:b2:33
Drives: Local Storage: total: 931.51 GiB used: 179.54 GiB (19.3%)
ID-1: /dev/nvme0n1 vendor: Western Digital model: WD BLACK SN750 SE 1TB size: 931.51 GiB speed: 63.2 Gb/s lanes: 4
serial: 2136GK454105 temp: 21.9 C
Message: No optical or floppy data found.
Partition: ID-1: / size: 915.32 GiB used: 179.54 GiB (19.6%) fs: ext4 dev: /dev/nvme0n1p2 label: N/A
uuid: 5dc82178-497d-45ba-8b02-7345046a5038
ID-2: /boot/efi size: 511 MiB used: 5.2 MiB (1.0%) fs: vfat dev: /dev/nvme0n1p1 label: N/A uuid: 04F4-5F0C
Swap: ID-1: swap-1 type: file size: 2 GiB used: 1.65 GiB (82.5%) priority: -2 file: /swapfile
Unmounted: Message: No unmounted partitions found.
USB: Hub-1: 1-0:1 info: Full speed (or root) Hub ports: 10 rev: 2.0 speed: 480 Mb/s chip-ID: 1d6b:0002
Hub-2: 1-7:2 info: Genesys Logic Hub ports: 4 rev: 2.0 speed: 480 Mb/s chip-ID: 05e3:0610
Device-1: 1-7.4:4 info: NZXT USB Device type: HID driver: hid-generic,usbhid rev: 2.0 speed: 12 Mb/s
chip-ID: 1e71:2007
Device-2: 1-8:3 info: Logitech Unifying Receiver type: Keyboard,Mouse,HID driver: logitech-djreceiver,usbhid
rev: 2.0 speed: 12 Mb/s chip-ID: 046d:c52b
Device-3: 1-10:5 info: ASRock LED Controller type: HID driver: hid-generic,usbhid rev: 1.1 speed: 12 Mb/s
chip-ID: 26ce:01a2
Hub-3: 2-0:1 info: Full speed (or root) Hub ports: 4 rev: 3.1 speed: 10 Gb/s chip-ID: 1d6b:0003
Hub-4: 3-0:1 info: Full speed (or root) Hub ports: 4 rev: 2.0 speed: 480 Mb/s chip-ID: 1d6b:0002
Hub-5: 4-0:1 info: Full speed (or root) Hub ports: 4 rev: 3.1 speed: 10 Gb/s chip-ID: 1d6b:0003
Sensors: System Temperatures: cpu: 23.2 C mobo: 22.0 C gpu: nouveau temp: 25.0 C
Fan Speeds (RPM): fan-1: 0 fan-2: 0 fan-3: 857 fan-4: 0 fan-5: 0 fan-6: 721 fan-7: 721
Info: Processes: 394 Uptime: 7d 3h 15m Init: systemd v: 248 runlevel: 5 Compilers: gcc: 11.2.0 alt: 11 clang: 13.0.0-2
Packages: 2545 apt: 2534 snap: 11 Shell: Bash v: 5.1.8 running-in: gnome-terminal inxi: 3.3.06
ちなみにオプションによっては管理者権限がないと取得できないものもあります。たとえばメモリーの情報を表示する「-m
」オプションは管理者権限なしに実行すると「Unable to run dmidecode. Root privileges required.
」と表示されます。詳細なシステム情報を取得したい場合は、sudo
を使って管理者権限有りで実行してください。
上記のように-c
オプションでカラーテーマを変更できます。inxiの標準のカラーテーマ(0番)は、UbuntuのGNOME端末だとコントラストが低く、見づらいため「-c 10
」あたりを設定するのがおすすめです。
システムのモニタリング
動作確認やベンチマークを行う際は、温度センサーなどをモニタリングしながら実施しましょう。これによりサーマルスロットリングなどによる性能低下が起きたかどうかを視覚的に把握でいます。
GUIで各種センサーを表示してくれる「psensor」
Ubuntuデスクトップには最初から「システムモニター」がインストールされています。これを使えば、CPUやメモリー、ネットワークの使用率をリアルタイムに表示してくれます。これだけでもある程度のことはわかるものの、できれば温度センサーの情報は取得したいところです。GUIでの定番は「psensor 」です。
$ sudo apt install lm-sensors psensor
まず最初に、温度や電圧、ファンの回転速度センサーの情報を取得できるようにしておきましょう。これは一般的に「lm-sensors」パッケージに含まれる、sensors-detect
コマンドを使います。温度や電圧などのデバイスはi2cデバイスとして実装されていることが多いです。しかしながらACPIテーブルにこれらのデバイスがリストアップされておらず、必要なモジュールがロードされていないこともよくあります。そこでsensors-detect
コマンドを用いて、システム上の監視対象のデバイスをリストアップし、必要なモジュールをロードしておきましょう。
$ sudo sensors-detect
(中略)
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
nct6775
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Unloading cpuid... OK
途中でいくつか質問されますが、基本的にEnterを押して設定された回答を選んでおけば大丈夫です。最後の「cut here
」の間の内容がロードに必要なモジュールのリストです。一時的にロードしてみたいだけなら「sudo modprobe モジュール名
」を実行すれば完了です。ただし次回再起動後はロードされていない状態で起動しています。
起動時に常にロードしたい場合は、/etc/modules-load.d/sensors.conf
などの適当な名前のファイルを作ってそこに記載しておきましょう。設定したら次のコマンドを実行することで、自動的にロードされます。
$ sudo systemctl restart systemd-modules-load.service
sensors
コマンドを使うと、その時点でのセンサー情報を表示してくれます。
$ sensors
nct6798-isa-0290
Adapter: ISA adapter
in0: 200.00 mV (min = +0.00 V, max = +1.74 V)
in1: 1.69 V (min = +0.00 V, max = +0.00 V) ALARM
in2: 3.44 V (min = +0.00 V, max = +0.00 V) ALARM
in3: 3.33 V (min = +0.00 V, max = +0.00 V) ALARM
in4: 1.83 V (min = +0.00 V, max = +0.00 V) ALARM
in5: 992.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in6: 1.20 V (min = +0.00 V, max = +0.00 V) ALARM
in7: 3.44 V (min = +0.00 V, max = +0.00 V) ALARM
in8: 3.25 V (min = +0.00 V, max = +0.00 V) ALARM
in9: 912.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in10: 1.02 V (min = +0.00 V, max = +0.00 V) ALARM
in11: 624.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in12: 1.08 V (min = +0.00 V, max = +0.00 V) ALARM
in13: 912.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in14: 912.00 mV (min = +0.00 V, max = +0.00 V) ALARM
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 867 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)
fan6: 719 RPM (min = 0 RPM)
fan7: 733 RPM (min = 0 RPM)
SYSTIN: +22.0°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
CPUTIN: +20.0°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
AUXTIN0: +15.0°C sensor = thermistor
AUXTIN1: -62.0°C sensor = thermistor
AUXTIN2: +13.0°C sensor = thermistor
AUXTIN3: +31.0°C sensor = thermistor
SMBUSMASTER 0: +20.0°C
PCH_CHIP_CPU_MAX_TEMP: +0.0°C
PCH_CHIP_TEMP: +0.0°C
PCH_CPU_TEMP: +0.0°C
intrusion0: ALARM
intrusion1: ALARM
beep_enable: disabled
nouveau-pci-0900
Adapter: PCI adapter
temp1: +25.0°C (high = +95.0°C, hyst = +3.0°C)
(crit = +105.0°C, hyst = +5.0°C)
(emerg = +135.0°C, hyst = +5.0°C)
nvme-pci-0100
Adapter: PCI adapter
Composite: +21.9°C (low = -0.1°C, high = +83.8°C)
(crit = +87.8°C)
Sensor 1: +26.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +21.9°C (low = -273.1°C, high = +65261.8°C)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +20.2°C
Tdie: +20.2°C
Tccd1: +21.0°C
センサーの情報を取得できるようになったら、あとはpsensorを起動するだけです。もしかすると最初はセンサー名しか表示されないかもしれません。一旦ウィンドウを最大化するとグラフ表示部分が表示されるようになります。それでも表示されない場合は、センサーリストの左端(ウィンドウの左端)あたりをクリックして左右にドラッグしてみると、グラフ表示部分が出てきます。
図11 psensorによる温度・電圧・ファンのモニタリング
データはリアルタイムで取得しているのですが、描画のインターバルは長めです。すぐに再描画したい場合は、グラフ領域を何回かクリックしてみると良いでしょう。
Web UIも備えたCLI版モニタリングツール「glances」
glances はtopライクなUIを備えた、高機能なモニタリングツールです。topのようなプロセスやメモリーだけでなく、各種センサー、割り込み、ネットワークなどさまざな情報を取得・表示してくれます。
Ubuntuのリポジトリだけでなく、snapパッケージも用意されているため、好きなほうを使うと良いでしょう。
$ sudo apt install glances
あらかじめ前述の「sensors-detect
」コマンドを用いて、必要なモジュールをロードしておきましょう。あとはglances
コマンドを実行するだけです。
$ glances
図12 glancesによるCLIでのモニタリング
glancesにはプラグイン機能が存在し、「 --enable-plugins
」にカンマで複数つなげてプラグインを有効化できます。たとえばセンサー系は最初は無効化されているため、次のように実行することで表示されるようになります。
$ glances --enable-plugins sensors
有効化できるプラグインは「glances --modules-list
」で確認できます。
glancesはWeb UIも備えています。「 glances -w
」と実行するとURLが表示されるので、ウェブブラウザーでそこにアクセスしてみましょう。キーボードショートカットはCLI版と同じです。
図13 glancesによるWebでのモニタリング
またglancesには、さまざまなフォーマット・サービス向けにログを出力する機能が存在します。バックグラウンドで動かしながら、他のデバイスで状態を確認するような使い方も可能なのです。
S.M.A.R.T.によるストレージの監視
ストレージの監視方法としては「S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology) 」を利用した方法が定番です。
Ubuntuデスクトップに最初から入っているGNOME DisksはS.M.A.R.T.の取得に対応しています。ただし、NVMe SSDだけは未対応です 。またsmartmontoolsのGUIフロントエンドとして実装されているgsmartcontrolもNVMe SSDの情報は表示できません 。
このため、2021年時点ではUbuntuだとNVMe SSDのS.M.A.R.T.はCLIでしか取得できないと考えたほうが良さそうです。おそらく簡単にインストールできるもののうち、もっとも実装が進んでいるのがsmartmontools です。
$ sudo apt install smartmontools
データの取得はsmartctl
コマンドを利用します。
$ sudo smartctl --all /dev/nvme0n1
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.13.0-22-generic] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Number: WD_BLACK SN750 SE 1TB
Serial Number: 2136GK454105
Firmware Version: 711130WD
PCI Vendor/Subsystem ID: 0x15b7
IEEE OUI Identifier: 0x001b44
Total NVM Capacity: 1,000,204,886,016 [1.00 TB]
Unallocated NVM Capacity: 0
Controller ID: 0
NVMe Version: 1.4
Number of Namespaces: 1
Namespace 1 Size/Capacity: 1,000,204,886,016 [1.00 TB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 001b44 4a4951e30d
Local Time is: Mon Dec 20 00:16:33 2021 JST
Firmware Updates (0x12): 1 Slot, no Reset required
Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test
Optional NVM Commands (0x005f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
Log Page Attributes (0x1e): Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Pers_Ev_Lg
Maximum Data Transfer Size: 64 Pages
Warning Comp. Temp. Threshold: 84 Celsius
Critical Comp. Temp. Threshold: 88 Celsius
Namespace 1 Features (0x02): NA_Fields
Supported Power States
St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat
0 + 5.60W 5.00W - 0 0 0 0 0 0
1 + 2.70W 3.00W - 1 1 1 1 0 0
2 + 1.90W 2.00W - 2 2 2 2 0 0
3 - 0.0370W - - 3 3 3 3 1900 1000
4 - 0.0050W - - 4 4 4 4 16200 39000
Supported LBA Sizes (NSID 0x1)
Id Fmt Data Metadt Rel_Perf
0 + 512 0 1
1 - 4096 0 0
=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 22 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 1%
Data Units Read: 23,504,501 [12.0 TB]
Data Units Written: 80,158,658 [41.0 TB]
Host Read Commands: 245,508,577
Host Write Commands: 297,549,057
Controller Busy Time: 2,167
Power Cycles: 16
Power On Hours: 71
Unsafe Shutdowns: 9
Media and Data Integrity Errors: 0
Error Information Log Entries: 27
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Temperature Sensor 1: 26 Celsius
Temperature Sensor 2: 22 Celsius
Error Information (NVMe Log 0x01, 16 of 63 entries)
No Errors Logged
S.M.A.R.T.はいろいろとパラメーターが存在するため、きちんと理解するにはそれなりの知識が必要です。NVMe SSD固有の話のうち、わかりやすそうなのは「Percentage Used」でしょうか。これはメーカーが想定する寿命をどれくらい消費したかを示します。100%になると寿命です。ちなみに100を超える値も可能なようです。なお100を超えても動くことはありますが、メーカーの想定している寿命は過ぎているため、いつ故障してもおかしくないぐらいに思っておくと良いでしょう。
ベンチマークの実施
システムの情報を取得する方法を確認したら、あとはベンチマーク等で負荷をかけつつ動作を確認するだけです。ベンチマークの方法としては、過去の記事に掲載したような「LibreOfficeやカーネルのような大きめのプロジェクトをコンパイルしてみる」とか「Phoronix Test Suite ようなベンチマークツールを動かす」など、いくつかの方法があります。
ちなみにストレージのベンチマークはCLI向けだとfio
がよく使われます。もしGUIで実施したいなら最初から入っているGNOME Disksの他に、Windows向けのベンチマークでは有名なCrystalDiskMarkっぽいUIを備えたKDiskMark も存在します。KDiskMarkはsnapパッケージとしてインストール可能です。
$ sudo snap install kdiskmark
図14 KDiskMarkによる1GiBデータのMB/s
図15 KDiskMarkによる1GiBデータのレイテンシー
図16 KDiskMarkによる64GiBデータのMB/s
図17 KDiskMarkによる64GiBデータのレイテンシー
今回のWestern DigitalのSN750 SEは、上位機種のSN850に対してPCIe 4.0対応はそのままに、DRAMキャッシュを省いてコントローラーを含めた価格を安くしたモデルです。要はキャッシュの代わりにホストのメモリーを利用して(Host Memory Buffer) 、PCIe 4.0の帯域で性能を稼ごうというポリシーのようです。結果的に上位モデルよりはそれなりに安いものの、性能自体もそれなりという代物になりました[5] 。
[5] Host Memory Buffer(HMB)の最大サイズはnvmeモジュールの「max_host_mem_size_mb
」パラメーターで変更可能です。また、実際に指定できるサイズはSSD側で決まります。実際に設定された値は「sudo dmesg | grep host memory buffer
」で確認できます。ベンチマークをとるなら、「 Host Memory Bufferを超えるサイズを読み書きするときはどうなるのか」も見てみるといいかもしれません。
ちなみにSSDは空き容量が減るほど性能が落ちます。この手のベンチマークを取るときは、だいたい購入直後のストレージがほぼ空っぽのタイミングであるため、ベンチマークの結果はカタログスペックと遜色ない値になります。そこで、試しに空き容量を減らしてみるとどうなるかも確認してみましょう[6] 。
今回は1TiBのSSDなので、10GiBのファイルを80個作ってみることにします。これで800GiBなのでファイルシステムのメタデータなどを無視するとおよそ80%消費したことになります。
$ dd if=/dev/urandom of=temp/10G.dat bs=1M count=10240
$ for i in $(seq 80); do cp temp/10G.dat temp/10G-$i.dat; done
$ sudo sync
この状態で計測した結果が次のとおりです。小さいサイズの書き込み性能が1/4近くと劇的に落ちていることがわかりますね。
図18 残容量10%程度でのKDiskMarkによる1GiBデータのMB/s
図19 残容量10%程度でのKDiskMarkによる1GiBデータのレイテンシー
ちなみにファイルを削除しただけだと性能は元に戻りません 。これはSSD側では実際には何も削除されていないためです。一般的にはfstrimコマンドを使って、未使用のブロックを削除するようNANDコントローラーに支持するコマンドが使われます。
$ sudo fstrim -av
ただし今回の計測方法だと、これでも性能は戻りませんでした。おそらくNVMe SSDで一番確実なのは、Secure Eraseする方法です。UbuntuからもSecure Eraseできなくもないものの、BIOS側でFrozen状態にしている結果、Secure Eraseできないケースもあります。今回のASRock B550 Steel Legendだと、UEFIメニューからToolタブの「NVME Sanitization Tool」を選択し、「 Format」を実行することでデータが空の状態と同じ性能に戻りました。
このようにUbuntuにも、システム情報を表示するツールがたくさんあります。PCを新調しベンチマークを実施する際は、これらのツールを利用しながら、より多面的なデータの取得を試みてみると良いでしょう。