Fail-Slow at Scale: Evidence of Hardware Performance Faults in Large Production Systems
概要
HWの問題としてStop(止まる/壊れる)についてはある程度検討されている
しかし、Slow(遅くなる)については、それほど考慮がされていない
想定より遅い状態になる故障を新しくFail-Slowと定義する
この論文では、ベンダーなどに聞き取り調査をして、HWが遅くなるというのにどのような場合があるのかなどを調査してまとめたよ
SlowをStopと分けて考慮して、安定的なシステムの未来を期待するよ
ハードウェアベンダーの人へ
エラー修正の頻度が高くなってきたら、もっと外部にわかるようにシグナルを投げてほしい
デバイスレベルでメトリクスが取れるようにもっとS.M.A.R.Tを活用してほしい
運用している人へ
Fail-Slowの原因の39%はハードウェア外の環境にあった
原因の特定のためには、一番下のハードウェア(デバイス)から上のソフトウェアまでフルスタックに計測し続ける必要がある
システムを構築する人へ
この論文で指摘されている項目をフォールトインジェクションして、システムが耐性を持っているか検証してみてね
kimitoboku.iconの感想
普通にエラーの場合がいろいろ書いてあるので読み物として面白いのでおすすめ
これを読んだからといって突如なにかが変わる物ではないが、とりあえず読んでおくと脳内で想定出来るパターンが増えるので良い
avashe.iconおもしろそうなので後で読みつつ追記する
Fail-Slowのパターン
Permanent slowdown
永続的に性能が低下している場合
Transient slowdown
性能が低下したりしなかったりする場合
Partial slowdown
特定の処理の場合にのみ遅くなる場合
Transient stop
止まったり動いたりして平均すると遅くなっているように見える場合
https://gyazo.com/b5d8cf817e7b6ebfac6b0492d656aad9
https://gyazo.com/9ac5a8a4c749d974cf145636d542fd35
基本的に永続的に遅くなるパターンが多くあるよ
NICは遅くなったり早くなったりするパターンはなく、メモリは特定の処理だけ遅いといった事は無かったみたいだよ
Fail-Slowの発見について
Fail-SlowはStopと比べて発見がされにくい感じがあるよ
1%が1分で発見
13%が1時間
11%が1週間
17%が1ヶ月
それ以外はいつから発生していたのかすら分からなかったよ
もっと、Fail-Slowにちゃくもくしてモニタリングとかした方が良いよね
内部的なFail-Slowの原因
SSD
SSDが電圧の変化によって読み込みでリトライする場合があるよ SSDはフラッシュチップなのでかけられる電圧に制限がある
このために電圧に問題があるとスロットリングする
4回くらいreadのリトライが1回のreadで行われたりするよ
SSDの故障によるreadのリトライ
SSDはブロック毎に壊れるものだから特定のブロックの故障によりreadのリトライが発生したりするよ
SSDのGCが遅い場合
SSDのGCによりSLAが違反する事があるのは知られているね
でも、最近はGCアルゴリズムが発展してるからDC用のSSDだとこれはあんまり問題にならない事が多いよ
SSDの寿命のための書き込み回数の管理アルゴリズムが原因で並行性が損なわれる場合
SSDは書き込み制限があるので、特定のブロックが使われすぎないようにするためのアルゴリズムがあるよ
ただ、そのアルゴリズムが、ワークロードによっては下手に動いて、並行性処理が損なわれる場合があるよ
温度が問題になる場合
SSDの温度が高いと問題が連鎖的に発生したりするよ
温度が高い場合に電圧の閾値がおかしくなったりすることがあったよ
また、温度が高いとブロックの削除が上手くいかないことだったり、故障が増えたり、GCが増えたりするよ
書き込みが増幅される場合
ブロックが壊れてきているとGCなどにより、1回の書き込みで多くの書き込みが発生することがあるよ
壊れかけのSSDでデータに比べて5倍とか600倍とか1回の書き込みで書き込みが発生することがあったよ
チップのクオリティが一定じゃない問題
SSDのチップの品質には結構ばらつきがあるよ
悪いチップもベンダーの基準的に通過しちゃったりするよ
品質の良いチップと悪いチップが混ざって使われることになっているよ
HDD
SSDと似たような原因
Firemware Bug
Device Error
HDDのロットによってRAIDで問題が起きたりする事があったよ HDDのヘッドの動作がおかしい場合
Other
HDDの動作環境に起因する問題もあったよ
HDDの振動で自信がスロットリングされたり
Memory
Device Error
メモリは特定のブロックが使えなくなってもErrorを返しながらでも動いてくれたりするよ
Swapが多く使われたりするけど、結構動いてくれっちゃったりする
外部要因
宇宙線とかはあるよね
あと、operatorがメモリを甘く刺してる場合もあったよ
SRAMの問題
DRAMは結構問題がおきにくいけど、SRAMは結構問題が起きがち
DRAMと比べて電圧に制限があったりするからそこでスロットリングされたりする
FPGAとかNICとかで使われているから気をつけてね
NIC
Firmware bugs
Device errors
外部要因
設定ミスとかよくあるよ
あと、マザーボードの設計が悪くてCPUの後ろにNICを設置すると温度でやられる場合があるよ
CPU
CPUはあんまりない。壊れたら結構ちゃんと壊れてくれる雰囲気がある 外部要因
設定ミスだったり温度の問題や電力不足が多いね
外部的なFail-Slowの原因
温度
エアフィルターが詰まったりする場合
これで10%くらいのパケットロスも報告されたりしてる
逆に寒い場合
寒くてもどうさがおかしくなることがあるらしい
1つの部屋の中で下の方のディスクだけslowになったりすることがあった
ファンが壊れた場合
Fan Cotnrollerがbuggyな場合
CPUなどが熱くなったりしてスロットリングが発生するよ
構成が間違っていた場合
CPUの後ろにNICを置いてしまって温度が問題になったり
そもそも、マザーボードの設計がおかしい場合もあるよ
電力
キャパシティが十分でない場合
1つのマザーボードの中で要求される電力などが十分じゃないことがある
ピーク性能の時に問題が発生したりするから困る
PCUのファームウェアにバグがある場合
Power Control Unitにバグあったらそりゃ十分に動作出来ない事があるよね
電源障害時ラックの電力設計が間違ってた場合
サーバは基本的に2系統から電源を貰って居るが、片側の系統がDownした場合に1系統で電力を供給する
この時に、1系統での電力供給が十分でないとスロットリングされてしまう
近くのサーバが電力を使いすぎる場合
他のサーバに電力を持って行かれて、電力不足によりスロットリングされる場合があったよ
マザーボードのセンサーがおかしい場合
マザーボードのセンサーがおかしくて、OSがCPUの制御を誤ることがあったよ
環境
高高度や宇宙の場合
適切な温度や電源なのに高度2000kmとかの場合にサーマルスロットリングが異常な制御をすることがあったよ
あと、宇宙とかでもECCのcheck/repairsが発生して遅くなったりもした
ケーブルとかの差し込みが甘い場合
ネットワークのケーブルの差し込みが甘くて普通に接続は出来ているけど、通信性能が出ない場合とかあったよ
振動
HDDとかだと振動によってディスクをコントロールするから振動が問題になるよ
環境とオペレーション条件の問題
普通に動いていたけど、NICがJumbo frameに対応していないのにJumbo Frameを有効にして通信性能が出なくなったりしたよ
設定
Buggy BIOS Firewamre
ノードを追加したら性能が落ちたことがあったよ
なんと追加したノードの性能が悪くて全体的に性能が悪化したよ
人間のミス
SSDをPCIe経由で接続する時に誤って欲しい帯域が出ないレーンに追加したりしたよ
あとはInfiniBandの設定をミスったりとかよくあるよ