Xenでのコン゜ヌルの仕組み

この蚘事では、xvc0の動䜜原理をdomUの芳点ずdom0の芳点の䞡方から説明し、このコン゜ヌルで䜕が行われるかに぀いおも説明したす。

すぐに譊告したすが、このトピックはXenず密接に連携しおいる人にのみ興味深いものです。



Xenの芳点からのコン゜ヌル

コン゜ヌルずXenStoreは、XenStoreを通じおアナりンスされない仮想マシンの2぀のデバむスですが、聖なるもの、぀たりドメむンの開始情報ペヌゞに曞き蟌たれたす。 他のすべおのデバむスの暙準メカニズムは、XenStoreでの発衚です。 XenStoreでXenStoreを発衚するこずはやや䞍䟿であるこずは明らかです。したがっお、このデバむスは「最初から」あるべきです。



コン゜ヌルは、「通垞の」デバむスのリストに配眮できたす。 しかし、圌は特別なクラスに連れお行かれ、デバッグず蚺断の利䟿性のために「XenStoreず同等」になりたした。 カヌネルがより早くコン゜ヌルに曞き蟌むこずができるそしお読み取るこずができるほど、故障の原因を特定するのにコン゜ヌル䞊の情報で十分である可胜性が高くなりたす。



最も䜎いレベルでは、コン゜ヌルはメモリ1ペヌゞi386 / x86_64の堎合は4kのサむズのリングバッファを䜿甚したす。 このリングバッファヌは1024/2048の比率で分割され、前半は入力「抌された」ボタンのバッファヌに䜿甚され、埌半は出力画面に衚瀺される文字ずESCコヌドに䜿甚されたす。



リングバッファずは䜕ですか これは、アドレス空間が閉じられたデヌタ構造です4095が0、1、2 ...、4095、0、1 ...などに無限になった埌。 バッファヌには2぀のマヌカヌがありたす-キュヌの開始ず終了です。 明らかに、新しいデヌタは最埌たで曞き蟌たれたすが、最初から読み取られたす。 たたはその逆これは甚語の問題です。 1぀の条件のみがチェックされたす-終わりは始たりに達しおいたせん。 たたは、始たりが終わりに達しおいたせん。



アルゎリズム郚分は別ずしおおきたす。 さらに重芁なのは、リングバッファヌに䜿甚されるメモリペヌゞにdom0ずdomUの䞡方からアクセスできるこずです䞀般的な堎合、2぀のドメむンで䜿甚できたすが、特定の堎合、ドメむンの1぀はdom0です。



この点は理解するのが難しいそしおその説明は「コン゜ヌル」の説明をはるかに超えおいるが、芁するに次のように芋える同じ物理メモリペヌゞ倧たかに蚀っお、メモリバヌのビットには2぀のアドレスがある。 dom0に1぀、domUに2぀目。 マシンがメモリにアクセスするず、Xenは仮想アドレスを物理アドレスに倉換したす。 これにより、䞡方のドメむンが同じ物理ペヌゞに曞き蟌むこずができたす。 同時に、各ペヌゞには独自のアドレスがありたす。



ちなみに、「誰もが自分のものを持っおいたす」は単なる流行ではありたせん。 domUのメモリペヌゞのアドレスを修正できる堎合、dom0では機胜したせん-たくさんのdomUがあり、各コン゜ヌルがコン゜ヌル甚に独自のメモリペヌゞを䜿甚しおいるこずは明らかです。



そのため、domUからdom0ぞ、たたはその逆にデヌタを転送するメカニズムがありたすこのメカニズムは実際にはほがどこでも䜿甚されたすが、特定のケヌスではコン゜ヌル操䜜にも䜿甚されたす。



盞互䜜甚の2番目のメカニズムは、PVモヌドでの䞀皮の割り蟌みであるむベントチャネルです。 実際、これらの2぀のメカニズムずハむパヌコヌルは、Xenがゲストマシン甚に備えおいるものすべおであるため、たずえば、コン゜ヌルはネットワヌクドラむバヌずあたり倉わりたせん。



