こんにちは
最近、サーバ仮想環境というものを知ったのですが、仮想にサーバプログラムを置いても、処理をするのは物理PCなのだから、一斉に複数のプログラムを実行したら物理サーバがショートするのではないですか??
もしよろしければ回答お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
心配いりません。
現在のCPUは、CPUのハードウェアの機能として、仮想CPUを生成できる仕組みをもっています。
仮想CPUを生成する?という話がよく分からない所もあるかもしれませんが・・・例えば、古いゲーム機などのシミュレータソフトみたいなものありますよね、そのイメージでもよいかもしれません。まったく別のコンピュータ(ゲーム環境)が動作していますよね、、、。
そのような事を、CPUの機能としてハードウェアレベルで実現しています。
話を戻して、
いわゆる物理CPUと、仮想CPUという言い方をしますが、
物理CPUの中に、仮想CPU(いわゆるIntel 80x86とか、にあたるもの)を、複数生成できます。よって、物理CPUの中で、複数の(仮想CPUで動く)コンピュータを動作させることができます。
レジスタや、クロックなどなど、CPUのリソースは、仮想CPU毎にそれぞれに固有に生成されているので
その仮想CPU上で動作しているコンピュータは、
物理CPUや、他の仮想CPUとは、
まったく別の環境として切り離されており、
それらが干渉することは、基本的に(物理CPUにバグがなければ)有り得ません。
(もちろん別途物理CPU側には、この仮想CPUをコントロールする命令群があります。)
メモリについても、物理メモリは物理CPUが管理して、仮想CPUに必要な分を、仮想CPUから見たら自分のCPUに繋がっている物理メモリのように振る舞うように、割り当てます。
これらのような動作をしますので、
仮想環境で動かしたC++のプログラムは、仮想環境内にのみ影響を与えます。繰り返しになりますが、他の仮想環境や、そもそもの物理CPUとは、切り離されています。
また仮想環境と言うモノの、普通にインストールした物理PCと何らかわりはありません(性能は別ですが)。
ただし、すでに書かれていますが、物理CPUの性能は決まっているので、仮想CPU内で動作するプログラムは、物理CPUの性能の上限にもちろん制限されます。
なかなか、うまく説明できませんが。。。
投稿2015/11/02 19:50
総合スコア1283
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
まず、仮想マシンが何かというレベルから勉強されては?
http://gihyo.jp/dev/serial/01/vm_work
投稿2015/11/02 13:03
総合スコア16415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
物理PCがショートしてしまわないように、仮想環境を提供しているアプリケーションは、仮想環境それぞれに、どのくらいまでCPU時間やメモリを割り当てるかを制御して、MAXで動かさないようにしています(その辺がしっかりできていないものもあるかもしれませんが...)。
たとえば、メモリ使用量の合計が物理PCの搭載量のキャパを超えそうになると、仮想環境のいくつかを無理やり一時停止(サスペンド)させて、物理PCがショートして共倒れにならないようにしたりします。
また、仮想環境に対応しているOSは、自分が何もしていない時間(アイドルタイム)は、他の仮想環境にCPU時間を譲って仮想環境どうしでシェアします。メモリも、実際に確保・利用する段階まで物理PCにメモリを要求しません。
業務用レベルのもの(vSphere や Hyper-Vあたり)になると、構築した仮想環境それぞれに「物理PCがもつCPUの最大40%までCPU時間を分ける」「物理PCのCPUは8コアだが、このうちあなたの仮想環境では2コアまで使ってよい」など、管理者が細かく指定できるものが多いです。
http://builder.japan.zdnet.com/virtualization/20371977/4/
仮想環境の導入では、仮想環境でどのくらいのパワー(リソース)が必要か計算をしておき、余力がある物理PCを選んで使うに限ります。
投稿2015/12/02 04:25
編集2015/12/02 04:41総合スコア728
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
サーバと言ってるからには、純粋に仮想マシンの仕組みを訊いてるのではなくて、VPSなどの共用型仮想サーバサービスなどのことで質問しているのだと解釈しました。
たしかに他人と共有しているリソースなので、一部のユーザーがリソースを占有してしまうことはありえますが、それは基本的には他人が使っていないリソースでもあります。もし物理環境の限界を超えるリソース要求があった場合には、なるべく平等に分けられるでしょう。別の言い方をすると平等に制限を食らうようなものです。CPUでもIO帯域でもだいたいそうです。
最近はどうなのか知りませんが、以前AWSだと「当たり」と「外れ」のインスタンス(t1.micro)がありました。アタリの(空いてる)インスタンスに割り当てられるまで再起動とか生成/破棄を繰り返すという不毛なテクニック(?)があったのです。外れのインスタンスというのは、質問者さんが言うように「一斉に複数のプログラムが実行」されたような状態で、物理ホストが忙しすぎて全員が少しずつ制限を食らっている状態です。
このように共用型のデメリットもありますが、経済的メリットも大きいので・・・要するに安く使えるわけです。考えてみると「全員が一斉に使わない」という前提で運用されているものは沢山あります。電力、水道、高速道路、通信網…などなど、全員が一斉にフルに使えるほどの供給能力はありません。その供給能力を整備するにはあまりにも高くつきすぎるのです。
ちなみに、業者様の仮想サーバのホスト(物理マシン)は24コアとか32コアのと~ってもリソースの多いものが普通ですので、あんまり神経質にならなくても大丈夫ですよ。
投稿2015/11/07 07:57
総合スコア1149
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。