GNU/Linux >> Linux の 問題 >  >> Linux

OpenStackでWindows10VMが遅いのはなぜですか?

先に進む前に、Windows 10 VMがQEMU-KVMで常に100%のCPU使用率を示すのはなぜですか?をお読みください。同じ問題がOpenStack上のWindows10VMにも当てはまり、速度が低下し、常に100%のCPU使用率を使用します。この記事では、CPUごとにすべてのコアを利用するマルチコアプロセッサでWindows10VMを実行するようにOpenStackを構成する方法を示します。

セットアップ情報

KVMバージョン: 2.12.0

ゲストOS: Windows10ホーム

ホストCPU: AMD Opteron(TM)プロセッサ6128と

  • CPUモデル:x86_64
  • CPU:16
  • CPU周波数:2000 MHz
  • CPUソケット:1
  • ソケットあたりのコア:4
  • コアあたりのスレッド:1
  • NUMAセル:4
  • メモリサイズ:65771872 KiB

マルチコアプロセッサでWindows10VMを実行するようにOpenStackを構成する方法

上記の最新のサーバーCPUは、NUMA(Non-Uniform Memory Access)アーキテクチャを使用しています。次の画像は、UMAとNUMAの比較を示しています。 NUMAアーキテクチャは、プロセッサごとに個別のメモリを提供します(すべてのプロセッサがバスを介して共有メモリにアクセスするUMAとは異なります)。同時に、プロセッサは共有バスを使用して他のプロセッサに属するメモリにアクセスできます。 CPUには、マルチプロセッサ上の他のメモリよりも高速に自身のローカルメモリにアクセスできるというパフォーマンス上の利点があります。

PIC提供:www.nakivo.com

次の図に示すようにNUMAホストでVMを実行する場合、プロセスを実行するvCPUがこれらのプロセスで使用されるメモリと同じNUMAノード上にあることが重要です。これにより、すべてのメモリアクセスがノードに対してローカルになり、限られたノード間のメモリ帯域幅を消費せず、メモリアクセスに遅延が追加されます。

OpenStackのNUMAトポロジーとCPUピニング機能の構成により、ハイパーバイザーCPUでのインスタンスの実行方法と、インスタンスで使用可能な仮想CPUのトポロジーを高レベルで制御できます。

NUMAノードの配置とトポロジを使用してフレーバーを構成する方法

以下の構成により、libvirtドライバーはゲスト用のインテリジェントなCPU/CORES配置を実行できるようになります。これにより、ゲストによるノード間のメモリアクセスを回避することで、コンピューティングリソースの有効利用率が向上し、遅延が減少します。トポロジの仕様をサポートするには、フレーバーに仕様を追加する必要があります。 Openstackでは、プロパティを使用して仮想マシンのプロセッサのCPUトポロジを定義できます。

$ openstack flavor set FLAVOR-NAME \
    --property hw:cpu_sockets=FLAVOR-SOCKETS \
    --property hw:cpu_cores=FLAVOR-CORES \
    --property hw:cpu_threads=FLAVOR-THREADS \

場所:

  • FLAVOR-SOCKETS :(整数)ゲストVMのソケットの数。デフォルトでは、これは要求されたvCPUの数に設定されています。
  • FLAVOR-CORES :(整数)ゲストVMのソケットあたりのコア数。デフォルトでは、これは1に設定されています。
  • FLAVOR-THREADS :(整数)ゲストVMのコアあたりのスレッド数。デフォルトでは、これは1に設定されています。
より高い番号を構成しないでください。各VMのコアの数

各VMに、ホストコンピューターで使用可能な実際のコアの数よりも多くの仮想コアを構成しないでください。

私のトポロジーでは、以下がフレーバーセットです:

$ openstack flavor set Windows10 \
    --property hw:cpu_sockets=1 \
    --property hw:cpu_cores=4 \
    --property hw:cpu_threads=1 \


Linux
  1. lxc-execute でメモリと CPU を制限する

  2. Ubuntu 12.04 でカーネル共有メモリが 0 になるのはなぜですか?

  3. /proc/meminfo の MemTotal が変更されるのはなぜですか?

  1. 割り当てられたメモリ/CPUのサーバーのクエリリスト?

  2. Linux でのプロセス メモリ/CPU 使用量の制限

  3. rsync が遅いのはなぜですか?

  1. mmap() がシーケンシャル IO よりも速いのはなぜですか?

  2. shm_open を使用する理由

  3. SSH ログインが遅いのはなぜですか?