domUはそのコン゜ヌルに぀いおどのように知るのですか



domUに関するコン゜ヌル

仮想マシンが起動するず、dom0の特別なプログラムがそのドメむンを䜜成したす。 このプログラムはdomain_builderず呌ばれたす。 カヌネルコヌドの読み蟌みに加えお、ドメむンは他のすべおを芋぀けるこずができる情報を開始情報ペヌゞにも入力したす。 このペヌゞのアドレスは、ESIレゞスタに枡されたすx86の堎合。 他のアヌキテクチャでは、他の方法を理解されたいです。



それは、状況やむベントコン゜ヌルのチャンネル番号に぀いおのこの情報が䞀定でないこずが非垞に重芁である - ドメむンは、突然のドメむンstart_info_pageの内容を倉曎するこずを意味し、実際には、任意の時点で移行するこずができたす。



この時点で、リングバッファヌずむベントチャネルぞのバむンドがどのように機胜するかに぀いおの説明は玄50〜60 kbになっおいるはずですが、読者の蚱可を埗お、この郚分はスキップしたす。 Xenの仕組み。 各セクションの゜ヌステキストたでのより詳现な分析は、すばらしい本「The Xen Definitive Guide to the Xen Hypervisor」にありたす。



コン゜ヌルドラむバヌはどうなりたすか



ほずんどのxenaデバむスず同様に、ドラむバヌはバック゚ンドずフロント゚ンドの2぀の半分に分かれおいたす。



フロント゚ンドはdomUで機胜したす。それに぀いお芋おいきたす。 start_info_pageで察応するデヌタを芋぀けたこのドラむバヌは、キャラクタヌデバむスを䜜成したす正確には、udevによっお䜜成されたす。 このデバむスの名前は、初心者のXen管理者にずっおかなりの頭痛の皮です。 ハむパヌバむザヌが存圚する間、それは数回倉曎されおおり、リヌダヌシップはこの問題にたったく意味をなさないこずがありたす。



名前は、/ dev / xvc0、/ dev / hvc0、/ dev / ttyS0などです。 最初はxen仮想コン゜ヌル、2番目はhです。 仮想コン゜ヌル」は、Linuxの仮想化仮想コン゜ヌルの䞀般名ですhはどういうこずかは蚀いたせん。ttyS0は、仮想コン゜ヌルがシリアルポヌトに停装したXenの初期の遺産です。



そのため、デバむスが䜜成されたす。 他に䜕 起動時のカヌネルは、起動時のメッセヌゞを仮想コン゜ヌルに曞き蟌む堎所を「認識」しおいたす。



ダりンロヌドは終了したす...そしお、初心者の管理者は「ハング」したためパニックに陥りたす。 王冠が始たりたす-それだけです。仮想マシンはボタンぞの応答を停止し、ログむンを芁求したせん。



䜕が起こるかそしお䜕が起こるべきかを説明するために、ダりンロヌドが完了したずきに通垞のコン゜ヌルで䜕が起こるか考えおみたしょう。 initプロセスはinittabを読み取り、それに指定されたプロセスgettyなどを開始したす。 gettyはコン゜ヌルたたはシリアルポヌトを構成し、/ bin / loginを実行したす。これにより、埅望の「login」が衚瀺されたす。 gettyが起動しなかった堎合、これはログむンするナヌザヌがいないこずを意味したす。 「ハングしたした。」



解決策は簡単です 0:12345:respawn:/sbin/getty xvc0 9600



in / etc / inittab



名前xvc0は、ドラむバヌが䜜成するものず䞀臎する必芁があるこずに泚意しおください。 そしお、ドラむバヌは、カヌネルコマンドラむン匕数console = xvc0を介しお远加の圢匏で枡されたものを䜜成したす。 合栌しなかった堎合、デフォルトで䜿甚され、湟から掚枬するのは非垞に困難です。



したがっお、登録し、ロヌドし、倧事なログむンを確認し、ルヌトでログむンしようずしたす。そしお、名前が間違っおいるず蚀われたす。



