SSDの書き込み速度が遅い?

こんにちわ

仕事でSSDの検証をしていて気づいたことを簡単に話したいと思います。
ddコマンドで書き込みをする時に小さいものを書く時はかなり早いのですが
大きいデータを書こうとするとおもいっきり遅くなります。

基本的にシェルでddコマンドを永久ループさせてます。


#!/bin/sh

for (( i=1 ; i>0 ; i++))
do

dd if=/dev/zero of=/tmp/burntest/.txt bs=$1 count=1
rm /tmp/burntest/.txt
done

$1で関数をつくってやり1回で書きこむデータ量を変更できるようにしました。

今回は

・1K
・1M
・100M
・500M
・1G
・10G
・100G


◆まずは1Kを書きこむ時


# sh dd.sh K
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 1.2e-05 seconds, 85.3 MB/s

かなり小さいデータを書き込んですぐに終わるために書き込み速度がとても早いようには見えませんが
1Kの時はこんなもんでしょう。

◆次に1Mの時


# sh dd.sh M
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00045 seconds, 2.3 GB/s
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.000457 seconds, 2.3 GB/s
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00046 seconds, 2.3 GB/s
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.000464 seconds, 2.3 GB/s
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.000452 seconds, 2.3 GB/s
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.000453 seconds, 2.3 GB/s
うは・・・w段違いで変わったw

◆次に100M


# sh dd.sh 100M
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.061848 seconds, 1.7 GB/s
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.061628 seconds, 1.7 GB/s
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.062076 seconds, 1.7 GB/s
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.061178 seconds, 1.7 GB/s
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.061315 seconds, 1.7 GB/s
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.061478 seconds, 1.7 GB/s

100Mにしたら600MB/s近くことなりました。100Mでもデータを大きくすると
遅くなりますね。

◆500Mの時


# sh dd.sh 500M
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.311425 seconds, 1.7 GB/s
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.310522 seconds, 1.7 GB/s
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.30972 seconds, 1.7 GB/s
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.310451 seconds, 1.7 GB/s
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.315762 seconds, 1.7 GB/s
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 0.315831 seconds, 1.7 GB/s

500M程度だと100Mとあんまり変わりませんでした。

◆1Gの時


# sh dd.sh 1000M
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.06468 seconds, 985 MB/s
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.12449 seconds, 932 MB/s
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.09086 seconds, 961 MB/s
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.06604 seconds, 984 MB/s
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.08191 seconds, 969 MB/s
1+0 records in
1+0 records out
1048576000 bytes (1.0 GB) copied, 1.10822 seconds, 946 MB/s

おお、800MB/s近くまた下がりました・・・

◆10Gの時


# sh dd.sh 10000M
dd: メモリを使い果たしました
dd: メモリを使い果たしました
dd: メモリを使い果たしました
dd: メモリを使い果たしました
dd: メモリを使い果たしました
dd: メモリを使い果たしました

ということで実行できませんでした・・・あれ?こないだは実行できたはずなんだが・・・

こんな感じで書きこませようとするデータ量で書き込み速度が変わります。
当たり前ですがね・・・

ちょっと思ったので書いてみました

Linuxハンドブック ―機能引きコマンドガイド

Linuxハンドブック ―機能引きコマンドガイド