科孊的芳点からクラりド内のバグを怜玢予期しない冒険のCEO







Stephen Wolframの投皿「 Scientific Bug Hunting in the CloudAn Unexpected CEO Adventure」の翻蚳

翻蚳に協力しおくれたキリル・グれンコに深く感謝したす。



Wolfram Cloudは完璧でなければなりたせん



Wolfram Cloudはたもなくベヌタテストを終了したすが、珟時点ではこのシステムをできる限り良くするために倚くの時間を費やしおいたすそしお、泚目に倀したすが、本圓にクヌルだずわかりたした。 䞻に高レベルの機胜ず戊略を扱っおいたす。 しかし、私はすべおのレベルでプロセスを制埡するのが奜きです。なぜなら、CEOずしお、私は䌚瀟で起こるすべおのこずに完党に責任があるからです。 そしお、3月の初めに、私はこれたで想像もできなかった䜕かに没頭したした。



実際、それが私たちが話しおいるこずです。 ビゞネスを含む倚くの人々が䜿甚する本栌的な補造システムずしお、Wolfram Cloudは可胜な限り迅速に動䜜するはずです。 指暙は速床は十分だず蚀っおいたしたが、䜕かが間違っおいるこずは玔粋に䞻芳的でした。 時々、すべおが本圓に高速でしたが、時には、すべおが遅すぎるように思われたした。



私たちのチヌムには優秀なプログラマヌがいたすが、数ヶ月が経過し、倉化は感じられたせんでした。 それたでの間、Wolfram Data DropをリリヌスするこずができたしたHabrahabrに関する蚘事「Wolfram Data Drop- 新しいWolfram Researchサヌビス」を参照。 それでは、おそらく自分でいく぀かのテストを行い、新しいWolfram Data Dropに情報を集めおみたせんか



Wolfram蚀語の倧きな利点は、忙しい人にずっおどれだけ良いかずいうこずです。たずえほんの数行のコヌドを印刷するだけの時間があるずしおもHabrahabrに関する蚘事を参照しおください。 長さが140文字を超えないWolfram蚀語 "を䜿甚するず、本圓に䟿利なものが埗られたす。 そしお、この堎合、問題を芋぀けるために3行のコヌドを調べるだけで十分でした。



たず、Wolfram CloudのシンプルなWolfram蚀語プログラム甚のWeb APIをデプロむしたした



In[1]:= CloudDeploy[APIFunction[{}, 1 &]]



次に、APIを連続しお50回呌び出し、そのたびに呌び出しの持続時間を枬定したした は前の蚈算結果を衚したす。



In[2]:= Table[First[AbsoluteTiming[URLExecute[%]]], {50}]



その埌、時間内に䞀連の呌び出しを䜜成したした。



In[3]:= ListLinePlot[%]



そしお、頭に収たらない䜕かを手に入れたした。 コヌルには220ミリ秒かそのような時間がかかるこずがありたしたが、 900ミリ秒の遅延が2回怜出されたした。 しかし、最もクレむゞヌなこずは、信号が量子化されおいるように芋えるこずでした



ヒストグラムを䜜成したした



In[4]:= Histogram[%%, 40]



そしお、もちろん、巊偎にいく぀かのクむックコヌルがあり、䞭倮にはかなり遅いコヌルがあり、右偎には最も遅いコヌルがありたした。 それは倉だった



これは垞に起こるのだろうかず思いたした。 そこで、 蚈画的なタスクを䜜成したした-数分ごずにAPI呌び出しを行い、Wolfram Data Dropにデヌタを送信したす。 そしお朝に戻ったずき、これは私が芋たものです



Graph of API calls, showing strange, large-scale structure



さらに奇劙な写真 倧芏暡な構造はどこから来たのですか たずえば、クラスタヌ内の特定のノヌドの速床が埐々に䜎䞋しおいるこずを理解できたしたが、なぜゆっくりず回埩するのですか



最初に考えたのは、クラりドサヌバヌから1,000マむル以䞊離れおいるため、ネットワヌクの問題に遭遇したこずです。 それから私はpingを芋たした。 しかし、いく぀かの奇劙なピヌクを陀いおちょっず、むンタヌネットです、すべおが非垞に安定しおいたした。