実際には、ログむンは/ etc / securettyファむルを読み取り、ログむンできるデバむスを刀別したす。 䞀郚のディストリビュヌションでは、xvc0が登録されおいないため、手動で登録する必芁がありたす。 凊方、也杯。 ログむン



申し蚳ありたせんが、スタむルを倱いたした。「コン゜ヌルの芋方」ずいうガむドではなく、䜕が起こっおいるのかを説明しおいたす。



それでは、 右の気分のdomUになりたすか

  1. ドラむバはstart_info_pageからデヌタを読み蟌み、
  2. ドラむバヌはキャラクタヌデバむスを䜜成したす
  3. initは、このデバむスのgettyを起動したすinitではない堎合がありたすが、rc.localからでも、ssh経由でも、必芁なパラメヌタヌでgettyを実行できたす。
  4. gettyがログむンを開始
  5. ログむンは-bashを開始したす。これは、他のすべおのプロセスを担圓する制埡端末になりたす倧たかに蚀うず、Ctrl-C、Ctrl-Zなどを適切に凊理したす。
  6. 通垞の生掻を䞊のbashは、プログラムを実行したす。 圌らのために通垞の暙準出力に曞かれたプログラムは、このすべおは、ブロックバッファ内のドラむバからドラむバになっおいるからにdom0のに萜ちる、など暙準入力から読み蟌みたす...


孀独な

dom0に関するコン゜ヌル

ここで、xenコン゜ヌルの2番目の、はるかに興味深い郚分に進みたす。



dom0では、特別なxenconsoledデヌモンをリッスンしたすずころで、XenSourceではなくIBMから。 おそらく圌に代わるものを曞くこずができたすが、そのような向こう芋ずな人はただ芋おいたせん。



Xenconsoledは、リングバッファヌの内容の取埗ずむベントチャネルぞのむベントの送信に関連するナンセンスをすべお実行したす。



ドメむン管理者にコン゜ヌルぞのアクセスを蚱可するために、xenconsoledはunix98メカニズムを䜿甚しお擬䌌端末を䜜成したす。 より正確には、2぀のデバむスが䜜成され、目に芋えないルヌプバックによっお盞互に接続されたす。 そのうちの1぀はデバむスずしおも衚瀺されたせんが、ファむルハンドラヌによる抜象化のたたであり、2぀目は/ dev / pty /に衚瀺されたす。 実際、/ dev / pty / Xに曞き蟌たれるすべおのものは、読み取り時にこのハンドラヌを終了したす。 逆もたた真です-このハンドラに曞き蟌たれたものはexit / dev / pty / Xになりたす。 xenconsoledがハンドラヌからのデヌタで䜕をするかは非垞に明確だず思いたす。 リングバッファヌコン゜ヌルに曞き蟌みたす。 そしお、同じハンドラに曞き蟌み、読み出したす。



新しいドメむンがxenconsoledずきのxenstoreは圌ぞの曞き蟌みは/ dev / PTY / Xぞの道䟋えば、/ devの/ PTY / 0は、/ dev / PTY / 1。 ドメむンが消えるずリブヌト、シャットダりン、移行、擬䌌端末は消えたす。



それは/ dev / PTYで䜕をしたすか たあ、実際には、背面にコンピュヌタヌ、ルヌタヌなどがある他のcomポヌトず同じです。 端末ず接続したす。 男はパテたたは別のグラフィック端末を䜿甚でき、他の人はminicomでアクセスできたす。 組み合わせCTRL-]の無効化ができたすれナ、のために曞かれた特別なterminalkuのxenconsoleは/ usr /ロヌカル/ libに/ xenの/ binに/ xenconsole。



ちなみに、xmコン゜ヌルが起動するのは圌女ですxlコン゜ヌルも。



魔法は明らかにされおいたすか はい 次に、「付加䟡倀サヌビス」を開始したす。 仮想化サヌビスを提䟛し、dom0の管理者暩限を䞎えずに仮想マシンのコン゜ヌルを芋る機䌚を人々に提䟛したい堎合...



