RedHawk KVM-RTは、Concurrent Real-Timeによって開発されたTYPE-1 ハイパーバイザーであり、実績のあるカーネルベースの仮想マシン(KVM)オープンソーステクノロジーをRedHawkLinuxリアルタイムオペレーティングシステムと統合します。ConcurrentのKVM-RT構成ツールを使用すると、RedHawk Linuxのリアルタイム機能を単一の物理ホストシステムで実行されているVMに拡張する仮想マシン(VM)を簡単に作成できます。
RedHawkは、Intelx86およびARM64プラットフォーム向けのオープンソースLinuxオペレーティングシステムのConcurrentReal-Timeに特化したリアルタイムバージョンです。KVM-RT構成ツールは、RedHawk Linuxホストの独自の機能を活用して、メモリ管理、プロセススケジューリング、デバイスアクセス、およびI/Oを実現します。リアルタイムのパフォーマンスは、RedHawkLinuxのシールドおよびスケジューリングメカニズムによって保証されています。
リアルタイムのRedHawkLinuxディストリビューションにRedHawk KVM-RTを実装すると、KVMの機能が拡張され、仮想マシンでのリアルタイムパフォーマンスが保証されます。また、複数のリアルタイムゲストと非リアルタイムゲストのサポートも提供します。RedHawk KVM-RTは、認定されたハードウェアプラットフォームで20マイクロ秒未満の最悪の場合の最大応答時間を達成できます。
Maximum VM PDL(μ秒) | KVM-RT 1.4(Duration: 46 hours) | VMware ESXi 8(Duration: 19 hours) |
RedHawk 6.5 | 6 | 953 |
RedHawk 7.5 | 7 | 3371 |
RedHawk 8.4 | 17 | 2724 |
# rpm -q nfs-utils
nfs-utils-2.3.3-59.el8.x86_64
(2) ベアメタルホスト:仮想マシンxに割り当てたIPアドレスの範囲を確認
# virsh domifaddr VM1
名前 MAC アドレス Protocol アドレス
-------------------------------------------------------------------------------
vnet0 52:54:00:f3:40:25 ipv4 192.168.122.187/24
(3) ベアメタルホスト:共有するディレクトリを/etc/exportsに記述
# cat /etc/exports
/home/shared 192.168.122.*(rw,insecure,sync,no_subtree_check,no_root_squash)
(4) ベアメタルホスト:NFSを起動
# exportfs -a
# systemctl enebale nfs-server
# systemctl start nfs-server
(5) 仮想マシン:/etc/hostsに"192.168.122.1 baremetal"を追記
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.1 baremetal
(6) 仮想マシン:/etc/fstabに"baremetal:/home/shared /home/shared nfs defaults,lookupcache=none 0 2"を追記
# cat /etc/fstab
UUID=ff89e4d2-76de-11ef-8eb6-5254000b2616 / xfs defaults 1 1
UUID=ff89e68a-76de-11ef-8eb6-5254000b2616 /boot xfs defaults 1 2
UUID=ff89e748-76de-11ef-8eb6-5254000b2616 /home xfs defaults 1 2
UUID=ff89e7fc-76de-11ef-8eb6-5254000b2616 /var/lib/containers xfs defaults,defaults,uquota,pquota,gquota 1 2
baremetal:/home/shared /home/shared nfs defaults,lookupcache=none 0 2
(7) 仮想マシン:再起動後、NFSマウントされていることを確認
# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 690980 0 690980 0% /dev
tmpfs 750188 84 750104 1% /dev/shm
tmpfs 750188 17920 732268 3% /run
tmpfs 750188 0 750188 0% /sys/fs/cgroup
/dev/vda3 104806400 20939424 83866976 20% /
/dev/vda5 26201600 220412 25981188 1% /home
/dev/vda2 2086912 191660 1895252 10% /boot
/dev/vda4 134151172 22093880 112057292 17% /var/lib/containers
baremetal:/home/shared 612612096 568369152 44242944 93% /home/shared
tmpfs 150036 24 150012 1% /run/user/0
$ sudo systemctl edit getty@tty1
上記のコマンドを実行、次の内容を設定する。
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
この操作を行うと以下のファイルが作成される。
# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
# ここから追記
# execute Container
#
LEVEL=`/usr/bin/who -r|/usr/bin/awk '{print $2}'`
#
# 仮想マシンのSpiceデバイスで動作するXorgとVGA パススルーしたXorgは、排他的(同時デバイス設定はクラッシュする)
#
if [ "$LEVEL" -eq "3" ]
then
#
# 仮想マシンでは、最初にnvidia_uvmを組み込む必要がある(KVM-RT側で、Nvidiaドライバを強制ロードする)
#
modprobe nvidia_uvm
#
# 仮想マシンでは、podman 再起動時に備えて、ログイン時shield状態を解除しておかなくではならない
#
/usr/bin/shield -r
#
# podmanを起動するとKVM-RT上で観測することはできないが、仮想マシンのデーモンと、podmanコンテナのデーモンが共に動作する
# この時、仮想マシンの上で動作するデーモンを仮想コア0で動作させ、podmanの優先度をRR:97に設定する、
# -rを付与しないとコンテナプロセスがすべて97で動作する。
#
run -b0 -u0 ; run -b0 -g0 ;run -b0 -r -s rr -P 97 podman start gnome
fi
# ここまで
# cat ~/bin/xorg.nvidia
#!/usr/bin/bash
if [ "$DISPLAY" == ":1" ]
then
unset DESKTOP_SESSION
unset GNOME_TERMINAL_SCREEN
unset XDG_SESSION_TYPE
unset XDG_DATA_DIRS
unset XDG_SESSION_DESKTOP
unset QT_IM_MODULE
unset XMODIFIERS
unset XDG_CURRENT_DESKTOP
unset GNOME_TERMINAL_SERVICE
unset XDG_SEAT
unset SHLVL
unset GDK_BACKEND
unset GDMSESSION
unset GNOME_DESKTOP_SESSION_ID
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
unset XAUTHORITY
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
unset DISPLAY
sleep 3
/usr/bin/startx -- :2 -sharevts -config /etc/X11/xorg.conf.nvidia -auth /run/user/0/gdm/Xauthority
fi
# cat /etc/X11/xorg.conf.nvidia
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 550.67
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
InputDevice "Mouse1" "CorePointer"
EndSection
Section "ServerFlags"
Option "AutoAddGPU" "off"
EndSection
Section "Files"
EndSection
Section "InputClass"
Identifier "Ignore libinput"
Driver "libinput"
Option "Ignore" "True"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:02:00.0-usb-0:4:1.0-event-kbd"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard1"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:02:00.0-usb-0:5:1.0-event-kbd"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:02:00.0-usb-0:4:1.0-event-mouse"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse1"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:02:00.0-usb-0:5:1.0-event-mouse"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "PCI:5:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
# nmcli connection show
NAME UUID TYPE DEVICE
eth0 3002a73e-cdb5-4b9f-9fcb-1224e135779b ethernet eth0
virbr0 932d006c-c49e-4e3d-a9fc-3dc22f5156f6 bridge virbr0
上記の出力では、ホストにeth0というNAMEのデバイスを介して確立されたイーサネットネットワーク接続があり、 virbr0というNAMEのデフォルトのブリッジインターフェイスが、KVM-RTゲストシステムがdefaultで接続されているNATベースの仮想ネットワークへのアクセスを提供していることがわかります。
# virsh net-list --all
名前 状態 自動起動 永続
---------------------------------------------
default 動作中 はい (yes) はい (yes)
(1) ネットワーク構成に新しい接続を追加する。
# nmcli con add ifname br0 type bridge con-name br0
接続 'br0' (16165e87-0cd1-45c4-ad53-62024c5a4fae) が正常に追加されました。
接続が追加されたら、次のように、物理デバイスeth0(スレーブ)とブリッジ接続br0(マスター)の間にブリッジスレーブインターフェイスを確立します。
# nmcli con add type bridge-slave ifname eth0 master br0
接続 'bridge-slave-eth0' (3785d32d-692b-4687-affd-c20afc60dbf3) が正常に追加されました。
この時点で、NetworkManager接続リストは次のようになります。
# nmcli connection show
NAME UUID TYPE DEVICE
br0 15d881a2-9ea4-4134-875f-84b32bed888c bridge br0
bridge-slave-eth0 c86598fc-7043-4e75-90fc-d7baeb9ecd5b ethernet eth0
virbr0 932d006c-c49e-4e3d-a9fc-3dc22f5156f6 bridge virbr0
(2) ブリッジインターフェイスを起動する
# nmcli connection down eth0
接続 'eth0' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/1)
# nmcli connection up br0
接続が正常にアクティベートされました (master waiting for slaves) (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/13)
ブリッジが稼働すると、接続リストにブリッジ接続とブリッジスレーブ接続の両方が含まれるようになります。
# nmcli connection show --active
NAME UUID TYPE DEVICE
br0 15d881a2-9ea4-4134-875f-84b32bed888c bridge br0
bridge-slave-eth0 c86598fc-7043-4e75-90fc-d7baeb9ecd5b ethernet eth0
virbr0 932d006c-c49e-4e3d-a9fc-3dc22f5156f6 bridge virbr0
(3) KVM-RTブリッジネットワークの作成
# virsh net-list --all
名前 状態 自動起動 永続
---------------------------------------------
default 動作中 はい (yes) はい (yes)
ブリッジを仮想マシンで使用する前に、ブリッジを宣言してKVM-RT ネットワーク構成に追加する必要があります。# vi bridge.xml <network> <name>br0</name> <forward mode="bridge"/> <bridge name="br0" /> </network>次に、ファイルを使用して新しいネットワークを定義します。
# virsh net-define bridge.xml
ネットワーク br0 が bridge.xml から定義されました
(4) ネットワークを定義したら、ネットワークを起動し、必要に応じて、システムが再起動するたびに自動起動するようにネットワークを構成します。
# virsh net-start br0
ネットワーク br0 が起動されました
# virsh net-autostart br0
ネットワーク br0 が自動起動に設定されました
もう一度ネットワークを一覧表示して、KVM-RT 環境内でブリッジネットワークにアクセスできるようになったことを確認します。
# virsh net-list --all
名前 状態 自動起動 永続
---------------------------------------------
br0 動作中 はい (yes) はい (yes)
default 動作中 はい (yes) はい (yes)
(5) ブリッジを使用するように既存の仮想マシンを変更するには、virsh editコマンドを使用します。
# virsh edit RedHawk8.4
<interface type='bridge'>
<mac address='52:54:00:a4:a4:63'/>
<source bridge='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='52:54:00:a4:a4:63'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
(6) 仮想マシンを再起動するまで変更は有効になりません。
ホスト側
# lspci -s 0000:03:0c.0 -vvv
03:0c.0 Unassigned class [ff00]: Interface Corp Device 0b61 (rev 02)
Subsystem: Interface Corp Device 2cd8
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 16
NUMA node: 0
IOMMU group: 24
Region 0: Memory at a0200000 (32-bit, non-prefetchable) [size=32]
Kernel driver in use: vfio-pci
この状態でKVM-RTを起動すると、下記のようなエラーが発生します。
# kvmrt-boot
NUMA node memory shielding is not supported or configured on this system.
error: Failed to start domain 'RedHawk8'
error: Internal error: qemu unexpectedly closed the monitor: 2023-03-03T02:34:32.782025Z qemu-kvm: -device vfio-pci,host=0000:03:0c.0,id=hostdev0,bus=pci.9,addr=0x1: vfio 0000:03:0c.0: Failed to set up TRIGGER eventfd signaling for interrupt INTX-0: VFIO_DEVICE_SET_IRQS failure: Device or resource busy
Error: VM "rocky8" failed to boot.
これは、下記の様にIRQ 16が共有されている事が原因です。
# lspci -vvv
:
00:1f.4 SMBus: Intel Corporation C620 Series Chipset Family SMBus (rev 09)
Subsystem: Dell Device 0739
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 16
NUMA node: 0
IOMMU group: 21
Region 0: Memory at 380000000000 (64-bit, non-prefetchable) [size=256]
Region 4: I/O ports at 0780 [size=32]
Kernel driver in use: i801_smbus
Kernel modules: i2c_i801
:
IRQ16を利用中かどうかは、下記の様に/proc/interruptsで確認することも出来ます。
# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 22 0 0 0 IR-IO-APIC 2-edge timer
8: 0 1 0 0 IR-IO-APIC 8-edge rtc0
9: 0 0 0 0 IR-IO-APIC 9-fasteoi acpi
16: 0 0 0 0 IR-IO-APIC 16-fasteoi i801_smbus
29: 0 0 105603 0 IR-PCI-MSI 376832-edge ahci[0000:00:17.0]
:
別のスロット位置に変更したところ以下の様に、問題は解決しました。
# lspci -s b4:0c.0 -vvv
b4:0c.0 Unassigned class [ff00]: Interface Corp Device 0b61 (rev 02)
Subsystem: Interface Corp Device 2cd8
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 11
NUMA node: 0
IOMMU group: 84
Region 0: Memory at fbe00000 (32-bit, non-prefetchable) [disabled] [size=32]
Kernel driver in use: vfio-pci
# cat /proc/interrupts(ホスト側にIRQ11を利用しているデバイスは無い)
CPU0 CPU1 CPU2 CPU3
0: 23 0 0 0 IR-IO-APIC 2-edge timer
8: 0 0 0 1 IR-IO-APIC 8-edge rtc0
9: 0 0 0 0 IR-IO-APIC 9-fasteoi acpi
16: 0 0 0 0 IR-IO-APIC 16-fasteoi i801_smbus
30: 0 55184 0 0 IR-PCI-MSI 376832-edge ahci[0000:00:17.0]
31: 0 0 1714 0 IR-PCI-MSI 327680-edge xhci_hcd
32: 0 293 0 0 IR-PCI-MSI 520192-edge enp0s31f6
35: 0 0 2 0 IR-PCI-MSI 65536-edge ioat-msix
37: 0 0 0 2 IR-PCI-MSI 67584-edge ioat-msix
38: 0 2 0 0 IR-PCI-MSI 69632-edge ioat-msix
39: 0 0 2 0 IR-PCI-MSI 71680-edge ioat-msix
40: 0 0 0 2 IR-PCI-MSI 73728-edge ioat-msix
41: 0 2 0 0 IR-PCI-MSI 75776-edge ioat-msix
42: 0 0 2 0 IR-PCI-MSI 77824-edge ioat-msix
43: 0 0 0 2 IR-PCI-MSI 79872-edge ioat-msix
44: 62 0 0 0 IR-PCI-MSI 360448-edge mei_me
45: 0 0 288 0 IR-PCI-MSI 514048-edge snd_hda_intel:card0
46: 0 0 0 299 IR-IO-APIC 4-fasteoi snd_hda_intel:card1
47: 6702 0 0 0 IR-PCI-MSI 12058624-edge nvidia
56: 0 0 0 0 DMAR-MSI 2-edge dmar2
57: 0 0 0 0 DMAR-MSI 1-edge dmar1
58: 0 0 0 0 DMAR-MSI 0-edge dmar0
59: 0 0 0 0 DMAR-MSI 3-edge dmar3
NMI: 0 0 0 0 Non-maskable interrupts
NMD: 0 0 0 0 Duration in usecs of most recent NMI
LOC: 69069 58010 551652 49761 Local timer interrupts
SPU: 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 Performance monitoring interrupts
IWI: 0 0 0 0 IRQ work interrupts
RTR: 0 0 0 0 APIC ICR read retries
RES: 5301 2607 3167 3238 Rescheduling interrupts
FBS: 0 0 0 0 FBS cross cpu interrupts
CAL: 5052 25807 22664 25595 Function call interrupts
TLB: 1881 1930 1397 3367 TLB shootdowns
MOV: 0 0 0 0 IRQ-move cleanup interrupts
TRM: 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 Threshold APIC interrupts
DFR: 0 0 0 0 Deferred Error APIC interrupts
MCE: 0 0 0 0 Machine check exceptions
MCP: 1 2 2 2 Machine check polls
RTE: 0 0 0 0 RT throttling events
ERR: 0
MIS: 0
PIN: 0 0 0 0 Posted-interrupt notification event
NPI: 0 0 0 0 Nested posted-interrupt event
PIW: 0 0 0 0 Posted-interrupt wakeup event
ゲスト側
# lspci -s 08:01.0 -vvv
08:01.0 Unassigned class [ff00]: Interface Corp Device 0b61 (rev 02)
Subsystem: Interface Corp Device 2cd8
Physical Slot: 1
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 23
Region 0: Memory at fc000000 (32-bit, non-prefetchable) [size=32]
# cat /proc/interrupts
CPU0 CPU1
1: 0 2406 IO-APIC 1-edge i8042
8: 0 0 IO-APIC 8-edge rtc0
9: 0 0 IO-APIC 9-fasteoi acpi
12: 144 0 IO-APIC 12-edge i8042
16: 0 0 IO-APIC 16-fasteoi i801_smbus
21: 0 1044 IO-APIC 21-fasteoi qxl
22: 0 5 IO-APIC 22-fasteoi virtio4, virtio3
23: 490 0 IO-APIC 23-fasteoi extmem
24: 0 0 PCI-MSI 32768-edge aerdrv
:
(2) 下記、Interface社PEXH224020等、一部のPCIカードでは、1枚のカードで2つのバスブリッジを持っている場合があります。
# lspci -d 1147:08c0 -vv
23:0c.0 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d14
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 27
Region 0: Memory at dfffe000 (32-bit, non-prefetchable) [size=32]
23:0c.1 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d94
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin B routed to IRQ 28
Region 0: Memory at dffff000 (32-bit, non-prefetchable) [size=32]
# lspci -d 1147:08c0 -vvv
67:0c.0 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d14
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 94
NUMA node: 0
IOMMU group: 91
Region 0: Memory at e0e01000 (32-bit, non-prefetchable) [size=32]
Kernel driver in use: vfio-pci
67:0c.1 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d94
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin B routed to IRQ 95
NUMA node: 0
IOMMU group: 91
Region 0: Memory at e0e00000 (32-bit, non-prefetchable) [size=32]
Kernel driver in use: vfio-pci
# lspci -d 1147:08c0 -vvv
0a:01.0 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d14
Physical Slot: 1
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 20
Region 0: Memory at fa808000 (32-bit, non-prefetchable) [size=32]
0a:02.0 Unassigned class [ff00]: Interface Corp Device 08c0 (rev 01)
Subsystem: Interface Corp Device 2d94
Physical Slot: 2
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin B routed to IRQ 22
Region 0: Memory at fa809000 (32-bit, non-prefetchable) [size=32]
# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 19 0 0 0 IO-APIC-edge timer
1: 200 0 0 0 IO-APIC-edge i8042
8: 0 0 0 0 IO-APIC-edge rtc0
9: 0 0 0 0 IO-APIC-fasteoi acpi
12: 134 0 0 0 IO-APIC-edge i8042
16: 0 0 0 0 IO-APIC-fasteoi i801_smbus
20: 0 0 0 0 IO-APIC-fasteoi extmem
21: 1030 0 0 0 IO-APIC-fasteoi qxl
22: 0 0 0 0 IO-APIC-fasteoi extmem
:
# lsirq
16 00:1f.3 Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
20 0a:01.0 Interface Corp Unknown device (rev 01)
21 00:01.0 Red Hat, Inc. QXL paravirtual graphic card (rev 04)
22 0a:02.0 Interface Corp Unknown device (rev 01)
:
# find /lib/modules/`uname -r` -type f |grep nvidia
:
:
:
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia/nvidia.ko
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-drm/nvidia-drm.ko
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-modeset/nvidia-modeset.ko
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-uvm/nvidia-uvm.ko
# lsinitrd|grep nvidia
-r--r--r-- 1 root root 1584 May 18 2021 etc/modprobe.d/nvidia.conf
drwxr-xr-x 5 root root 0 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx
drwxr-xr-x 2 root root 0 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia
drwxr-xr-x 2 root root 0 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-drm
-rw-r--r-- 1 root root 114352 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-drm/nvidia-drm.ko
drwxr-xr-x 2 root root 0 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-modeset
-rw-r--r-- 1 root root 1580360 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-modeset/nvidia-modeset.ko
-rw-r--r-- 1 root root 42165192 May 18 2021 usr/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia/nvidia.ko
# tar cvfz /usr/local/nvidia-backup.tar.gz \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia/nvidia.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-drm/nvidia-drm.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-modeset/nvidia-modeset.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-uvm/nvidia-uvm.ko \
/etc/modprobe.d/nvidia.conf
# rm -f \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia/nvidia.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-drm/nvidia-drm.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-modeset/nvidia-modeset.ko \
/lib/modules/5.10.59-rt52-RedHawk-8.4.1-trace/kernel/drivers/video/nvidia-glx/nvidia-uvm/nvidia-uvm.ko \
/etc/modprobe.d/nvidia.conf
# dracut -f --kver `uname -r`
dracut(7)参照
# dracut -f --kver `uname -r` --omit-drivers="nvidia_uvm nvidia_drm nvidia_modeset nvidia"
dracut(7)参照 (注意:スペース区切りリスト)
Section "Device"
Identifier "Device0"
Driver "fbdev"
BusID "PCI:1:0:0"
EndSection
# lspci | grap VGA
01:00.1 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eH3 (rev 02) (prog-if 00 [VGA controller])
37:00.0 VGA compatible controller: NVIDIA Corporation GP106GL [Quadro P2000] (rev a1) (prog-if 00 [VGA controller])
# fgrep PCI: /var/log/Xorg.0.log
[ 181.765] (--) PCI:*(0:1:0:1) 102b:0538:1590:00e4 rev 2, Mem @ 0xd8000000/16777216, 0xd9b98000/16384, 0xd9000000/8388608, BIOS @ 0x????????/131072
[ 181.765] (--) PCI: (0:55:0:0) 10de:1c30:10de:11b3 rev 161, Mem @ 0xe3000000/16777216, 0xcbfe0000000/268435456, 0xcbff0000000/33554432, I/O @ 0x00006000/128, BIOS @ 0x????????/524288
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=384M resume=UUID=@@@@@@@@-@@@@-@@@@-@@@@-@@@@@@@@@@@@ rhgb quiet workqueue.prio=3 intel_idle.max_cstate=0 intel_iommu=on iommu=pt"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
# grub2-mkconfig -o /etc/grub2-efi.cfg
options vfio-pci ids=10de:1c30,10de:11b3
blacklist nvidia_uvm,nvidia_drm,nvidia_modeset,nvidia,nouveau
rd.driver.blacklist=nvidia_uvm,nvidia_drm,nvidia_modeset,nvidia,nouveau
(注意:カンマ区切りリスト)
(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"
dracut(7)参照 (注意:スペース区切りリスト)
ネットワークデバイス名が、udevルールを無視するため、ボンディング構成に問題が発生します。
rmmod ixgbe; modprobe ixgbe
# 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'