Concurrnt Real-Time : KVM-RT Documents ConcurrentReal-Time-Logo

リアルタイムテクニカルドキュメント KVM-RT編 最終更新 2021.09.02

外部リンクを除く、以下のドキュメントの著作権は、特に記載の無い限りConcurrent Real-Time社に帰属します。
下記ドキュメントの弊社を除く営利目的の利用は禁じますが、ウィキペディアからの参照や社内教育、
大学等の非営利の目的であれば、ご自身の責任において自由に利用して頂いてかまいません。
ドキュメントの内容は予告無く変更する事がありますが、出来る限りリンクが消滅しないように保存しています。
ここに、記載した商品名は、一般に各社の商標または登録商標です。
外部リンク先の著作権は、各サイトの著作権表示をご覧ください。弊社著作権についてのポリシーは、 [hand.right] こちらをご覧ください。


RedHawk KVM-RTは、Concurrent Real-Timeによって開発されたハイパーバイザーであり、実績のあるカーネルベースの仮想マシン(KVM)オープンソーステクノロジーをRedHawkLinuxリアルタイムオペレーティングシステムと統合します。ConcurrentのKVM-RT構成ツールを使用すると、RedHawk Linuxのリアルタイム機能を単一の物理ホストシステムで実行されているVMに拡張する仮想マシン(VM)を簡単に作成できます。

RedHawkは、Intelx86およびARM64プラットフォーム向けのオープンソースLinuxオペレーティングシステムのConcurrentReal-Timeに特化したリアルタイムバージョンです。KVM-RT構成ツールは、RedHawk Linuxホストの独自の機能を活用して、メモリ管理、プロセススケジューリング、デバイスアクセス、およびI/Oを実現します。リアルタイムのパフォーマンスは、RedHawkLinuxのシールドおよびスケジューリングメカニズムによって保証されています。

リアルタイムのRedHawkLinuxディストリビューションにRedHawkKVM-RTを実装すると、KVMの機能が拡張され、仮想マシンでのリアルタイムパフォーマンスが保証されます。また、複数のリアルタイムゲストと非リアルタイムゲストのサポートも提供します。RedHawk KVM-RTは、認定されたハードウェアプラットフォームで10マイクロ秒未満の最悪の場合の最大応答時間を達成できます。


[hand.right] 資料: KVM-RT 1.2 Release Notes

   KVM-RT Version 1.2 Release Notes(PDF)

[hand.right] 資料: KVM-RT Users Guide

   KVM-RT Version 1.2 Users Guide(PDF)

[hand.right] バグ等

  • KVM-RT で、下記のエラーが発生する。(2021/10/4)
      PCIパススルー構成でイーサネットデバイスを構成するときdo_IRQエラーが発生することがある。
      
      (1)ゲストOSはベアメタルOSのPCI順でPCIパススルーを設定する必要があります。
            つまり、ベアメタルでlspciコマンドを実行したときに出力される順序です。
      
      
            注:virt-managerで初期状態のPCIパススルーを設定
                     すると、PCIスロット番号がこの順序で割り当てられますが、削除/追加を繰り返す場合はそうではありません。
      
                     virt-managerで割り当てられているPCIスロットを確認することはできませんので
                     、以下のコマンドで手動で確認・編集してください。
      
                     #virsh edit VM name
      
      
      (2)ゲストオペレーティングシステムのInitramfsイメージにネットワークドライバーを含めることはできません。
            つまり、ゲストオペレーティングシステムは、次のコマンドを使用してInitramfsを再構築する必要があります。
             #dracut -f --omit-drivers "e100 e1000 e1000e igb ixgb ixgbe i40e bonding"
      
      
      ネットワークデバイス名が、udevルールを無視するため、ボンディング構成に問題が発生します。
      Netwokカードとドライバ(e1000e,igb,ixgbe,i40e)が混在するシステムで、デバイス名称と対象ポートが起動毎に異なる問題
      /etc/udev/rules.d/70-persistent-intel.rulesルールを作成の上、問題のあるデバイスドライバー(おそらくixgbe)を削除し、再インストールします。
      具体的には、次のコマンドを/etc/rc.localに追加します。
      
           rmmod ixgbe; modprobe ixgbe
      
      

  • KVM-RT 1.2 で、リアルタイムモードにすると、下記のエラーが発生する。(2021/9/2)
      
      # kvmrt-import 
      Importing VM "RedHawk" into '/etc/kvmrt.cfg'.
      Updated '/etc/kvmrt.cfg'.
      # cat /etc/kvmrt.cfg
      [cb87039c-bcce-45a4-8c53-8a93b0734da7]
      name = RedHawk
      title = 
      description = 
      nr_vcpus = 2
      cpu_topology = 2,1,1
      cpuset =
      rt = False
      rt_memory = auto
      numatune = auto
      hide_kvm = False
      autostart = True
      # kvmrt-boot 
      # kvmrt-edit-config 
      Editing temporary file for /etc/kvmrt.cfg
      Synchronizing libvirt configuration of "RedHawk".
      KVM-RT configuration (/etc/kvmrt.cfg) has been updated.
      
      # cat /etc/kvmrt.cfg
      [cb87039c-bcce-45a4-8c53-8a93b0734da7]
      name = RedHawk
      title = 
      description = 
      nr_vcpus = 2
      cpu_topology = 2,1,1
      cpuset = 1-3
      rt = True
      rt_memory = auto
      numatune = auto
      hide_kvm = False
      autostart = True
      
      [__METADATA__]
      version = 1.2
      release = 20210208
      
      # kvmrt-boot 
      Traceback (most recent call last):
        File "/usr/bin/kvmrt-boot", line 261, in 
          if boot_and_tune(vm, vc):
        File "/usr/bin/kvmrt-boot", line 155, in boot_and_tune
          verbose=verbose):
        File "/usr/lib/python3.6/site-packages/kvmrt/tune_vm.py", line 49, in tune_vm
          tasks = cpus_have_pinned_tasks(shield_cpumask, allow_pid=get_vm_pid(vm))
        File "/usr/lib/python3.6/site-packages/kvmrt/runtime_vm_lib.py", line 125, in cpus_have_pinned_tasks
          t = bitmask(affinity)
        File "/usr/lib/python3.6/site-packages/kvmrt/bitmask.py", line 139, in __init__
          raise ValueError("invalid bitmask string: '%s'" % mask)
      ValueError: invalid bitmask string: 'プロセス ID 1 の現在の親和性リスト: 0-3'
      
      
    原因は、 /usr/lib/python3.6/site-packages/kvmrt/runtime_vm_lib.py
    ファイルのバグです。
    KVM-RTを1.3以上にバージョンアップするか、LANG変数を en_US.UTF-8 にするか、下記のように変更してください。
      誤:
        119: pp = os.popen("taskset -c -p %s 2>/dev/null | sed 's/.*affinity list: //'" % tid)
        264: if os.system('taskset -p -c %s %s >/dev/null' % (cpumask, tid)) != 0:
        452: pp = os.popen("taskset -c -p %s | sed 's/.*affinity list: //'" % tid)
      正:
        119: pp = os.popen("LANG=en_US.UTF-8 taskset -c -p %s 2>/dev/null | sed 's/.*affinity list: //'" % tid)
        264: if os.system('LANG=en_US.UTF-8 taskset -p -c %s %s >/dev/null' % (cpumask, tid)) != 0:
        452: pp = os.popen("LANG=en_US.UTF-8 taskset -c -p %s | sed 's/.*affinity list: //'" % tid)
[back]Back