Slide 1

Slide 1 text

HDDへのアクセス速度は 位置によって変わる!?? Mar. 16th, 2024 Satoru Takeuchi X: satoru_takeuchi

Slide 2

Slide 2 text

はなすこと ● HDDへのアクセス速度がアクセスする位置によって変わることを説明 ○ 実験 ○ なんでそうなるか

Slide 3

Slide 3 text

いきなり実験! ● HDDのシーケンシャル読み出し性能を測る ○ HDDの先頭から1MiBづつ、合計128MiBのデータを読んだときのスループットを測定 ○ 誤差を減らすために 10回測定して平均をとる ● 📝 参考: データ採取に使ったコード $ cat perf.sh #!/bin/bash SUM=0 for ((i=0;i<10;i++)) ; do VAL=$(sudo dd if=/dev/sda of=/dev/null bs=1M count=128 iflag=direct 2>&1 | \ sed -nE -e 's/.*, ([0-9.]+) MB\/s$/\1/p') SUM=$((SUM+VAL)) done python3 -c "print($SUM / 10)"

Slide 4

Slide 4 text

いきなり実験! ● HDDのシーケンシャル読み出し性能を測る ○ HDDの先頭から1MiBづつ、合計128MiBのデータを読んだときのスループットを測定 ○ 誤差を減らすために 10回測定して平均をとる ● 📝 参考: データ採取に使ったコード $ cat perf.sh #!/bin/bash SUM=0 for ((i=0;i<10;i++)) ; do VAL=$(sudo dd if=/dev/sda of=/dev/null bs=1M count=128 iflag=direct 2>&1 | \ sed -nE -e 's/.*, ([0-9.]+) MB\/s$/\1/p') SUM=$((SUM+VAL)) done python3 -c "print($SUM / 10)" $ ./perf.sh 132.5

Slide 5

Slide 5 text

読み出す領域をディスクの末尾あたりにすると… ● ディスク先頭から2.5TiB時点(ディスクサイズは約2.7TiB)から読み出す $ cat perf.sh #!/bin/bash SUM=0 for ((i=0;i<10;i++)) ; do VAL=$(sudo dd if=/dev/sda of=/dev/null bs=1M count=128 \ iflag=direct,skip_bytes skip=2560G 2>&1 | \ sed -nE -e 's/.*, ([0-9.]+) MB\/s$/\1/p') SUM=$((SUM+VAL)) done python3 -c "print($SUM / 10)"

Slide 6

Slide 6 text

読み出す領域をディスクの末尾あたりにすると… ● ディスク先頭から2.5TiB時点(ディスクサイズは約2.7TiB)から読み出す $ cat perf.sh #!/bin/bash SUM=0 for ((i=0;i<10;i++)) ; do VAL=$(sudo dd if=/dev/sda of=/dev/null bs=1M count=128 \ iflag=direct,skip_bytes skip=2560G 2>&1 | \ sed -nE -e 's/.*, ([0-9.]+) MB\/s$/\1/p') SUM=$((SUM+VAL)) done python3 -c "print($SUM / 10)" $ ./perf.sh 113.9 14%性能劣化! 理由はHDDの性質

Slide 7

Slide 7 text

データはプラッタという円盤に保存される ● 外側ほどセクタ(データを入れる部分)がたくさんある ● ブロックデバイスのデータはオフセットが小さいほど外周に配置される セクタ

Slide 8

Slide 8 text

データの読み書きはスイングアームについたヘッドで 回転 回転 移動 アクセス スイングアーム ヘッド

Slide 9

Slide 9 text

ある量(角度)回転したとすると… ● アクセスできるセクタ量はディスクの外側のほうが多い 回転 回転 90度回転すると外側は 5つ まんなかは4つ 内側は2つ

Slide 10

Slide 10 text

つまりどういうことかというと… ● ディスクの外側のほうがアクセスできるセクタ数が多い ● ディスクの外側にあるオフセットの小さいデータには高速にアクセス可能 回転 回転 90度回転すると外側は 5つ まんなかは4つ 内側は2つ

Slide 11

Slide 11 text

参考: いろいろなオフセットで同じことをしたグラフ

Slide 12

Slide 12 text

まとめ ● HDDへのアクセス速度はアクセスする位置によって変わる ● HDDに対応するブロックデバイスのオフセットが小さいほど高速にアクセス可能 ● 理由はHDDの特性 ○ プラッタの外周ほどセクタ数が多い ○ オフセットが小さいデータほど、プラッタの外周にあるセクタに配置される ○ プラッタをある角度だけ回転させると、外周にあるデータほど高速にアクセスできる ○ オフセットが小さいところのデータほど高速にアクセスできる