第98回 カーネル読書会に参加してきました。
第98回カーネル読書会のおしらせ
日時:09月10日、18時半開場、19時ころ開始
お題:はてなでのハード性能の引出し方
発表者:田中さん(はてな)
内容:はてなでは、現在約500台のLinuxサーバを動作させています。
このような大量のサーバを漫然と使うのではなく、限界に近い性能を
引出すためのシステム・ハード・ノウハウを紹介します。具体的には、
自作サーバ、仮想化、ネットワーク最適化といったあたりを予定しています。
18:30頃、開場、LTないし自己紹介など
19:00頃、お題開始
20:00頃、懇親会開始
21:00頃、中締め、お開きへ
今日のお題は、はてなの中の人(田中さん)による、はてなのサーバ管理技術。
はてなでは、自社サービスのために500台以上のサーバを独自に製造して運用しています
そのノウハウがいま明かされる・・・!
会場は楽天タワー
カーネル読書会のために大勢の受付スタッフが・・・
楽天タワー内部
会場到着
到着が遅れて19:20くらいからの参加でしたが予定をこえて20:30までやっていたので盛りだくさんの内容でした。
■ 安定性
冗長性確保
・アプリケーションサーバーは冗長かしやすい(状態をもたない)が、データソースやネットワークは難しい。
安定性のトレードオフ
安定性 vs 資源効率
安定性 vs 速度
※活発に開発をおこなっているサービスでは余裕をもって
不安定要因
。機能追加
・メモリーリーク、地雷(特定のURLで無限ループになったり)
・ユーザーアクセスパターンの変動、(slashdottedなど)
・データ量増加
・外部連携の追加(広告でAMAZON API,YAHOO API)※アマゾンが落ちるとはてながおちるということがあった→現在は対策した
・ハードウェア障害(メモリ、CPU,NIC)は日常的に故障する
ロバストなおシステムにするために
・状態をもつプロセスをへらして、DBに集約する(中間データ以外はローカルFSにもたない)
・状態を再構成でいるようにする(一次データ、2時データをきりわける)
・冗長度をたかめる
↓
冗長化と効率を両立するために仮想化技術を活用(ZEN)
※特にコストパフォーマンスを重視
・IPMIの代替
・ハードウェアリソースの利用率を向上
同じ傾向、負荷が高い機能の同居はさけるべし
仮想化サーバの例
Webサーバのあいているところにキャッシュサーバ
DBのIOがあいているところに別のサーバ
サーバ管理ツールで、どのサーバに仮想OSがきているか管理手キル用になっている。
物理的なリソース市ロース制約からの解放、ソフトレベルでの橋梁な経過
■ 性能を引き出す
システムを安価に構築
・できるだけソフトでがんばる
(NAS,SAN,ルータは普通のPCサーバ、ルータで実現する)
全部で50TくらいのSANを構築しているがすべてPCサーバで実現している。
例)GoogleでもECCメモリは使用するがRAIDは使わないなど割り切って
低コストを実現するには
ハードウェアの性能はムーアの法則で向上するためそれをみこして投資
メモリ、HDDは3年前にくらべ10分の1ていどの
(サラロフ氏作成のグラフで解説)
4コア8Gbyteサーバを標準としている
更新頻度:2年前のCore2duoサーバは引退、Quadにどんどんおきかえていく。(出消費電力あたりのパフォーマンスを最大化するため)
はてなで使用しているサーバはすべて自作している。
(デスクトップ用パーツ(M/B,CPU)をつかって、オリジナル1Uサーバ筐体にいれいてる(電源は1Uサーバ用)。NO ECC,NO RAID。HDDはリムーバブルにしたがなんか性能がおちるので)
古い機材は秋葉原などで中古でパーツ売りしている
仮想化を前提としてハードウェアを構築
最小限の管理機能、他コアCPU、大量メモリ
IOについては用途によって最適なものにしている。
ハード特性の利用
・データをメモリーに載せる(MySQL,TokyoTirant)
・データ量にメモリをあわせることも重要(16G vs 32Gで、16GではIO WAITが頻発しパフォーマンス低下につながっている。)→恩メモリーで処理できることが重要
※常にパフォーマンスを計測して改善することが重要
IO性能の向上
・SSDを利用する(最近は採用をはじめた)※MLCを採用している
性能;っ目折>SSD>HDD RAID0/10>RAID1
。32Gオンメモリー(DELL 1U 30万くらい) vs 16G+SSD(内製1Uサーバ 12万円くらい) では、16GはIO R/Wは多く発生しているがIO Waitが少なく性能が同じくらいになる
※ ただし、まだSSDの障害パターンがわからないのでリスクがある。去年買った安物は半年で故障したので、Intel SSDを採用している(ただし、まだ故障したことがないのでどういう壊れ方をするのか不明)
※ IntelのSSD ファームアップデートはなるべくかけている。S.M.A.R.Tはあんまりみてないw
※ 主に検索用サーバに採用している。運用開始してから半年くらい。
(マスターデータはHDD,キャッシュ(スレーブ)としてSSDを使用している。壊れたら捨てる。データが化ける故障は怖い)
ネットワークの冗長化
・昔は1サブネットだった。ただ1サブネットに600台いれるとArpテーブルがあふれる!
・現状は1サブネットに100台程度の構成にした
・この規模でもPCルータを活用している。
→昔は1台でやっていたが、ボトルネックになるので複数化した
ハード(内製)
・ちょといいM/B
・ECCを採用
・NICは2つ
● PCルータ
はてなのボーダールータは、すべてPCルータ
インバウンドが300Mbpsぐらいで頭打ちなようなので、限界性能を具体的に知るために良い機材がないか探した
測定方法
クライアント(はてなで現在統一している構成をほぼおなじ) Core2Quad/4G CentOD
PCルータ(旧):上記+NIC ※Xen上で動いている
↓
PCルータ(新):オンボードに2NICあるAsusのM/B ※Xen廃止
特定手順
はてなのインバウンドトラフィックを実際にしらべて、MTUを変更
MTU 152(TCPペイロード100byteくらい)
netperfを4つは知らせる
120秒間測定の平均
片道 200Kbpsくらいだった。
Xen上ではオーバーヘッドで半分くらいになってる!
nicの違いで2割くらい速度がかわた→M/B変えた
考察
・パケットロスはほとんどない
・CPUは100%にならないことも(NICがボトルネックの場合)
・負荷がかかっているときはCPU0のSoftInerruptが高くなる(ボトルネックはNICの場合?)
※hiはCPU0に割り込みがかかるようだ→その後スケジューリングするが実行するCPUが固定される?irgバランス
・ethertoolって信頼できる?
HardInterrupt
※ topコマンドでhiで表示されるもの
・デバイスの割り込みハンドラ(ソフトの割り込みはSoftInterrupt)
・できる限り速やかな処理が必要(割り込みが多いとCPUがユーザーランドに移らなくなる)
上記の計測では、20kHz程度で割り込みがおこっていた
SoftInterrupt
※ topコマンドでsiで表示されるもの
・デバイスからパケットを受け取るドライバ部分
・ネットワークスタック部分
・日また時はカーネル内の適当なところで割り込みが発生する(HIの最後など)が、忙しいときはksoftirqdカーネルスレッドから呼ばれる
NAPIの仕組みが普及してからは、デバイスドライバからのパケットをうけとるのがhiからsiになった。
高負荷時にもレスポンスが悪くならない。
ブロードキャストストームでも割り込みハンドラが呼ばれまくってユーザープロセスがまったく動かなくなることを防げる
(NetBSD方面では高負荷対応の場合、割り込みではなくポーリングでやることがあるとのこと)
最近のNIC
・interrupt coalescing
派毛とtが何個かたまってから割り込み→割り込みによるコンテキストスイッチが減少
・TCP Segmentation Offloading (TSO)
失敗談
・netperf の -m オプションでパケットサイズを変えても反映しない。
→Nagleアルゴリズムの効果で、ひとまとめにされていた。TCP_NODELAYも利かない(MTUをしぼったら反映した)
・netpref 1つだけうごかしても1コアしか回っていない感じ
・クライアントがボトルネックになりやすい(システムコールとTCPスタックまで処理するよりルータよりも負荷が高い) vs ルータはルーティングがカーネルで完結するので速いのかも
・M/BはSuperMicro X7SBL-LN2に交換したら 400Kbpsぐらいと旧PCルータの2倍の性能が出た
※サーバ用のNICはバッファなどがぜんぜんんちがうので速いと会場から
将来
・Xen3.2からのI/O-MMUで高速化dけいるかも
・siキューはCPUごとに独立していてスケジューリングしたCPUに縛られるので、特定のCPUに負荷が集中するので、その際別CPUへバランスする機能があったら速くなるかも
・hiを複数コアに文才しても並列度があがらない(CPU負荷が100%にならない)。→BSDでは100%まで使いきれるようなのでがんばってみる
はてなでは
・Xen使うとネットワークi/oが遅くなる
・SSHがつかえないときかんりできるようXenをつかっているという事情もあるので、仮想化しないでM/BのIPMI付のサーバ用M/B(値段的に3倍程度なので)にしていく
・Xen3.2でも再検証
・OSはCentOS
まとめ
はてなのシステム
・ハードは安価に
・ソフトでがんばる
・性能はできるだけ引き出す
・自作サーバの細かいはないしゃ、自作サーバカンファレンスで!(pixivさん、セレボさんとでカンファレンスを企画したい→会場でこまってる→楽天でよければ)
Q&A
・世界記録では9Gbpsくらいでてるのでもっとパフォーマンスあがるのでは?
・IP tableのF/が20〜30かかってるので、負荷が高い
・CentOSをカジュアルにつかっている
・カーネルオプションは変えていない
・カーネルのバージョンをあげるべきでは?→社内的には嫌がらる(カーネルバージョンはすべて統一したい。RAIDのドライバとかではまりたくない)
打倒アマゾン!
楽天は仮面ライダーアマゾン打倒を目指す悪の秘密結社だったのだ!
/
勉強会のあとは、有志による2次会。
大変濃いメンバーがあつまりました。