Linux 割り込み仮想化 1

Linux 割り込み仮想化 1

[[437491]]

割り込みはコンピュータ システムの非常に重要な部分です。基本的なコンピュータ理論の本では、割り込みについての説明に多くのスペースが割かれていることがよくあります。しかし、開発者に代わってオペレーティングシステムが割り込みを処理するため、システムエンジニアでない限り、一般的な開発者が割り込みについて非常に直感的に理解することは困難です。したがって、ソフトウェアを通じて割り込みをシミュレートする方法を理解することはさらに困難です。

したがって、この章では、ハードウェア割り込みの基本原理を簡単に紹介し、次に割り込みの基本原理に基づいて割り込みチップを仮想化する方法について説明します。まず、IBM PC のシングルコア システム用に設計された PIC (8259A) メカニズムから始め、マルチコア システム用に設計された APIC について説明し、最後に I/O APIC をバイパスしてデバイスから LAPIC に直接メッセージを送信する MSI メカニズムについて説明します。

割り込みチップは、ユーザー空間またはカーネル空間でシミュレートできます。ただし、割り込みチップはカーネル内のゲストおよび KVM モジュールと集中的に対話する必要があるため、カーネル空間でシミュレートする方が明らかに合理的です。そのため、KVM はカーネル内に割り込みチップのシミュレーションを実装します。最後に、Intel が効率性を向上させるためにハードウェア レベルで仮想化割り込みをサポートする方法と、KVM がそれをどのように使用するかについて説明しました。

仮想割り込み

ゲスト モード CPU が割り込みを処理する方法について説明する前に、まず物理 CPU が割り込みにどのように応答するかを確認しましょう。オペレーティング システムが CPU に割り込みへの応答を許可すると、命令が実行されるたびに、CPU は割り込みピンが有効かどうかを確認します。有効な場合、CPU は割り込みを処理し、図 3-1 に示すように次の命令を実行します。

図1 CPU処理割り込み

CPU で処理する必要がある割り込みがある場合、割り込みチップは CPU の INTR ピンを効果的に接続します。つまり、INTR がハイレベルで有効な場合、割り込みチップは INTR ピンのレベルをプルアップします。 CPU は命令の実行を終えると、INTR ピンをチェックします。同様に、仮想割り込みもこのメカニズムに従います。仮想割り込みチップは、CPU の INTR ピンに接続された「ピン」を有効にする役割を担います。次に、各 VM エントリで、KVM は仮想ミッドエンド チップの INTR「ピン」が有効かどうかを確認します。ソフトウェア仮想割り込みチップの場合、「ピン」は単なる変数です。 KVM は、仮想割り込みチップに割り込み要求があることを検出すると、VMCS の VM エントリ制御部分の VM エントリ割り込み情報フィールドに割り込み情報を挿入します。その後、ゲスト モードの CPU は、ゲスト システムの IDT 内の対応する割り込み処理サービスを実行します。図 3-2 は、PIC 割り込みチップを使用したシングルコア システムの仮想割り込みプロセスを示しています。

図2 PICベースの仮想割り込みプロセス

具体的な手順は次のとおりです。

1) 仮想デバイスは仮想割り込みチップ PIC に割り込み要求を送信し、仮想 PIC は仮想デバイスの割り込み情報を記録します。物理割り込みプロセスとは異なり、仮想 PIC チップの割り込み評価ロジックはこの時点ではトリガーされませんが、VM エントリ時に実行されます。

2) 仮想 CPU がスリープ状態の場合は、仮想 CPU を起動します。つまり、仮想 CPU に対応するスレッドを物理 CPU の準備完了タスク キューに入れて、いつでも実行機会を得られる状態にします。

3) 仮想 CPU が実行を開始すると、ゲストに切り替わる直前に、KVM モジュールは仮想 PIC チップをチェックして、処理する必要がある割り込みがあるかどうかを確認します。この時点で、KVM は仮想 PIC チップの割り込み評価ロジックをトリガーします。

4) 仮想割り込みチップがゲストが処理する必要がある割り込みがあることを計算すると、割り込み情報が VMCS の VM エントリ割り込み情報フィールドに挿入されます。

5) ゲスト モードに入ると、CPU はゲスト IDT 内の対応する割り込みサービスを呼び出して割り込みを処理します。