Ping times



サヌバヌ内の䜕かが間違っおいる



たあ、それはサヌバヌ自䜓に䜕らかの問題があるに違いありたせん。 Wolfram Cloudにはさたざたなテクノロゞヌが含たれおいたすが、基本的にはテストしやすい玔粋なWolfram蚀語コヌドです。 しかし、蚀語自䜓のレむダヌの背埌には、最新のサヌバヌむンフラストラクチャがありたす。 その倚くは、過去10幎半にWolfram | Alphaで䜿甚されたものずほが同じで、数十億の結果を出力し、過去10幎間Web Mathematicaで䜿甚されおきたものです。 しかし、もう少し厳しいコンピュヌティングシステムであるため、Wolfram Cloudの配眮は少し異なりたす。



そしお、私の最初の掚枬は、異なる蚭定が、Webサヌバヌ局で䜕かがうたくいかない理由になる可胜性があるずいうこずでした。 最終的には、むンフラストラクチャ党䜓が玔粋なWolfram蚀語で蚘述されるこずを望んでいたすが、Javaで実行されるTomCat Webサヌバヌを䜿甚する必芁がありたす。 そしお、そのようなスロヌダりンはJavaガベヌゞコレクタヌによっお匕き起こされる可胜性があるず最初に思いたした。 分析の結果、Tomcatで開始されたガベヌゞコレクションは倚少の速床䜎䞋を匕き起こしたしたが、それらはわずかであり、数癟単䜍ではなくミリ秒単䜍で枬定されたした。 したがっお、これは説明になりたせん。



私は問題を芋぀けるこずに非垞に集䞭しおいたした。 非垞に長い間、問題や゚ラヌの怜玢を深く掘り䞋げる必芁はありたせんでした。 実隓科孊をしおいるように感じたした。 そしお、実隓科孊の慣習であるように、研究の察象を可胜な限り簡玠化するこずが重芁です。 したがっお、「クラりドからクラりド」を管理するこずにより同じクラスタヌからAPIを呌び出すこずにより、ほずんどのネットワヌク芁玠を切り取りたした。 次に、クラスタヌの特定のノヌドにリク゚ストを送信するロヌドバランサヌを削陀し、特定のノヌドぞのリク゚ストをブロックしたす プラむベヌトクラりドがない堎合、サヌドパヌティのナヌザヌはできたせん。 ただし、遅延は䟝然ずしお残っおいたす。



その埌、より詳现なデヌタを収集し始めたした。 私の最初のステップは、Wolfram蚀語コヌドの絶察開始時間ず終了時間を返すAPIを䜜成し、それをAPIの絶察時間ず比范するこずでした。 そしお、ここに私が芋たものがありたす



The blue line shows the API-call times from before the Wolfram Language code was run; the gold line, after.



青い線は、Wolfram蚀語コヌドが開始する前の時間を瀺しおいたす。 金色の線は埌です。 このデヌタは、システム党䜓の動䜜がかなり悪いずきに収集したした。 初期化前の期間に深刻な枛速が芋られ、その埌の期間にわずかな単䞀の枛速が芋られたした。



そしお再び-それは非垞に奇劙だった。 枛速が「前」たたは「埌」の期間に特に関連しおいるずは思われたせんでした。 それどころか、あたかもシステムの倖郚からランダムに䜕かがそれをノックアりトしたかのように。



各クラスタヌノヌドには通垞8぀のコアが含たれおおり、各コアは独自のWolfram Engineむンスタンスで動䜜するずいう事実に混乱したした。 ゚ンゞンはバランスが取れおおり、安定しおおり、各むンスタンスは再起動せずに䜕時間も、たたは䜕日も動䜜できたす。 そしお、いく぀かのむンスタンスに䜕らかの゚ラヌが含たれおいるずしたらどうでしょうか その埌、私はプロセスの IDず実行時間を远跡するAPIを構築するこずを決定し、たずえば、合蚈凊理時間のAPIコンポヌネントの実行時間ぞの䟝存性を構築したす。



Total process time plotted against components of the API call time



実際、新しいプロセスの傟向は、より高速なAP​​I呌び出しを介しお認識され始めたしたが、特にx軞䞊のれロのポむントのグルヌプ化に泚目しお効果はわずかでした。



CPUの動力源は䜕ですか



同じマシンで実行されおいる他のWolfram Cloudサヌビスに぀いお考え始めたした。 それらが同じ量子化されたスロヌダりンに぀ながるこずは理にかなっおいないように思えたすが、システムを簡玠化するために、それらも取り陀くこずを望みたした。 たず、本番クラスタヌでノヌドを分離したした。 それから、プラむベヌトなWolfram Private Cloudのセットアップに取りかかりたした 。 しかし、枛速は残った。 異なる時期に、異なるマシンで、それらの特性はわずかに異なるように芋えたしたが。



プラむベヌトクラりドでは、未加工のLinuxに移動しお、呚りを芋回すこずができたした。 私が最初にしたこずは、Wolfram蚀語のUnixナヌティリティ「top」および「ps axl」から結果の収集を開始するこずでした。その埌、それらの分析を開始したした。 そしお、1぀のこずは非垞に明癜でした。倚くのシステム時間が垞に䜿い果たされ、Linuxカヌネルは垞に䜕かで忙しくしおいたした。 そしお、実際には、スロヌダりンはナヌザヌコヌドによるものではないように思われたした。 それらは、オペレヌティングシステムのカヌネルで発生する䜕かに由来する可胜性がありたす。



実際、システムコヌルのトレヌスを開始したした。 過去25幎ほどこのようなこずはしおいたせんが、私の過去の経隓から、倧量のデヌタを取埗できるが、解釈が難しいこずが瀺唆されおいたす。 ただし、Wolfram蚀語を自由に䜿甚できたす。



Linuxで実行䞭のstraceナヌティリティは、API呌び出しを数秒間行い、その出力には28,221,878行が含たれおいたした。 ただし、特定のシステムコヌルの開始時間ず終了時間をたずめおシステムコヌルの継続時間のヒストグラムを䜜成するのに、Wolfram蚀語コヌドの数行しか必芁ずしたせんでした。 ほんの数回のシステムコヌルでこれを実行するず、次のようになりたす。



System-call durations--note the clustering...



興味深いこずに、顕著な離散ピヌクが埗られたした。 そしお、これらのピヌクに察応するシステムコヌルを芋るず、それらはすべおfutexスレッドの同期を担圓するLinuxの䞀郚から来おいるようです。 次に、futexからの呌び出しのみを遞択し、250ミリ秒、500ミリ秒、および1000ミリ秒で鋭いピヌクを芋たした。



System-call durations for just the futex calls--showing sharp timing peaks



しかし、圌らは本圓に問題でしたか 実際、Futex呌び出しはアクティブではありたせん。 プロセッサ時間を消費したせん。 そしお、実際には、これは非垞に兞型的な状況です。I/ Oが完了するたでいく぀かの呌び出しが埅機しおいる堎合です。 したがっお、私にずっお最も興味深い点は、数癟ミリ秒かかる他のシステムコヌルがなかったこずです。



そのため、オペレヌティングシステム自䜓の速床が䜎䞋したす。



それでどうなりたすか 私は芳察し始めたした-各ノヌドの異なるコアで䜕が起こっおいたすか 珟圚、Tomcatずむンフラストラクチャの他の郚分は、マルチスレッドの玠晎らしい仕事をしおいたす。 それにもかかわらず、スロヌダりンの原因はすべおのカヌネルが異なるスレッドで動䜜しおいるにもかかわらず、すべおのカヌネルを匷制的にスロヌダりンさせるこずでした。 そしお、これを行うこずができるのは、オペレヌティングシステムのカヌネルだけです。



しかし、Linuxカヌネルがこのような速床䜎䞋を匕き起こす原因は䜕でしょうか 私はプランナヌのこずを考えたした。 私たちの状況がスケゞュヌラで䞍適切な動䜜を匕き起こす理由を理解できたせんでした。 しかし、私たちは皆スケゞュヌラを怜蚎し、さたざたな蚭定を倉曎しようずしたした。 圱響なし。

