HDD/SSDを スピードアップ?! hdparmコマンドの紹介

Pocket

HDD/SSDを スピードアップ?! hdparmコマンドの紹介
HDD/SSDをスピードアップ?!hdparmコマンドの紹介

序文

はい。みなさん今日は。BOSSクラフトブラックをこよなく愛するKaBAです。

みなさんは、お仕事中、またはお仕事後の飲み物は何がお好きですか?

緑茶や紅茶、爽健美茶、コーヒー、カフェオレなど、仕事砂漠では喉が渇きますね。

そして、仕事あがりの冷えたビールなど、サイコーそうですね。

KaBAはアルコールがダメなため、冷えたビールを味わうことができず、大変残念です。

さて、BOSSクラフトブラックコーヒーと同じく、ブラックなもの。

それは、SSHなどで使うTeraTermProやPuttyなどの「黒い画面」、いわゆる端末エミュレータがあります。

今回は黒い画面で、サーバーのHDD/SSDの動作速度の計測(ベンチマーク)と、先読みバッファによる速度アップの試みを紹介します。

なお、対象のOSはCentOSです。

それでは、行ってみましょう!

hdparmのyumによるインストール

HDD/SSDの速度計測に使用するコマンドは「hdparm」です。

標準でCentOSに入っていないことも多いです。

以下のように「yum」でインストールしましょう。

yum install hdparm

HDD/SSDの速度測定(ベンチマーク)

次に、速度計測を実際に行ってみます。

「hdparm」の「-f」(flush)オプションを付けて実行するとディスクバッファをクリアします。
「hdparm」の「-t」(test)オプションsを付けて実行すると、速度計測(ベンチマーク・テスト)を行います。

それでは、実際に実行した結果を載せます。

[実行結果]

hdparm -f/hdparm -t
hdparm -f/hdparm -t
[root@localhost ~]# hdparm -f /dev/sda1

/dev/sda1:
[root@localhost ~]# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 1024 MB in  1.06 seconds = 961.61 MB/sec
[root@localhost ~]#

このサーバーはSSDです。

1024MB読み込むのに1.06秒かかっており、速度は961.61MB/秒のようですね。

ベンチマークの結果キャッシュに乗ったデータを解放する

今後の計測のために、もう一度、手動で「-f」(flush)オプション付きで、「hdparm」を実行して、ディスクバッファをクリアしておきましょう。

[実行結果]

hdparm -f
hdparm -f
[root@#localhost ~]# hdparm -f /dev/sda1

/dev/sda1:

先読みバッファを2048にする

次に、HDD/SSDに対し、「先読みバッファ」を設定してみましょう。

「先読みバッファ」とは、ディスクを読み込むときに、1回の読み込みで必要以上のディスク領域まで、先に読み込んでおき、そのデータをバッファに入れておくモードのことです。

次回、読み込み時、バッファに入っているデータが該当していた際は、ディスクアクセスが起こらず、メモリ上の先読みバッファから読み込まれます。

そのため、読み取り速度が速くなる傾向があります。

それでは、実際に先読みバッファを設定してみましょう。

なお、この設定は、OSqをシャットダウンするとリセットさてます。

「hdparm」に「-a」(reda Ahead)オプション付きで、「-a2048」などと指定すると、バッファが「2048KB」確保されます。

指定できるバッファのサイズは0~2048までです。

[実行結果]

hdparm -a2048
hdparm -a2048
[root@localhost ~]# hdparm -a2048 /dev/sda1

/dev/sda1:
 setting fs readahead to 2048
 readahead     = 2048 (on)

無事に、先読みバッファ「redahead」が「2048」になっていますね。

先読みバッファ有効化後再度、速度測定(ベンチマーク・テスト)する

次に、再度、速度測定(ベンチマーク・テスト)を行ってみましょう。

「hdparm」に、「-t」(test)オプションを指定して実行します。

[実行結果]

hdparm -t
hdparm -t
[root@localhost ~]# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 1024 MB in  0.99 seconds = 1030.07 MB/sec

今回は、1024MB読み込むのに0.99秒かかっており、速度は1030.07MB/秒のようですね。

5%~10%程度速度が向上しているように見えます。

共用サーバーでは、他のユーザーのディスクIOにも依存する

ただ、致し方ないことなのですが、VPSやレンタルサーバーなどの共用サーバーでは、他のユーザーもディスクを使用しています。

そのため、hdparmで計測して高速な速度の結果となる場合と、計測しても速くない場合もあります。

以下に、その実例を挙げます。

なお、先読みバッファ「-a2048」を設定後の計測です。

[実行結果]

[root@localhost ~]# hdparm -f /dev/sda1

/dev/sda1:
[root@localhost ~]# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 1024 MB in  1.01 seconds = 1017.21 MB/sec
[root@localhost ~]# hdparm -f /dev/sda1

/dev/sda1:
[root@localhost ~]# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 1024 MB in  1.11 seconds = 923.72 MB/sec

このように、

  • 1024MB読み込むのに1.01秒かかっており、速度は1017.21MB/秒
  • 1024MB読み込むのに1.11秒かかっており、速度は9213.72MB/秒

などと、ディスク速度にばらつきが出ています。

先読みバッファも万能ではない、ということですね。

hdparmについて詳しくは、以下のURLのサイトを参照してください

/etc/rc.d/rc.localにhdparmを登録する

「hdparm -k1」は、hdparmで設定した内容をディスクに保存出来ますが、結構危険です。

再起動後、ディスクにアクセスできないなどの現象が起こるかもしれません。

$ hdparm -k1 /dev/sda1

そこで、起動時に自動的に実行されるスクリプト、/etc/rc.d/rc.localにコマンドを書いて「hdparm -a2048」などと起動時に実行させましょう。

この方法であれば、「hdparm」の設定値をディスクに保存などはしませんので安全です。

vi /etc/rc.d/rc.local

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

hdparm -a2048 /dev/sda1

最後に、/etc/rc.d/rc.localに実行パーミッションを付けましょう。

/etc/rc.d/rc.localに実行パーミッションを付けておかないと、起動時に実行されません。

rootユーザーで「chmod」を実行します。

$ chmod +x /etc/rc.d/rc.local

まとめ

皆様、大変お疲れ様でした。

ここまで読んで頂いて、誠にありがとうございました。

本日の学びを以下にまとめます。

  • hdparmで速度計測(ベンチマーク・テスト)する前は、「hdparm」に「-f」(flush)オプションを指定して実行し、ディスクのバッファをクリア(フラッシュ)しておく。
  • hdparmで速度計測(ベンチマーク・テスト)を行うには、「hdparm」に「-t」(test)オプションを指定して実行する。
  • hdparmで先読みバッファを指定するには、「-a<バッファサイズ>」と、指定する。
    例えば、バッファサイズが2048KBの場合「-a2048」と指定する。
    バッファサイズは0~2048まで。
  • 共用サーバーでは、他のユーザーのディスクIOにも依存するため、正確な速度計測(ベンチマーク・テスト)の結果とはならない

今回の例もVPSサーバーで行っており、「hdparm -a2048」に設定してもそれほど速くならず、むしろ遅くなることもありました。

先読みバッファは、ディスクアクセス機構の内の、ほんの一部の設定であり、先読みバッファが万能に効くわけではないようです。

そのため、「hdparm -k1」などと、先読みバッファの設定をディスクに書き込んでしまうことはあまり良くはないようですね。

皆さんも、試される場合は、初めはVM(バーチャル・マシン)などで試されることをお勧めします。

それではー またー (^_^)/