ふるた技工所(てっこうしょ)

ふるた技工所(てっこうしょ)

PR

キーワードサーチ

▼キーワード検索

プロフィール

Aちゃん22

Aちゃん22

フリーページ

2020.06.28
XML
カテゴリ: ソフト開発日誌
SMR 記録の HDD WD60EZAZ を Linux で使うには BIO (Block IO request) のタイムアウト設定 /sys/block/ block_device_name

ランダムアクセステストの結果 に気になる傾向があったので、記録に残しておく。

ランダムアクセスの分布は LBA: [0..MaxLBA] = a*random(), Length: [4096..512Mibytes] = exp(l * random()) bytes となる様に a, l を定めている。read, write はほぼ半々になる様に混在させている。

ランダムアクセステストをする前に行った HDD アクセス履歴の概要を書く。最後の全 block 連続書き込みから、次の表の様にランダムアクセスをした状態だ。6Tbyte に対して、221266 回 write のランダムアクセスをしている。

テスト前のランダムアクセス数
Read / Write 回数
Read 220113
Write 221266

テスト後のランダムアクセス数
Read / Write 回数
Read 269244
Write 270439

均等に分散しているアクセスだと仮定すると 6Tbyte / 221266 ≒ ‭27,121,994 (27Mbyte) 程度の範囲に 1 箇所はランダムアクセスをして乱れがあるはずだ。厳密にはアクセス長分布は 512Mibyte まで有るので、27Mbyte 丸々上書きされている場合もある。意外と疎な感もある。

OS の Cache を使わずに Read/Write Random Access をした結果から、Read のアクセス時間と転送長の関係をプロットしたグラフを見てみる。最小 Read Turn Around Time は約 8ms だった。Seek time + Rotation 待ち時間として考えられる。気になるのは、アクセス時間の分布がいくつかの帯に分かれることだ。



  • 4Mbyte 程の CMR Allocation Unit
  • 10M ~ 30M byte 程度の単位で管理された Small SMR Allocation Unit
  • 200M ~ 300Mbyte 程度の単位で管理された Large SMR Allocation Unit (Small SMR Allocation Unit をまとめたか、あるいはさらに高密度記録を行っている)
といった階層的な構造になっている様に見える。シーケンシャルアクセステストの結果から、ドライブ全体を 3 分割する構造も見えている。

SMR HDD らしい所は転送長が 1Mbyte 未満の所で、Access Time が 8ms ~ 300ms 程度の幅があることだ。最小アクセス時間と最大アクセス時間の比は 37.5 倍になる。細かいアクセスが多発する場合、総アクセス時間の予測をしにくい。

Small SMR Allocation Unit も Large SMR Allocation Unit も追記を行っていく構造になっていると思われる。 2020.06.29 加筆 書き込みをした場合、LBA, (新しい書き込みだと印を付ける)SerialNumber, block data を組みで追記し、プラッタ上の LBA の並びは追記順になっている様に見える。SMR 記録された track を読んでいって、読みたい LBA の最新が見つかるまで、シーケンシャルにアクセスしていると推測する。

Write のアクセス時間と転送長の関係をプロットしたグラフを見てみる。条件は先ほどの Read 同様 OS の Cache は使わない。最小 Write Turn Around Time は 140us 程になっている。10Mbyte 程の書き込みまで多くの場合 転送速度は 400Mbyte/sec だ。SATA-III I/F の転送速度 6Gbps の上限に近い。プラッタに書き込まず、HDD 基板上の半導体メモリに格納したら、転送完了している様に見える。もし、電源断になったらどうするのだろう?



プラッタとスピンドルモーターでフライホイールを構成して、Flash Memory か特別な磁気媒体領域に書き込み終わるまで、電源供給無しに動作し続けるのだろうか?

実効的な HDD の cache size は 10Mbyte 程に見える。 WD Blue Data Sheet には 256Mbyte と表記されているので 10Mbyte x n tansaction の様に使っているか、Small/Large SMR Allocation Unit の再構築に使っている可能性がある。

転送長に対して顕著にアクセス時間が長い場合が見られる。アクセス時間からして Small/Large SMR Allocation Unit を再構築しているのでは?と考えられる。追記ができなくなった場合、近隣の Allocation Unit に追記するか、それも出来なくなった場合は、再構築をするのだろう。このグラフからは読み取りにくい。HDD を休ませることなく連続してランダムアクセステストを実施していると、次の様なグラフに変化する。



分布がより鮮明に現れ、転送長が 512Mibyte の場合のアクセス時間は 7 ~ 10 秒だったのが、45 秒程に変化する。

連続してランダムアクセステストを実施していると、read もアクセス時間が変化する。転送長が 1Mbyte 以下で 8ms でアクセス完了する場合が減る。Small SMR allocation Unit から読んでいると思われる 300ms 程のアクセス時間になる。転送長が 1Mbyte 以上の場合も、Large SMR Allocation Unit を 2 つ跨ぐ様なアクセス時間に変化している。対数グラフで一マス上なので体感的に速度は 1/5 ~ 1/10 程度に下がってしまった様に感じるかも。







連続アクセスを続けていると、待ち時間はさらに長くなる。200 秒ほどの待ちになる。先行する write transaction が完了するまでの待ちだと考えられる。これが、冒頭で触れた「タイムアウト設定 /sys/block/ block_device_name /queue/io_timeout を 240000」にしようと考えた背景だ。



OS の cache を使った場合の write は、順調に OS の cache に格納して完了している。



転送速度が 2Gbytes/sec と 3Gbytes/sec に別れる原因は探っていない。OS の cache 管理構造が原因なのか、主記憶が 24Gibyte なので Memory Bus の channel 構成が非対称なのが原因なのか。

ランダムアクセスですっかり遅くなってしまった SMR HDD WD60EZAZ のアクセス速度を回復する方法は有るのだろうか?

SMR HDD random read/write アクセス後の sequential read/write 速度
2020.7.18 追記: SMR HDD WD60EZAZ 買った直後に近い状態に戻す - trim(blkdiscard) を使う

2020.7.18 追記: Android, Linux Kernel の様な大規模ソースを格納して build 作業に使う場合、mount option discard (trim) を付ければ hang up に近いような応答時間にならずに済むかもしれないことが分かった。それでも、ランダムアクセスは性能的に不利だ。積極的には build 作業に使わない方が良さそう。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2020.07.18 01:30:33 コメント(2) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

カレンダー

サイド自由欄

コメント新着

Aちゃん22 @ Re[1]:秋月八潮店 カラーつまみ詰め放題 300 円 - 46 個入った(05/10) クマノフさん、こんにちは、 あぁ、高さバ…
クマノフ@ Re:秋月八潮店 カラーつまみ詰め放題 300 円 - 46 個入った(05/10) こんにちは 確か使用上の注意が出ていたと…
Aちゃん22 @ Re[7]:ようやく転職エージェントに会うも - 3 分で終了(04/01) ご無沙汰してますさん、こんにちは、 反応…
ご無沙汰してます@ Re[6]:ようやく転職エージェントに会うも - 3 分で終了(04/01) Aちゃん22さんへ 調べて頂いて恐縮です。…
Aちゃん22 @ Re[5]:ようやく転職エージェントに会うも - 3 分で終了(04/01) ご無沙汰してますさん、こんにちは。 思い…

© Rakuten Group, Inc.
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: