クラウドのアカウンティングプロセッサ時間について

ローンチ後、クラウドでリソースがどのように考慮されるかについて多くの質問を受けました。 「プロセッサ時間の時間」が何であるかを直感的に理解する人もいますが、詳細な説明が必要な人もいます。 一般的な発表では、詳細な説明には多くのスペースが必要になるため、別のトピックに入れました。 同時に、この形式により、Xenと仮想マシンがどのように相互作用するかをより詳細に説明できます。 このテキストのレベルはノンフィクションです。つまり、リングバッファー、偽装イベント、「クレジットプランナー」などのジャングルには入りません。代わりに、ハイパーバイザーがゲストマシンを制御する方法について人間の言語について話そうとします。





プロセッサー時間とは何ですか? 最初は、より馴染みのある「マシンタイム」と呼びたいと思いました。幸いなことに、このような用語は、マシンタイムを分離するというアイデアが生まれたが、やがて停止するメインフレームの時代に使用されました。 それらの年のマシン時間は、マシンによって使用されたすべてのリソースを意味し、私たちの場合、プロセッサについて話しているのは、各制限されたリソースが個別に考慮されるためです。



それでは、「プロセッサ時間」とは何ですか?また、1つの仮想マシンが1日4時間で、別の仮想マシンが10時間で30「時間」を要することをどのように確認できますか?



Selectelクラウドは、Xenを実行しています。Xenはハイパークラウドとして機能するXen Cloud Platformを実行しています。



Xenには、ドメインプランナーの概念があります。 ドメインと仮想マシンの違いは別として(ドメインは実行中の特定の仮想マシンであり、仮想マシンがリブートすると、仮想マシンがオフになると新しいドメインになります。ドメインはありませんが、マシン自体はそうです)、これは仮想マシンのスケジューラであると想定できます。 最近のOSの操作に精通している人は、おそらくドメインスケジューラがこれらの非常に最近のOSのプロセススケジューラに疑わしいほど似ていることをすでに推測しているでしょう。



仮想マシンはどのように見えますか?



イベントが発生します:ネットワークパケットの到着、タイマーのトリガー、リセット信号など。 Xenは、仮想マシン(より正確にはドメイン)の実行を開始するようにプロセッサーに指示しますが、この説明ではこれらの概念は同等であると見なします。 仮想マシンのコアは、起動するイベントを処理します。 必要に応じて、ユーザープロセスを呼び出します。 プロセスは作業を行い、コアに「すべてが完了しました」と言います。 カーネルはその質問を理解し、ハイパーバイザー(Xen)にも伝えます-「それで終わりです」。 その後、Xenはマシン実行を停止します。 彼女は言葉の文字通りの意味では何もしません。 新しいイベントが発生するまで、マシンはこの状態のままです。



最新のマシンでは、これらのイベントは非常に速い速度で発生します。たとえば、5 Mb / sの速度でファイルをダウンロードした場合、これ(パケットサイズ1,500バイト)は毎秒3,000パケットを超えます。 各パッケージは個別の割り込みです(より正確には、Xenではすべてが複雑で、複数の呼び出しが1つにまとめられているため、仮想マシンはベアメタルよりも少し速い場合があります)。 そして、そのような出来事はすべて機械の目覚めです。 しかし、最新のプロセッサの速度は、そのような呼び出しのたびに、仮想マシンのコアとプロセス(たとえば、Apacheやnginx)がうまく動作して眠りに落ちるほどです。 5Mb / sのスタティックリターンは非常に低い負荷であり、1つのプロセッサコアの約1-2%であるため、300マイクロ秒の間隔でイベントが発生するという事実にもかかわらず、仮想マシンは3-6マイクロ秒で処理し、残りの294- 296マイクロ秒は、ハイパーバイザーに「私はすべてです」と言って眠りに落ちます。 そして再びマイクロ秒が起きたら、運動して再び眠りに落ちます。 そして、仮想マシンはほとんどの時間だけスリープすることがわかりました。



これらは、まさに仮想マシンが実行されている時点であり、「プロセッサー時間」です。



思慮深い読者が尋ねるかもしれません-仮想マシンが「私はすべてだ」と言っていない場合はどうなりますか? 協力的なマルチタスクが存在するWindows 3.11がある場合、これは残りのユーザーが時間を取得できないという事実につながります。 しかし、Xenはプリエンプティブマルチタスクを使用します-あまりにも熱心に実行される仮想マシンは一時停止されます。 強制された。 そして再び続けました。



通常、この状況は、プロセッサ時間が不足している場合に発生し、Xenの作成者は、プロセッサの輻輳状態で時間を分散する問題を解決する公平なスケジューラの開発に数千時間を費やし、だれもがほぼ均等に作業を継続できるようにします。



ただし、最新のホスティングの実際の条件では、プロセッサの速度が非常に高いため、プロセッサは最も要求が少なく、アイドル状態のリソースであり、99%の場合、リソースの競合はまったくありません。



CPU時間は、仮想マシンが実行されている時間です。 彼女が1時間に2秒働いた場合、これはそうです。 40分なら-40分。 CPU時間は、クロックの「実際の」時間とは関係ありません。 Xenは仮想マシンにコマンドを送信するため、Xenは各マシンがナノ秒までどれだけの時間を処理したかを正確に把握しています。 この値をマイクロ秒に丸めて(int64の問題を回避するため)、請求には完全な秒のみが記録されます(1秒間実行されるまで小数部分が累積されます)。 プロセッサー時間のお金は、少なくとも1コペック(現在36秒)を実行するとすぐに引き落とされます。 比較のために、仮想マシンのロードはマシン時間の約3〜6秒を消費し、これはドメインのライフサイクルで最も「高価な」操作です。



もう1つの重要な詳細は、マルチプロセッシングです。 いくつかのプロセッサコアは、実際には独立したプロセッサです。 そして、彼らは並行して働くことができます。 複数のユーザーに5MB / sを割り当てたとしましょう。 ある時点で、古いパケットを送信する前に新しいパケットを送信する必要があります(たとえば、0.5マイクロ秒の間隔が経過した)。 プロセッサが1つある場合、この要求はキューに入れられ、最初の要求の後に処理されます。 ただし、複数のプロセッサがある場合、要求は、すでに占有されているプロセッサに関係なく、最初の空きカーネルによって処理されます。



負荷が高い場合、複数のプロセッサが同時に動作していることがわかります。 この場合、それぞれが機能し、プロセッサー時間が加算されます。 同時にロードされる2つのコア-1秒あたり2秒のマシン時間。 8は8です。 現実には、通常、いくつかのカーネルが占有されていますが、完全ではありません。つまり、ある時点では2つのカーネル、ある時点では3、ある時点では動作します。 したがって、何万人もの顧客にサービスを提供する8コアマシンでは、1時間あたり10分のプロセッサー時間を見ることができます。



マシンの負荷が100%未満の場合(つまり、1時間あたりのプロセッサ時間が1時間未満の場合)、正式には、1つのコアに制限できます。



しかし、同時顧客サービスについて上で言ったことを覚えていますか? いくつかのコアは、リクエストへの「応答性」を高めますが、リクエストへの応答時間を長くすることはできますが、おそらく1つのコアが非常にうまくいったでしょう。



ところで、これは答えであり、別の質問です:コアの数は消費されたCPU時間に影響しますか? 答えはノーです。これらのコアがアイドル状態の場合、プロセッサー時間は使用されません。 多数のコアは、複数のクライアントからの同時リクエストを処理する際の遅延を減らすだけです。



「時間を与える」という概念を理解する方法について少し説明した後、「時間を割り当てます」。 プロセッサはシリコンと愚かな鉄片です。 プロセッサでできることは、コードを実行することだけです(まあ、割り込みに応答します)。 また、プロセッサは「仮想マシンドメイン」、つまり実行中の怒っている鳥のコピーを実際には理解していません。 したがって、「ドメイン」、「ハイパーバイザー」の概念は、ある意味では慣習です。 「仮想マシンが10ミリ秒実行されていた」と言うとき、実際には「プロセッサが仮想マシンのコードを10ミリ秒実行した」というフレーズを意味します。 「ハイパーバイザーが仮想マシンに取って代わった」と言うとき、実際には「タイマーを中断し、プロセッサが時間カウンターを更新し、プロセスコンテキストを保存し、タイマーが中断した場所以外の場所に制御を移した」という意味です。 オブジェクト(コード)を行動能力を持つ主題に変換すると、説明が大幅に簡略化されます。各プログラムには動作アルゴリズムがあり、「プログラムを実行するプロセッサ」ではなく「プログラムはこのように動作します」と言う方が簡単です。これとそれを行います。」



今、少し食べます。 記事の冒頭には、会社全体からの呼び出し、Webサーバー、ルーターからの統計収集などでアスタリスクを保持する非常に忙しいサーバーのグラフがあります。 以下は、1日あたり約5,000人のユニークビジターがいるサイトです。 これは、プロセッサが最新のサーバーアプリケーションを使用するかどうかの問題です(グラフ上のシアンはアイドルプロセッサです)。



All Articles