PIC はシングルプロセッサ システムのみをサポートできます。マルチプロセッサ システムでは、APIC サポートが必要です。仮想化には当然、対応する仮想 APIC も必要ですが、その本質は基本的に PIC と同じです (図 3-3 を参照)。

図3 APICベースの仮想割り込みプロセス

シングルプロセッサの場合と比較して、マルチプロセッサの仮想割り込みには主に 2 つの違いがあります。

1) マルチプロセッサ システムでは、異なる CPU が割り込みを送受信する必要があります。したがって、各 CPU は LAPIC と呼ばれる独立した割り込みチップに関連付ける必要があります。 LAPIC は、CPU 間のプロセッサ間割り込み (IPI) を受信する必要があるだけでなく、周辺機器からの割り込みも受信する必要があります。周辺機器の割り込みピンを各LAPICに接続することはできません。そのため、周辺機器の接続を担当する統合 I/O APIC チップが存在します。 1 つの I/O APIC ピンでは不十分な場合は、システム内で複数の I/O APIC を使用できます。 LAPIC と I/O APIC は両方とも割り込みバスに接続され、バスを介して通信します。したがって、仮想化シナリオでは、仮想 LAPIC と I/O APIC の 2 つのコンポーネントが必要になります。

2) 複数のプロセッサの場合、スリープ状態になっている可能性のある仮想 CPU スレッドを単に起動するだけでは不十分です。仮想 CPU が別の物理 CPU 上でゲスト モードで実行されている場合は、ターゲット CPU をゲスト モードからホスト モードに移行させるために IPI 割り込みをその CPU に送信し、次の VM エントリで割り込み挿入を実行する必要もあります。

ゲスト モードの CPU と仮想割り込みチップは 2 つの異なる世界にあるため、ゲスト モードの CPU は仮想割り込みチップのピンをチェックできません。 VM エントリ時に KVM モジュールによってのみチェックされ、その後 VMCS に書き込まれます。したがって、割り込みを挿入する必要がある場合、ゲスト モードの CPU は VM モードからホスト モードに移行する必要があり、これは大きなオーバーヘッドになります。

VM 終了のオーバーヘッドを排除するために、Intel はハードウェア レベルで割り込み仮想化をサポートしています。 LAPIC はレジスタを格納するためにページ サイズのメモリを使用します。ゲストがこれらの LAPIC レジスタにアクセスすると、VM が終了することが分かっています。ただし、実際には、これらの LAPIC レジスタへのアクセスには VMM の介入が必要ないため、VM 終了は必要ありません。そのため、Intel は仮想 APIC ページと呼ばれるページをゲスト モードで実装しています。さらに、Intel は、図 4 に示すように、仮想割り込みロジックと呼ばれる割り込み評価などのいくつかの割り込みチップ ロジックもゲスト モードで実装しています。

図4 ハードウェア仮想化でサポートされる割り込み仮想化プロセス

Intel はハードウェア レベルでの仮想化をサポートし、割り込み関連のレジスタを格納するための仮想 APIC ページをゲスト モードで実装します。さらに、Intel は、割り込みの評価と配信のために、ゲスト モードでいくつかの割り込み チップ ロジックも実装しました。

この場合、LAPIC は割り込みを受信する限り、次の VM エントリを待機して受動的に割り込み評価を実行する必要はなく、ゲスト モードの CPU に情報をアクティブに通知します。この場所はポスト割り込み記述子です。ターゲット CPU がゲスト モードの場合、ポスト割り込み通知と呼ばれる特殊なコア間割り込みを使用してターゲット CPU に通知し、仮想割り込みロジックをトリガーします。仮想割り込みロジックはゲスト モードで評価され、VM 終了/VM エントリを通じて割り込みを挿入せずに仮想 CPU に割り込みを配信します。

ハードウェア仮想化のサポートにより、ゲスト モードの状態とロジックを使用して、割り込みレジスタへのアクセス、割り込み状態の追跡、CPU への割り込みの送信など、多くの割り込み動作をシミュレートできます。したがって、多くの割り込み動作では VMM の介入が必要なくなり、VM 終了の数が大幅に削減されます。もちろん、割り込みレジスタへの書き込み操作には副作用があるものもあります。たとえば、icr レジスタに書き込むことによって IPI 割り込みを送信するには、VM 終了をトリガーする必要があり、ローカル LAPIC は IPI 割り込みをターゲット LAPIC に送信します。

