LinuxのKVMで実行されているWindows 7 VMがすべての仮想プロセッサを使用しないのはなぜですか?


12

すべて

VMの1つをWindows 2008 ServerからWindows 7(究極)に移行したため、サーバーで問題が発生しました。 2つのコアがあります!

それは私のプロセッサを認識しますが、それらを使用しません!

誰がここで何が起こっているのか教えてもらえますか?KVMとWindows 7の間に非互換性があるのではないかと思っていましたが、仮想プロセッサが表示されるので、私はそうは思わないようになりました...手がかりはありませんか?

同じボックスに2つのコアのみを表示するプロセスマネージャーのスクリーンショットを次に示します。

タスクマネージャー


2つのデュアルコアプロシージャが表示されていないことを確認しますか?
フィーバス

@phoebus:それは不思議でしたが、プロセッサモニターを見ると4つのコアが表示される前にこのセットアップを実行したすべてのバージョンのウィンドウで、ここにはありません。
jkp

プロセッサモニタとは、タスクマネージャのパフォーマンスモニタリングセクションのことですか?スクリーンショットのみに基づいているため、2つの2コアプロセッサの証拠を示しています。その場合は、パフォーマンスモニターに4つのコアすべてが表示されます。そうしないと、はい、何かが不安定です。
フィーバス

@phoebus:はい、私はタスクマネージャのパフォーマンス監視セクションを意味します。確かに...私には思えるグラグラ
JKP

回答:


17

プロセッサは、別々のソケットのシングルコアプロセッサとして提供されていると思われます。Windows 7 Ultimateは最大2つのソケットシステムをサポートするため、2つのプロセッサを使用します。

プロセッサをシングルクアッドコアCPUまたは2つのデュアルコアCPUとして提示するようにKVMを構成できるかどうかはわかりませんが、これにより問題が解決するはずです。


1
そのとおりです。ATMトポロジを変更する方法はありません。
ルカテッタマンティ

1
うわー、私はこれを知りませんでした。問題に正しく触れてくれてありがとう。@Luca:そのようなサポートが計画されているかどうか知っていますか?私は実際に余分な2つのコアを使用していますか、それとも無駄になりますか?
jkp

2
@Luca:実際にはqemu 0.12以降、トポロジを変更できます。私は私のユーザ空間のKVMコンポーネントをアップグレードしたが、私は仕事にそれのための新しいカーネルのMODが必要だと思う....とにかく、それは:)行うことができます
JKP

ああ、クールです...私もアップグレードする必要があります:)
ルカテッタマンティ

現在の古いカーネルで最新のkvmカーネルモジュールを実行できることに注意してください。あなたのバイナリを持っているあなたのディストリビューションのリポジトリを見つけることができない限り、おそらくあなた自身でモジュールをコンパイルする必要があるでしょう。ただし、モジュールの作成はそれほど難しくありません。
3dinfluence

21

libvirt 0.8.3では、次のように入力すると:

virsh capabilities | grep topology

ホストのトポロジーをリストします:

<topology sockets='1' cores='4' threads='1'/>

番号は、ソケット、ソケットごとのコア、およびコアごとのスレッドを示します。この行をxmlファイルのcpuエントリに追加して、Windowsが4つのコアすべてを使用できるようにします。例:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>

それを知っていたが、それを忘れてしまった-それから再びサーバーフォールトとすべてのこの素晴らしいものを書いているすべての人々があります。先端をありがとう!
フェン

1
これをRHEL 7.2マシンで試しました。<topology sockets='1' cores='4' threads='1'/>私のxmlに追加されました。virsh capabilities | grep topologyショー<topology sockets='1' cores='6' threads='2'/>kill -HUP nnnnn重要:nnnnnはlibvirtdプロセスのPIDです。VMを開始しました。動いた。+1!ありがとう!...しかし、HUPシグナルまたは再起動でlibvirtdをキックすることを忘れないでください!
マイクS

4

Ubuntu 15.04以降、virt-managerではトポロジ設定が完全​​にサポートされています。

virt-manager> CPUs> Topologyから:

  • チェック:CPUトポロジを手動で設定する
  • ソケット:2
  • コア:2
  • スレッド:2

上記はvirt-managerの設定から作成されます。これらをvirsh editで入力する必要はありません。

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

トポロジは、更新後にWindowsに認識されなくなり、再び仮想CPUを2ソケットに制限します。

これを修正するには、「virsh edit」を使用してkvm機能を非表示にし、hyperv機能を追加します。完全にシャットダウンして再起動すると、Windows VMは再び複数のCPUを認識します。

LinuxのKVMで実行されているWindows 7 VMがすべての仮想プロセッサを使用しないのはなぜですか?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

2

RHEL / CentOS 5.5(kvm> = 83-164.el5)では、kvmバイナリは「-smp N、cores = N」オプションもサポートしています(パッケージにバックポートパッチがあります)。ただし、libvirtバージョンは、ドメインXMLの<topology>要素をサポートしていません。回避策は、/ usr / libexec / kvmのラッパースクリプトを作成して適切なオプションを追加し、デフォルトスクリプトではなく<emulator>要素でそのスクリプトを指定することです。


1

Ubuntu 10.4(Lucid)にはバージョン0.7.5のlibvirtがありますが、トポロジーのサポートがバージョン0.7.6でlibvirt に追加されたことは注目に値します。Ubuntu 10.10(Maverick)には0.8.3 libvirtがあるため、ラッパーなしでXMLのトポロジ仕様を直接サポートできるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.