はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
最近はLPIC Level2の資格取得に向け、日々勉強している毎日になります。
そんな今回はアウトプットの一環として「hdparm」について、まとめたいと思います。
hdparmコマンドとは?
hdparmコマンドとは、「ハードディスクに関するパラメータの取得や設定変更を行うコマンド」になります。
個人的にはほとんど使ったことがないコマンドになるので、どのような状況で使うのか?気になります。
コマンドの書式は以下の通りとなります。
hdparm [オプション] (ハードディスクデバイス野指定)
オプション | 詳細 |
-i | ハードディスクの詳細情報を取得 |
-I | ハードディスクから直接詳細情報を取得 |
-c[0|1] | 32bit I/OのOFF(0)/ ON(1) |
-d[0|1] | DMAモードのOFF(0)/ ON(1) |
-t | Buffer Cacheオフで処理速度を測定 |
-T | Buffer Cacheのみで処理速度を測定 |
-w[0|1] | ライトキャッシュのOFF(0)/ ON(1) |
コマンドの書式を理解したところで実機での動作を確認してみます。
hdparmコマンドがないと言われた場合は?
今回の実機での確認はDebian OSを利用しているため、「apt install hdparm」でインストールすることができます。
他のOSの場合、「yum」など他のコマンドでインストールする場合もあるため、各自のOSに適した方法でインストールしてみてください。
マウントしたハードディスクを確認してみよう
オプション表の「-i」を利用し、ハードディスクの情報を出力してみよう。
daimaru@raspi-test:~ $ sudo hdparm -i /mnt/hdd1
/mnt/hdd1:
HDIO_GET_IDENTITY failed: Inappropriate ioctl for device
コマンドを叩いたらエラーが出力されました。
このエラーはなぜ起こるのか?
理由は「hdparmはSATA/SCSIに関する設定や状態確認を行うコマンドではないため」です。
今回、raspi-testに接続したハードディスクは「TOSHIBA MQ01ABD100」になります。
このハードディスクは「SATA形式」のため、エラーが出力されたのです。
SATA形式の確認には「sdparm」というコマンドになるようです。(後日勉強して記事作成)
直接ハードディスクから詳細情報を出力する「-I」
直接ハードディスクから詳細情報を出力する以下のコマンドであれば、確認することができるようです。
daimaru@raspi-test:~ $ sudo hdparm -I /dev/sda1
/dev/sda1:
ATA device, with non-removable media
Model Number: TOSHIBA MQ01ABD100
Serial Number: XXXXXXXXX
Firmware Revision: AX1A1U
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6
Standards:
Supported: 8 7 6 5
Likely used: 8
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 1953525168
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 953869 MBytes
device size with M = 1000*1000: 1000204 MBytes (1000 GB)
cache/buffer size = 8192 KBytes
Form Factor: 2.5 inch
Nominal Media Rotation Rate: 5400
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 254
DMA: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
SET_MAX security extension
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
* IDLE_IMMEDIATE with UNLOAD
* WRITE_UNCORRECTABLE_EXT command
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Native Command Queueing (NCQ)
* Host-initiated interface power management
* Phy event counters
* Idle-Unload when NCQ is active
* DMA Setup Auto-Activate optimization
Device-initiated interface power management
* Software settings preservation
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Error Recovery Control (AC3)
* SCT Features Control (AC4)
* SCT Data Tables (AC5)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
224min for SECURITY ERASE UNIT. 224min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000039731d84c89
NAA : 5
IEEE OUI : 000039
Unique ID : XXXXX
Checksum: correct
上記の結果の通り、DMAやWrite Cache、PIO等の状態や稼働状況を確認することができます。
試しに処理速度を実測してみよう
詳細な状態をハードディスクから直接確認できたので、次は「読み込み/処理速度」を確認してみましょう。
処理速度の確認には、「Buffer Cacheを含まない処理速度の測定を行う -t オプション」と「Buffer Cacheのみの処理速度を行う -T オプション」があります。
Buffer Cacheとは「ハードディスクからデータを読み込む際に利用されるCacheであり、ブロック単位で処理するCache」になります。
daimaru@raspi-test:~ $ sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 84 MB in 3.01 seconds = 27.87 MB/sec
daimaru@raspi-test:~ $ sudo hdparm -T /dev/sda1
/dev/sda1:
Timing cached reads: 1444 MB in 2.00 seconds = 722.08 MB/sec
出力結果からも分かる通り、Buffer Cache有無の違いでここまで速度の違いが出てきます。
これを見るとCacheの存在がどれだけありがたいかわかりますね。
DMA/PIOモードとは?
ここでオプションの紹介をした際に出てきた「DMAモード」と「PIOモード」について、説明したいと思います。
DMAモードとは?
DMAモードとは「Direct Memory Access」の略称であり、CPUを介さずにデータ転送を行うモードとなります。
現在のHDD/SSDでは、このモードが一般的に利用されているみたいです。
CPUを介さないため、CPU負荷の軽減や転送速度が向上するメリットがあります。
PIOモードとは?
一方、PIOモードは「Programmed Input/Output」の略称であり、CPUを介しメモリや各デバイスとのデータ転送を行うモードになります。
DMAモードと異なり、CPUを介するため、CPU負荷の増加やデータ転送の速度が低下します。
このモード自体は、昔の規格に合わせたものらしく、現在はほとんど利用されていないらしいです。
APMとは?
最後に電源管理を行う「APM(Advanced Power Management)」について、説明したいと思います。
hdparmコマンドで「APMの設定」を行うことができ、そのオプションは以下の表の通りとなります。
オプション | 詳細 |
-B | APM機能を1~255の段階で設定 ・255:APM OFF ・128〜254:スピンダウンなし ・1〜127:スピンダウンあり |
-S | スタンバイタイムアウトの設定 |
APM機能の指定により、APM OFF、スピンダウンなし、スピンダウンありの3段階に分かれます。
そもそもの話ですが、この値の大きさが消費電力に比例すると考えていただければ大丈夫です。
また、スピンダウンとは「ディスクの消費電力を減らし、回転速度を遅くすることで音を小さくする動作」です。
この動作により、ハードディスクの寿命が伸びますが、処理速度が遅くなるデメリットもあります。
先ほどの「-I」の出力では、レベルが254になっていることがわかります。
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 254
DMA: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
このレベル値を100に変更してみましょう。
daimaru@raspi-test:~ $ sudo hdparm -B 100 /dev/sda1
/dev/sda1:
setting Advanced Power Management level to 0x64 (100)
SG_IO: bad/missing sense data, sb[]: 70 00 01 00 00 00 00 0a 00 00 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
APM_level = 100
コマンドを入力した段階で変更されていることがわかります。
では、処理速度の実測となります。
daimaru@raspi-test:~ $ sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 2 MB in 3.33 seconds = 614.46 kB/sec
daimaru@raspi-test:~ $ sudo hdparm -T /dev/sda1
/dev/sda1:
Timing cached reads: 1406 MB in 2.00 seconds = 702.74 MB/sec
上記の結果から、Buffer Cacheがある場合はほとんど変化がないですが、Buffer Cacheがない場合はかなり処理速度が変わってくることがわかります。
ハードディスクの設定管理はトレードオフになることがよくわかりますね。
最後に
今回は、LPIC Level2のために少し深く勉強しているうちの1つ「hdparmコマンド」についてまとめてみました。
次回以降もLPIC Level2の用語について、まとめる予定です。
コメント