王百生氏は、中国科学院ソフトウェア研究所、Hongqi Linux、Baidu で勤務した上級技術専門家です。彼は現在、Baiduのチーフアーキテクトを務めている。長年にわたり、オペレーティングシステム、仮想化技術、分散システム、クラウドコンピューティング、自動運転などの関連分野に携わり、豊富な実務経験を持っています。彼はベストセラー書籍『Deep Exploration of Linux Operating System』(2013 年出版)の著者です。

Xie Guangjun は博士です。南開大学コンピュータサイエンス学部を卒業し、コンピュータサイエンスの博士号を取得しました。 IT 業界で長年の経験を持つ上級技術専門家。現在、Baidu Smart Cloudの副ゼネラルマネージャーを務め、クラウドコンピューティング関連製品の研究開発を担当しています。長年にわたり、オペレーティングシステム、仮想化技術、分散システム、ビッグデータ、クラウドコンピューティングなどの関連分野の研究開発に従事し、豊富な実務経験を持っています。

この記事はWeChatの公開アカウント「Linux Reading Field」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Linux Reading Field 公式アカウントまでご連絡ください。

<<:  ハイブリッドクラウドストレージの新たなブレークスルー: 常に変化する状況にも負けない

>>:  エッジコンピューティングを活用してスマート製造を加速させ、業界の破壊者となる

推薦する

中国SEOの現状 簡単にランキングを獲得する方法

Sunshine Home Blog は、いわゆる SEO を行うことは実は非常に簡単なことだと考え...

SEOブログの現状:話し手は真剣だが聞き手は無関心

話し手は真剣だが、聞き手は無関心である(発音が分からない場合は、ピンインの URL を参照してくださ...

「検索エンジンは死んだ」に対する反論

今日、Huxiu.com で「検索エンジンは死んだ」というタイトルの記事を見ました。このタイプのタイ...

中国のインスタグラムのような調査:ビジネスモデルは不明、ベンチャーキャピタルは様子見

国内のモバイルインターネットは急速に発展しています。さまざまなサブセクターの動向を把握することは、こ...

インタビュー |誰かが再び Kafka について尋ねてきたら、知らないとは言わないでください。

Kafka は優れた分散メッセージ ミドルウェアであり、多くのシステムでメッセージ通信に Kafka...

入札プロモーションリンクは、Baiduが外部リンクを知るための新しいチャネルではない

今日、ウェブマスターのウェブサイトで「Baidu Knowsの新しい外部リンクチャネル:プロモーショ...

SEOのコアコンピタンス

中核競争力とは、企業(競争に参加する人材、国、個人)が長期的な競争優位性を獲得する能力です。それは、...

次の「10倍」株の構築:Kingdee International(00268)の「長期的」かつ「共生的」なアプローチ

2019年の「不確実性」に直面して、中国企業は何をすべきか? C50+ フォーラムの年間テーマは、こ...

病院のウェブサイト運営:特に注意が必要な4つの点

私は2年間SEO最適化とプロモーションの仕事に従事し、工業化学、生活サービス、ウェディング業界、医療...

なぜ SaaS は中年男性にとってのスタートアップの楽園となったのでしょうか?

この記事を読みに来る人は、SaaS で働く人と中年男性の 2 種類しかないことはわかっています。おそ...

安価なクラスタ サーバー (アジア クラスタ、ヨーロッパ クラスタ、アメリカ クラスタ、32 個の C セグメントをサポート)

SEO サーバー、クラスター サーバー、およびマルチ IP サーバーは、Web サイトのプロモーショ...

マイクロサービスはシンプルな分散ログ追跡を実装します

最近、プロジェクトに簡単な分散リクエスト追跡機能を追加したいと考えています。フロントエンドからゲート...

初心者はどのようにしてウェブサイトの最適化計画を立てるのでしょうか?

ウェブサイトの最適化がどの業界で行われるかに関係なく、特定の最適化計画が必要です。優れた最適化計画は...

写真アプリSnapchatは6000万ドルの資金調達を正式に発表した。

網易科技報、6月25日、海外メディアの報道によると、「読んだら消える」写真アプリのスナップチャットは...