その埌、すべおが非垞に簡単です。 代替は、あなたがVNC経由でコン゜ヌルを芋おするこずができ、xenconsole vnctermキャラクタデバむスを「ずり」ずそれVNC接続になり、特別なプログラムです。 VNCtermはバむトを取埗したすそれらconsole_codesを描画し、ナヌザヌがVNCに接続されおいる堎合、それはビデオストリヌムを送信し、擬䌌にしがみ぀いおいたす。 圌から、圌はそれらを擬䌌端末にそしおさらにチェヌンに沿っお送信するためのボタンを受け取りたす。



クラむアントのコン゜ヌルにアクセスするこの方法には、いく぀かの欠点がありたす。たず、通垞、VNCは暗号化されたせん。 第二に、それが接続するための別のパスワヌドが必芁です。 第䞉に、コンピュヌタヌが移行たたは再起動されるず接続が切断されたすドメむンが新しいため、たったく異なるVNCtermを「リッスン」しおいたす。



グラフィカルコン゜ヌル

Xenは、グラフィカルコン゜ヌルに完党に異なるメカニズム-フレヌムバッファヌを䜿甚したす。 仮想マシンが曞き蟌むこずができるピクセル領域、およびコン゜ヌルドラむバヌがこのデヌタを読み取るピクセル領域。 コン゜ヌルデヌタ解像床ず色深床は、xenstoreを通じお通知されたす。 掗緎されたコンパクトなテキストコン゜ヌルずは異なり、フレヌムバッファは非垞に倧きくなりたす。 たずえば、1920x1050の解像床では、最倧8メガバむトかかりたす。 さらに、すべおの加速のうち、䞊にスクロヌルする画像のみが䜿甚可胜です。



実際、XenフレヌムバッファヌはHVMモヌド専甚に远加されこの蚘事の範囲をはるかに超えおいたす、HVMモヌド自䜓は、Microsoft Windowsの存圚が䞻な原因でした。 ただし、HVMはLinuxでも正垞に䜿甚されたすが、HVMの機胜ずパフォヌマンスはPVモヌドよりも劣っおいたす。



別の頭痛はframebuffer'eマりスです。 明らかに、マりスがなければ、Windowsのネゞは良くないので、キヌボヌド甚、マりス甚、フレヌムバッファ曎新甚にリングバッファを個別に䜜成する必芁がありたす。 同時に、比范的萜ち着いたキヌボヌドずは異なり、マりスには非垞に倧きな速床が必芁ですマりスの動きに関するメッセヌゞの送信ず反応のレンダリングの遅延の䞡方。



テキストタヌミナルのレむダヌ党䜓が機胜しないため、1぀の方法VNCでのみ倖郚からフレヌムバッファを芋るこずができたす。 すべおの仮想マシン甚のXenクラりドプラットフォヌムのデフォルトモヌドでVNCである理由は、ちなみに、説明 - それは同じずHVMのため、甚PV-モヌドが刀明したした。



第䞉の道

完党を期すために、それに぀いおも蚀及する必芁がありたす。domUでは、物理デバむスを「転送」できたす。 たずえば、ビデオカヌド。 この堎合、ドメむンは通垞のビデオカヌドず1察1で察応しおおり、必芁なこずは䜕でもできたす。 OpenGLず他のdirectx'yを含みたす。 ただし、ビデオカヌドは1぀のドメむン2぀のビデオカヌド-2぀のドメむンなどでのみ䜿甚できたす。たた、サスペンド埌のドラむバヌがビデオカヌドを正しく初期化できる可胜性は議論の䜙地があるため、移行は忘れおください。 サヌバヌの仮想化における実際には、この方法は䜿甚されたせん。



テキストコン゜ヌルの未来

珟圚、Xen4は耇数のコン゜ヌルのサポヌトを積極的に完了しおいたす。 「デバッグ」メむンコン゜ヌルずは察照的に、圌らはXenStorを通じお公瀺され、既存の原則に自分の仕事が倧きく異ならない「シングル。」



All Articles