それから私はさらに芋知らぬ考えを埗た。 私が䜿甚したWolfram Cloudむンスタンスは、仮想マシンを介しお機胜したした。 しかし、「マトリックスの倖偎から」枛速が起こった堎合はどうでしょうか 仮想マシンなしで、Wolfram Cloudのベアメタルバヌゞョンをリク゚ストしたした。 しかし、提䟛される前に、仮想マシンでの損倱に費やされた時間を枬定するナヌティリティを芋぀けたしたが、無芖できるこずが刀明したした。



この時点で、私は毎日1時間か2時間この問題に察凊したした。 圓時、私はSXSWフェスティバルに忙しい旅行をしおいたしたHabrahabrの蚘事「 Stephen WolframFrontiers of Computational ThinkingSXSWフェスティバルからのレポヌト 」を参照。 これたで、圓瀟のクラりド゜フトりェア蚭蚈チヌムの専門家はこの問題に積極的に関わっおきたしたが、私はこのタスクを圌らの熟緎した手に委ねたした。



戻ったずき、他の興味深い点に出䌚いたした。 各API呌び出しを15の䞭間ステップに分割したした。 次に、物理孊の分野で博士号を取埗した゚ンゞニアの1人が、各ステップ巊偎での枛速の確率ず、このステップに費やされた平均時間右偎を比范したした。



Bars on the left show the probability for a slowdown in particular substeps; bars on the right show the median time spent in each of those substeps



1぀の䟋倖既知の理由が原因を陀いお、明確な盞関関係が埗られたした。 すべおがLinuxカヌネルおよびその制埡䞋で動䜜するすべおのものが理解できない䜕かの圱響䞋にあり、完党にランダムな時間に萜ちたように芋え、APIの䞀郚が呌び出されたずきに非垞に遅くなりたした。



そしお、これらの枛速の原因を探し始めたした。 次に気付いたのは、倚数のI / O操䜜です。 テストした構成では、Wolfram CloudはNFSシステムを䜿甚しおファむルにアクセスしたした。 NFSのプッシュ、さたざたなパラメヌタヌの倉曎、非同期モヌドの䜿甚、TCPの代わりにUDPの䜿甚、NFSサヌバヌのI / Oスケゞュヌラヌの倉曎などを詊みたした。倉曎はありたせん。 Cephず呌ばれる完党に異なるファむルシステムを䜿甚しようずしたした。 同じ問題。 次に、ロヌカルディスクをメモリずしお䜿甚しようずしたした。 結局、それはうたくいったように芋えたす-ほずんどのスロヌダりンは消えたしたが、いく぀かは残りたした。



これをサむンずしお、I / O゚リアをさらに掘り始めたした。 同じノヌドで倚数のAPI呌び出しを起動するずきに、ノヌドで巚倧なメモ垳​​を線集する実隓を実斜したした。



Graph of system time, user time, and API time spent editing a huge notebook--with quite a jump while the notebook was being edited and continually saved



結果は面癜かった。 メモ垳が線集されたそしお垞に保存されおいた期間䞭、API呌び出しは100ミリ秒ではなく500ミリ秒続きたした。 しかし、単玔なファむル操䜜が8぀のコアコアすべおに倧きな圱響を䞎えたのはなぜですか



犯人が芋぀かりたした



私たちはさらに掘り始め、すぐに単玔なファむル操䜜は実際のものではないこずに気付き、すぐにその理由を理解したした。 ご存知のように、玄5幎前、Wolfram Cloudの開発の開始時に、ファむルのバヌゞョントラッキングを詊しおみたかったのです。 そしお、プロトタむプずしお、誰かがRCSず呌ばれる単玔なバヌゞョン管理システムを導入したした。



䞖界の倚くの゜フトりェアシステムは、ほが30幎間にわたっお重芁な曎新が行われおいたせんが、RCSを䜿甚しおいたすが、今でははるかに優れた゜リュヌションがありたすノヌトブックでのキャンセルの無限の可胜性に䜿甚するような 。 しかし、䜕らかの理由で、同じRCSプロトタむプがWolfram Cloudコヌドベヌスで眮き換えられるこずはなく、すべおのファむルで実行されおいたした



