More Related Content
Similar to Osc2011 Do (20)
More from Kazuhisa Hara (7)
Osc2011 Do
- 2. 自己紹介
はら かずひさ
Twitter:kazuhisya
横浜市民
普段は某社で仮想化関連技術を軸に、
社内講師やら技術検証、御用聞きなんかしてます。
OSC出没率高し
2
- 4. ストレージって何だっけ
• ストレージ
– 単に『ストレージ』といった場合、いろいろ意味がある
• DASストレージだとか
• NASストレージだとか
• SANストレージだとか
• 胃腸薬だとか
– 凄く乱暴な言い方をすると
• 基本的に永続利用の(メモリと違って再起動しても消えないよ)
– 補助記憶装置だとか二次記憶装置とかとも言う
• ハードディスク
• SSD
• もしくは上記を束ねたやつを、OSやらアプリやらから、何かしらの
形で使えるようにしたもの
4
- 7. ここから本題
わりかし一般的に業務で使われる
HDDのチューニング
7
Origine Uploaded by autumn_bliss http://www.flickr.com/photos/autumn_bliss/198493795/
- 9. ハードディスクの見方
• 大きさ • I/F
– 3.5 / 2.5 / 1.8インチなど – 接続する線の形式(線とは限らな
– サーバでは主に3.5、時々2.5イン いけど・・・)
チ – サーバでは、SAS、もしくは
SATA2が一般的
• 回転数 • ディスク枚数
– 回転毎分 (rotation per minute) – 円盤の枚数
– 1分間に、何回円盤をまわせるか
• シークタイム
• キャッシュ – ディスクヘッドが円盤の目的の部
– 円盤から読み出したデータを一時 分に移動するのに要する時間
的に記憶したり – これが短いほど、一般的には速い
– 書き込むデータを円盤に書く前に HDDということになる
一時的に置いたりする
– 多い方が速い!とは限らないので
注意
9
- 10. インターフェースの話
• 要は線の話(PIC-Exとかもあるけど)
– 繋ぐ形式によって、限界が制限される
• これに制限されるHDDは割と稀(SSDは簡単に超えたりする)
– たとえば
• SATA(Serial Advanced Technology Attachment)
– SATA-150: 1.2 Gbit/s (150 MB/s)
– SATA-300: 2.4 Gbit/s (300 MB/s)
– SATA-600: 4.8 Gbit/s (600 MB/s)
– SATA-300(SATA2とも言う)がデスクトップPCやエントリー
サーバに多い
• SAS(Serial Attached SCSI)
– SAS 1.0: 3.0 Gbit/s (300 MB/s)
– SAS 2.0: 6.0 Gbit/s (600 MB/s)
10
- 11. ディスクアクセスの時間の感覚をつかむ
• ざっくりアクセスに掛か
る時間の感覚
– CPU: 8ns(ナノセック)
– メモリ: 50ns
– NIC: 0.1ms (ミリセック)
– HDD: 5ms
• かなりいい加減な数字
• それでもCPUやメモリに比べ
て10~100万倍オーダーで
遅い
– シークタイムが 5msだと
すると、1秒当たり200回
アクセスできる 11
- 12. シーケンシャルとランダムアクセス
• シーケンシャルアクセス
– データを特定箇所から順に読み/書きする
– つまり円盤を普通にまわし、順繰りに読み書きすれば
よろしい
– アクセスしやすいので速い(≒カタログスペック)
• ランダムアクセス
– 読み書きしたいデータの場所をインデックスなどの位
置情報をもとに割り出し、直接その場所にアクセスす
る方法
– つまり目的の箇所を探し出して、違うところは読み飛
ばさなければならない
– 要は遅い 12
- 14. 回転待ち時間
• 回転待ち時間を求める
– シークタイムはカタログスペックに載ってい
る
– 回転待ち時間は?
– 基本情報の対策本とかに載ってるよ!
– 例: 7200rpmのSATA
• 7200 / 60秒 = 120回転
• 半回転だとざっくり240回/秒アクセスできる
– アクセス、というは物理的な意味
14
- 19. 種類
• メジャーどころで3種類
– cfq (Completely Fair Queuing)
• RHEL系はこれがデフォルト
• 特定プロセスにI/O要求が偏るのを防ぎ、他のプロセスにも
I/Oが振り分けられるように調整
– deadline
• 読み/書きのI/Oをバランスよく処理する(≠プロセス単位)
• 他のスケジューラは、読み/書きでは区別していない
• 仮想化やDBサーバでお勧め(KVMの推奨スケジューラ)
– noop
• 『I/O要求を物理Disk上に配置する』こと以外は特に行わな
い
• スケジューリングをしない、という事(=スケジューリング
のオーバーヘッドが発生しない)
• 自前でスケジューリングできるDBや、H/Wで行えるタイプ
のストレージやSSDを使うとき有利 19
- 20. 確認・変更方法
1. 確認方法
# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[ ]でくくられているのが今のスケジューラ
2. 変更(一時的)
# echo noop > /sys/block/sda/queue/scheduler
3. 変更(永続)
• grub.conf の kernel行 に elevator=deadline を追記
20
- 22. Linuxのファイルシステム
• よく使われるメジャーどころ
– ext系
• ext2: 最近はあまり見ない
• ext3: 大体これが多い、RHEL5デフォルト
• ext4: 最近だとこちら、RHEL6デフォルト、後方互換性が高い
– XFS
• RHEL5だとオプション扱い(別料金)
• ファイルレベルでなく、FSそのもにダイレクトアクセスできる(高
速)
– btrfs
• Solaris ZFSの対抗馬的なモダンFS(スナップショットなど)
• 非常によろしい、らしいけど商用で使うにはまだ時期尚早(?)
– 他にも
• JFS, ReiseFSなども
• btrfs, NILFS2, Cephなど、最近はFSまわりは活発 22
- 23. ジャーナリングファイルシステム
• ext3, ext4, XFS…
– ジャーナリングファイルシステム
• ファイルシステム上のメタデータを書き換え処理
(トランザクション)単位で管理・保持する事が
できる
• 書き換え中に電源断や処理中断が発生し、ファイ
ル構成情報に矛盾が発生した場合でも、素早く検
査/修復処理を行うことが出来る
– ext2にはジャーナルがない
23
- 24. ext3のジャージャーナリング方式
• 基本的には3種類
– writeback
• メタデータのみをジャーナリング対象とする
• ジャーナリング順は保障されない
• ファイル消失は防げるが、データ消失リスクはある
– 全て更新か、全く更新が無いか、しか判別できない
• 最も高速
• いつの間にかデフォルトになった模様
– orderd
• メタデータのみをジャーナリング対象とする
• ジャーナリング順を保障する
• writebackよりも若干信頼性が高い
– journal
• 実データもジャーナリング対象とする
• fsync() や fdatasync() を発行した所までは完全に保障される
• 最も低速 24
- 25. ext系チューニング
• 代表的なチューニング項目(マウントオプション)
– dir_index
• DBのインディックスとほぼ同じ働き
• ファイル数が多すぎるとパフォーマンスの逆転現象が起こりうる
– noatime
• 最終アクセス時刻の記録を止める
– 作成時刻、更新時刻、アクセス時刻
• 更新時刻がアクセス時刻を追い越す罠
– 特定のアプリケーションで不具合あり
– relatime(kernel 2.6.20~)
• 更新時刻(mtime)やファイル属性の修正時刻(ctime)が、最終アクセ
ス時刻を追い越したときに、atimeを修正する
• noatimeよりもお勧め、デフォルトで有効になるディストリが多い
– discard
• ext4,SSD用オプション
• RHEL5.6 + ext3 では使えた
• ATAデバイスにはTRIMコマンド、SCSIデバイスにはUNMAPコマン 25
ドを発行する
- 27. RAIDの話
• RAID
– ハードウェアRAID
• いわゆるカードもの PCI-Express接続とか
• マザーボードの機能として付いてるものも
– 廉価版は、ソフトウェアRAIDな場合も・・・
• 専用のコントローラーが処理する
• ライトキャッシュ(BBWC)が付いている事が結構あ
る
– ソフトウェアRAID
• 一般的にはOS側で束ねるRAID
• CPUが処理する
27
- 29. BBWC
• Battery Backed Write Cache
– バッテリーバックアップ付きライトキャッ
シュ
• RAIDコントローラーに付けるキャッシュ装置
• 耐障害性を維持しつつ、書き込み性能を上げる事
が出来る
• RAIDカードとHDD本体の間で働く
• エントリークラスで128~512MB程度はある
– キャッシュに乗り切るサイズであれば、OS
側からfsync() などの同期書き込みが実行さ
れても、キャッシュに高速に保存できる(その
29
後よしなに実HDDに書かれる)
- 30. BBWC
• その後よしなに実HDDに書かれる?
– よしなに、とは
• デバドラに依存するが
• アクセス効率が良くなるように
• ある程度まとまった単位で書かれる
– ある程度まとまった単位
• シーケンシャルに読める可能性が高い
• Diskの回転、つまりコミット待ち発生を抑え
ることが出来る
30
- 34. ストライピングサイズ
• ストライピングサイズが小さすぎると・・・
– 1ブロックが複数ディスクに跨って配置されてしまう
– 1ブロックを読み出すのに、複数アクセスする必要が
ある
– 複数アクセスを同時に行うから、速いのでは?
• 1HDD / s あたりのランダムアクセスできる回数には上限
がある
• スループットが下がる
• 1ブロックの読み込みは、1アクセスで済ませるべき
• ストライピングサイズが大きすぎると・・・
– こんどはシーケンシャルが遅くなる
34
• 分散読み込みできないから
- 37. おわりに
• 他にも考えることは、もっともっとあります
– RAIDレベルは?NCQは?キューザイズは?etc…
• なので
– H/Wを良く知ろう
• 限界性能を知る
– Blogのコピペも良いけど、”何故そうなのか”も考
えてみる
• ドラスティックにパフォーマンスに変化が出るような
ものには、得てしてデメリットもあるものです
37
- 38. まとめ
• 慣れないことを本番環境でいきなりやるのはつらい
• 懐具合と相談すれば、わりかしそれっぽい環境はできる
• もちろんどう考えてもできないものある
• 特にLinux周りのスキルはコストをあまりかけずとも習得
しやすい
• というわけで、主に自宅で(←SAN友の趣旨)検証し
てみましょう
38