Chienomi

ディスクへの書き込み速度を開始後に調べる

Live With Linux::practical

HDDはファイルシステムが汚れていなければシーケンシャルライトはほぼ一定の速度になるが、SSDへの書き込みはかなり変動があり、場合によっては完全にストールしてしまうこともある。

Nemoでのファイル移動や、rsyncで--info=progress2オプションをつけたりすれば転送速度を確認することができるが、mvを使った場合や、確認できない手段で開始してしまったらこうした方法は使えない。

今回はSanDisk SSD UltraからPNY CS2241へのmvでのファイル移動がものすごく遅く感じたので、ちゃんと書けているか確認したいと考えた。

確認する

#!/bin/zsh

typeset -i cv=$(df . | { read; tr -s ' ' } | cut -d " " -f 3)
typeset -i nv=0
typeset -i dv=0

while sleep 600
do
  nv=$(df . | { read; tr -s ' ' } | cut -d " " -f 3)
  (( dv = nv - cv ))
  print wrote $(( dv / 1000 )) Mblocks
  print $(( dv * 8 / 10 / 60 )) kB/s
  (( cv = nv ))
done

dfを使って現在のファイルシステムのデータ量を定期的にチェックすることで、データ増加量=書き込み量を確認し、時間で割ることで書き込み速度を割り出している。

このスクリプトでは10分周期。

注意点

  • これを実行すると、そのたびにディスクを読みにいくため、書き込み速度が落ちる
  • これは転送速度ではなく「ディスクに書かれたデータの量」である

で、PNY CS2241の速度は?

だいたい50〜70MB/s。

これは、完全に止まってしまうようなSSDと比べればマシだが、PCIe NVMeのディスクとしては非常に悪く、HDDよりも遅く、もちろんSanDisk Ultraのシーケンシャルリードよりも遅い。

ものすごく安かったので人柱覚悟で購入してみたが、結論としてはやっぱり実績がある製品を買うべき、という結論となった。

ただ、挙動からすると熱っぽい感じでもあるため、冷却次第ではもうちょっと性能出るかもしれない。

なお、データを戻すとき、つまりシーケンシャルリードに関しては(rsync計測で)400MB/s以上出ているが、書き込み先はRAID0のSATA SSDで、他のPCIe NVMe SSDからの書き込みでは安定して750MB/s以上が出ているため、400MB/sがシーケンシャルリードの現実的性能だと思われる。

正直、SATA SSD未満といった感じ。