Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HDDへのアクセス速度は位置によって変わる!??

 HDDへのアクセス速度は位置によって変わる!??

以下動画のテキストです。
https://youtu.be/iJHcw91MZbY

Satoru Takeuchi

March 16, 2024
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. いきなり実験! • 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)"
  2. いきなり実験! • 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
  3. 読み出す領域をディスクの末尾あたりにすると… • ディスク先頭から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)"
  4. 読み出す領域をディスクの末尾あたりにすると… • ディスク先頭から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の性質
  5. まとめ • HDDへのアクセス速度はアクセスする位置によって変わる • HDDに対応するブロックデバイスのオフセットが小さいほど高速にアクセス可能 • 理由はHDDの特性 ◦ プラッタの外周ほどセクタ数が多い ◦

    オフセットが小さいデータほど、プラッタの外周にあるセクタに配置される ◦ プラッタをある角度だけ回転させると、外周にあるデータほど高速にアクセスできる ◦ オフセットが小さいところのデータほど高速にアクセスできる