RCSの特城の1぀は、ファむルが1ビットだけ倉曎された堎合でも、倧量のデヌタファむル自䜓のサむズの数倍の堎合もあるがディスクに曞き蟌たれるこずです。 䞀般的にどのくらいのI / O操䜜が期埅できるかはわかりたせんでした。 しかし、RCSがこのプロセスを䞍圓に匷力にしたこずは明らかでした。



I / O操䜜は実際にLinuxカヌネル党䜓をハングさせるこずはできたすか おそらく、未知のグロヌバルゲヌトりェむがありたす。 おそらく、ディスクサブシステムは、完党なバッファをすぐに投入できないためにハングしたす。 おそらく、カヌネルはメモリの倧郚分にアクセスできるようにするためにWebペヌゞの再レンダリングに忙しいでしょう。 あらゆるこずが起こる可胜性がありたすが、RCSを眮き換えるだけで、どのような倉曎が生じるかを確認するだけでよいこずは明らかでした。



私たちはそれをしたした、そしお、芋よ、これらの恐ろしい枛速はすぐに消えたした



そのため、1週間の集䞭的なデバッグの埌、問題の解決策が埗られたした。 そしお、繰り返された実隓の間、すべおが正垞に機胜するようになりたした-API呌び出しの時間は、テストクラスタヌぞの転送時間よりも完党に優先されたした。



Clean run times! Compare this to the In[3] image above.



Wolfram蚀語ずクラりド



これは䜕を教えおくれたしたか 第䞀に、私の印象は、これたで遭遇したこずのないクラりド゜フトりェア-最も困難な敵察的でもある開発およびデバッグ環境です。 第二に、クラりドのような耇雑なシステム内で発生するすべおを分析、芖芚化、敎理するための䞀皮のメタシステムずしお、Wolfram蚀語がどれほど䟡倀があるかを実感したした。



デバッグに関しおは、この問題にやや甘やかされおいたす-圧倒的にりォルフラム蚀語で曞いおいるので、デバッグが非垞に簡単で、゚ラヌを芋぀けるために数分以䞊費やす必芁はほずんどありたせんでした。 Wolfram蚀語で簡単にデバッグできるのはなぜですか たず第䞀に、コヌドは通垞簡朔で読みやすいためだず思いたす。 たた、コヌドは通垞、テストできるノヌトブックで蚘述され、プログラムの各郚分は䜜成時に文曞化されたす。 もう1぀の重芁な詳现は、Wolfram蚀語はシンボリック蚀語であるため、い぀でもプログラムのどの郚分でも䜿甚でき、独立しお動䜜するこずです。



䜎レベルでの゜フトりェアのデバッグは、たったく異なるプロセスです。 それは医療蚺断を行うプロセスにはるかに䌌おおり、耇雑なマルチコンポヌネントシステムも凊理し、いく぀かの枬定たたは実隓の結果に基づいお蚺断を詊みたす類掚するず、バヌゞョン管理の問題は䜕らかのひどい欠陥のように芋えるかもしれたせんDNA耇補。



このクラりドアドベンチャヌ党䜓は、Wolfram Cloudの䟡倀を匷調しおいたす。 Wolfram Cloudの重芁な郚分は、耇雑なクラりドむンフラストラクチャ゜フトりェアのすべおの問題からナヌザヌを保護し、Wolfram蚀語で盎接䜕かを開発および展開できるようにするこずです。



もちろん、これを可胜にするために、自動化されたむンフラストラクチャ党䜓を構築する必芁がありたした。 そしお今、この「科孊的アプロヌチによるデバッグ」の小さな冒険のおかげで、私たちはこれに䞀歩近づきたした。 実際、これたでのずころ、Wolfram Cloudには独自のAPIがあり、それは䞍可解な量子化されたスロヌダりンなしで機胜し、ベヌタ版を完党に終了できる状態にすぐに近づきたす。



All Articles