SSDによる高速化

LINEで送る
Pocket

SSD は、フラッシュメモリを使った記憶装置なので、HDDと違い回転するディスクを持たない。そのため目的のデータにアクセスするためのディスクを移動する時間(シークタイム)が無く、HDD より高速にデータの読み書きができます。

SSD は、高速である反面 HDD より寿命が短い。これは、フラッシュメモリの素子が書き込みを行うごとに劣化するためなので、何度も書き換えが発生するデータ保存用のストレージとしてはあまり向いていません。むしろ頻繁にアクセスされるプログラムやシステムデータを保存する先として有効です。また SSD は、書き込み回数が増えると書き込み速度が低下します。ファイル削除時、削除した領域に未使用のフラグが立つだけで、実際のデータは削除されていません。再度書き込みが発生すると HDD であれば単に上書きされますが、SSD の場合、一旦データの消去を行わなければ書き込みが行えません。よって SSD を使い込んでいくと書き込み速度が低下します。

しかし SSD には、TRIM という機能があります。TRIM とは、データ削除時に、データの物理的削除も同時に行うための機能です。TRIM の設定は、/etc/fstab に以下の discard パラメータを追加するだけで行えますが、最近、デバイスによって深刻な障害が発生するようで、CentOS7 では、/ パーティションに discard オプションを追加しても有効にならないようです。現在の所、定期的に使用していないブロックの削除を行うコマンド fstrim を実行するのが主流になっています。また noatime を設定するとファイルへのアクセス時間更新が無くなり、ディスクの書き込み軽減が期待できるのでこのオプションは追加しておきましょう。

HDDのパラメータを設定、取得するコマンド hdparm をインストールします。

# yum install hdparm

所有している SSD が TRIM をサポートしているか確認を行います。
※ TRIMをサポートしていない SSD もあります。)

# hdparm -I /dev/sda | grep -i trim
                :
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read data after TRIM

1周間に一度実行するスケジューラがデフォルで設定されているので、有効にしておきます。
[/usr/lib/systemd/system/fstrim.timer]

[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true

[Install]
WantedBy=multi-user.target

fstrim.timer を有効にする。

# systemctl enable fstrim.timer

fstrim.timer を起動する。

# systemctl start fstrim.timer

手動で実行する場合。

# fstrim -v /

[/etc/fstab]

/dev/mapper/centos-home /home                   xfs     defaults,discard,noatime        0 0
                                                          ↓
/dev/mapper/centos-home /home                   xfs     defaults,noatime        0 0   <- noatime だけ記述

discard: TRIM機能の有効化。
noatime: ファイルの読込時間を記録しない。

また、バッファキャッシュ(メモリからHDDへ)の書き込み(pdflush)間隔を調整して、HDDへの書き込み頻度を調整することによりアクセス頻度を下げてSSDを長持ちさせるというアプローチもあります。

pdflushが起動する間隔は、/proc/sys/vm/dirty_writeback_centisecs を変更する事により行え、CentOS 7 のデフォルト値は5秒になっているので例えば2倍の10秒にしたい場合は、以下のように変更します。

# cat /proc/sys/vm/dirty_writeback_centisecs
500                                                (単位 10m/s)
# echo 1000 >/proc/sys/vm/dirty_writeback_centisecs
# cat /proc/sys/vm/dirty_writeback_centisecs
1000

恒久的に変更したい場合は。/etc/sysctl.conf に以下のように記述する。
[/etc/sysctl.conf]

vm.dirty_writeback_centisecs = 1000

設定を反映する。

# sysctl -p

その他 /tmp は、いろんなプログラムが一時書き込み領域として使用します。/tmp を、ファイルシステムにメモリに持つ tmpfs を使用すればSSDへのアクセスも減ります。tmpfs の設定は以下のように行います。

[/etc/fstab]

tmpfs  /tmp  tmpfs  defaults,noatime  0  0
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください