成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用QEMU研究Linux內(nèi)核PCI子系統(tǒng)

譯文
系統(tǒng) Linux
Oracle Linux內(nèi)核工程師Dongli Zhang介紹了如何利用QEMU研究Linux內(nèi)核PCI子系統(tǒng)。

[[409636]]

【51CTO.com快譯】Linux PCI子系統(tǒng)是Linux內(nèi)核中最重要的子系統(tǒng)之一。本文介紹了使用QEMU來仿真不同的PCI/PCIe配置,以幫助研究Linux PCI子系統(tǒng)。這種能力便于Linux管理員或開發(fā)人員研究、調(diào)試和開發(fā)Linux內(nèi)核,因為使用QEMU定制PCI/PCIe配置要容易得多。比如說,結合SeaBIOS源代碼,研究PCI初始化和探測過程會容易得多。此外,與重啟裸機服務器相比,重啟QEMU/KVM虛擬機的速度也快得多。

就本文中的所有示例而言,KVM虛擬機運行Oracle Linux 8,虛擬機內(nèi)核版本為5.10.0,QEMU版本為 5.2.0。

所有示例都將啟動盤(ol8.qcow2)作為默認IDE來運行。由于本文的目的是研究PCI/PCIe,我們以virtio-scsi-pci HBA為例,不會將任何SCSI LUN連接到HBA。參閱之前的這篇博文,即可了解如何將SCSI LUN連接到 virtio-scsi-pci HBA。

文章重點介紹使用QEMU和PCI/PCIe,不涉及有關PCI/PCIe規(guī)范的任何基礎知識。

PCI橋

這部分演示如何通過PCI-2-PCI橋創(chuàng)建PCI輔助總線。輔助總線通過“pci-bridge”來創(chuàng)建。

  1. qemu-system-x86_64 -machine pc,accel=kvm -vnc :8 -smp 4 -m 4096M \ 
  2. -net nic -net user,hostfwd=tcp::5028-:22 \ 
  3. -hda ol8.qcow2 -serial stdio \ 
  4. -device pci-bridge,id=bridge0,chassis_nr=1 \ 
  5. -device virtio-scsi-pci,id=scsi0,bus=bridge0,addr=0x3 \ 
  6. -device pci-bridge,id=bridge1,chassis_nr=2 \ 
  7. -device virtio-scsi-pci,id=scsi1,bus=bridge1,addr=0x3 \ 
  8. -device virtio-scsi-pci,id=scsi2,bus=bridge1,addr=0x4 

上述QEMU命令行創(chuàng)建兩條PCI輔助總線。一條輔助總線(01:00.0)有一個virtio-scsi-pci HBA(01:03.0),第二條輔助總線(02:00.0)有兩個virtio-scsi-pci HBA(02:03.0和02:04.0)。

  1. [root@vm ~]# lspci 
  2. 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 
  3. 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 
  4. 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 
  5. 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 
  6. 00:02.0 VGA compatible controller: Device 1234:1111 (rev 02) 
  7. 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03) 
  8. 00:04.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge 
  9. 00:05.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge 
  10. 01:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 
  11. 02:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 
  12. 02:04.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 

下列l(wèi)spci輸出和數(shù)字描述了該示例的PCI總線拓撲結構。

  1. [root@vm ~]# lspci -t 
  2. [0000:00]-+-00.0 
  3.           +-01.0 
  4.           +-01.1 
  5.           +-01.3 
  6.           +-02.0 
  7.           +-03.0 
  8.           +-04.0-[01]----03.0 
  9.           \-05.0-[02]--+-03.0 
  10.                        \-04.0 

圖1

PCI根總線

這部分演示如何通過“輕量級”PXB(PCI擴展橋)主機橋創(chuàng)建額外的PCI根總線。它是QEMU命令行中的“pxb”。它僅針對i440fx實現(xiàn),只可以放在總線0上。

  1. qemu-system-x86_64 -machine pc,accel=kvm -vnc :8 -smp 4 -m 4096M \ 
  2. -net nic -net user,hostfwd=tcp::5028-:22 \ 
  3. -hda ol8.qcow2 -serial stdio \ 
  4. -device pxb,id=bridge1,bus=pci.0,bus_nr=3 \ 
  5. -device virtio-scsi-pci,bus=bridge1,addr=0x3 \ 
  6. -device pxb,id=bridge2,bus=pci.0,bus_nr=8 \ 
  7. -device virtio-scsi-pci,bus=bridge2,addr=0x3 \ 
  8. -device virtio-scsi-pci,bus=bridge2,addr=0x4 

上述QEMU命令行創(chuàng)建兩條額外的PCI 根總線。第一條根總線(04:00.0)有一個virtio-scsi-pci HBA(04:03.0),第二條根總線(09:00.0)有二個virtio-scsi-pci HBA(09:03.0和09:04.0)。

  1. [root@vm ~]# lspci 
  2. 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 
  3. 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 
  4. 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 
  5. 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 
  6. 00:02.0 VGA compatible controller: Device 1234:1111 (rev 02) 
  7. 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03) 
  8. 00:04.0 Host bridge: Red Hat, Inc. QEMU PCI Expander bridge 
  9. 00:05.0 Host bridge: Red Hat, Inc. QEMU PCI Expander bridge 
  10. 03:00.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge 
  11. 04:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 
  12. 08:00.0 PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge 
  13. 09:03.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 
  14. 09:04.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI 

下列l(wèi)spci輸出和數(shù)字描述了該示例的PCI總線拓撲結構。

  1. [root@vm ~]# lspci -t 
  2. +-[0000:08]---00.0-[09]--+-03.0 
  3. |                        \-04.0 
  4. +-[0000:03]---00.0-[04]----03.0 
  5. \-[0000:00]-+-00.0 
  6.             +-01.0 
  7.             +-01.1 
  8.             +-01.3 
  9.             +-02.0 
  10.             +-03.0 
  11.             +-04.0 
  12.             \-05.0 

圖2

PCIe根聯(lián)合體

這部分演示如何通過額外的根聯(lián)合體(Root Complex)創(chuàng)建額外的PCIe根總線。據(jù)QEMU源代碼顯示,PCIe特性只由x86架構上的“q35”機器類型和AArch64上的“virt”機器類型所支持。根聯(lián)合體通過在QEMU命令行上使用“pxb-pcie”來創(chuàng)建。

  1. qemu-system-x86_64 -machine q35,accel=kvm -vnc :8 -smp 4 -m 4096M \ 
  2. -net nic -net user,hostfwd=tcp::5028-:22 \ 
  3. -hda ol8.qcow2 -serial stdio \ 
  4. -device pxb-pcie,id=pcie.1,bus_nr=2,bus=pcie.0 \ 
  5. -device ioh3420,id=pcie_port1,bus=pcie.1,chassis=1 \ 
  6. -device virtio-scsi-pci,bus=pcie_port1 \ 
  7. -device ioh3420,id=pcie_port2,bus=pcie.1,chassis=2 \ 
  8. -device virtio-scsi-pci,bus=pcie_port2 \ 
  9. -device pxb-pcie,id=pcie.2,bus_nr=8,bus=pcie.0 \ 
  10. -device ioh3420,id=pcie_port3,bus=pcie.2,chassis=3 \ 
  11. -device virtio-scsi-pci,bus=pcie_port3 

上述QEMU命令行創(chuàng)建兩個額外的PCIe根聯(lián)合體。第一個根聯(lián)合體有一個virtio-scsi-pci HBA(09:00.0),第二個根聯(lián)合體有兩個virtio-scsi-pci HBA(03:00.0和04:00.0)。

  1. [root@vm ~]# lspci 
  2. 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller 
  3. 00:01.0 VGA compatible controller: Device 1234:1111 (rev 02) 
  4. 00:02.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection 
  5. 00:03.0 Host bridge: Red Hat, Inc. QEMU PCIe Expander bridge 
  6. 00:04.0 Host bridge: Red Hat, Inc. QEMU PCIe Expander bridge 
  7. 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02) 
  8. 00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) 
  9. 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02) 
  10. 02:00.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 (rev 02) 
  11. 02:01.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 (rev 02) 
  12. 03:00.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI (rev 01) 
  13. 04:00.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI (rev 01) 
  14. 08:00.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 (rev 02) 
  15. 09:00.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI (rev 01) 

下列l(wèi)spci輸出和數(shù)字描述了該示例的PCIe拓撲結構。

  1. [root@vm ~]# lspci -t 
  2. -+-[0000:08]---00.0-[09]----00.0 
  3.  +-[0000:02]-+-00.0-[03]----00.0 
  4.  |           \-01.0-[04]----00.0 
  5.  \-[0000:00]-+-00.0 
  6.              +-01.0 
  7.              +-02.0 
  8.              +-03.0 
  9.              +-04.0 
  10.              +-1f.0 
  11.              +-1f.2 
  12.              \-1f.3 

圖3

PCI交換器

這部分演示了如何創(chuàng)建PCIe交換器。

  1. qemu-system-x86_64 -machine q35,accel=kvm -vnc :8 -smp 4 -m 4096M \ 
  2. -net nic -net user,hostfwd=tcp::5028-:22 \ 
  3. -hda ol8.qcow2 -serial stdio \ 
  4. -device ioh3420,id=root_port1,bus=pcie.0 \ 
  5. -device x3130-upstream,id=upstream1,bus=root_port1 \ 
  6. -device xio3130-downstream,id=downstream1,bus=upstream1,chassis=9 \ 
  7. -device virtio-scsi-pci,bus=downstream1 \ 
  8. -device xio3130-downstream,id=downstream2,bus=upstream1,chassis=10 \ 
  9. -device virtio-scsi-pci,bus=downstream2 

上述QEMU命令行創(chuàng)建了一個PCIe交換器,它連接有兩個virtio-scsi-pci HBA。上游端口連接至根總線,而每個下游端口連接至virtio-scsi-pci HBA(03:00.0和04:00.0)。

  1.  [root@vm ~]# lspci 
  2. 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller 
  3. 00:01.0 VGA compatible controller: Device 1234:1111 (rev 02) 
  4. 00:02.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection 
  5. 00:03.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 (rev 02) 
  6. 00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02) 
  7. 00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) 
  8. 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02) 
  9. 01:00.0 PCI bridge: Texas Instruments XIO3130 PCI Express Switch (Upstream) (rev 02) 
  10. 02:00.0 PCI bridge: Texas Instruments XIO3130 PCI Express Switch (Downstream) (rev 01) 
  11. 02:01.0 PCI bridge: Texas Instruments XIO3130 PCI Express Switch (Downstream) (rev 01) 
  12. 03:00.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI (rev 01) 
  13. 04:00.0 SCSI storage controller: Red Hat, Inc. Virtio SCSI (rev 01) 

下列l(wèi)spci輸出和數(shù)字描述了該示例的PCIe拓撲結構。

  1. [root@vm ~]# lspci -t 
  2. -[0000:00]-+-00.0 
  3.            +-01.0 
  4.            +-02.0 
  5.            +-03.0-[01-04]----00.0-[02-04]--+-00.0-[03]----00.0 
  6.            |                               \-01.0-[04]----00.0 
  7.            +-1f.0 
  8.            +-1f.2 
  9.            \-1f.3 

圖4

IOMMU

現(xiàn)在,IOMMU始終被裸機所使用。QEMU能夠仿真IOMMU,幫助開發(fā)人員調(diào)試和研究Linux內(nèi)核IOMMU相關源代碼以及DMA重映射和中斷重映射的工作原理。

下列QEMU命令行演示了如何為虛擬機創(chuàng)建英特爾IOMMU(啟用中斷重映射)。除了QEMU命令行外,還應該將“intel_iommu=on”添加到虛擬機Linux內(nèi)核命令行的末尾。

  1. qemu-system-x86_64 -machine q35,accel=kvm,kernel-irqchip=split -vnc :8 -smp 4 -m 4096M \ 
  2. -net nic -net user,hostfwd=tcp::5028-:22 \ 
  3. -hda ol8.qcow2 -serial stdio \ 
  4. -device nvme,drive=nvme0,serial=deadbeaf1,max_ioqpairs=4 \ 
  5. -drive file=disk1.qcow2,if=none,id=nvme0 \ 
  6. -device intel-iommu,intremap=on 

據(jù)虛擬機系統(tǒng)日志顯示,IOMMU可用,并被Linux內(nèi)核啟用。

  1.  [root@vm ~]# dmesg | egrep "iommu|IOMMU" 
  2. ... ... 
  3. [    0.019828] DMAR: IOMMU enabled 
  4. [    0.203209] DMAR-IR: IOAPIC id 0 under DRHD base  0xfed90000 IOMMU 0 
  5. [    0.628348] iommu: Default domain type: Passthrough 
  6. [    1.078994] pci 0000:00:00.0: Adding to iommu group 0 
  7. [    1.079892] pci 0000:00:01.0: Adding to iommu group 1 
  8. [    1.080775] pci 0000:00:02.0: Adding to iommu group 2 
  9. [    1.081654] pci 0000:00:03.0: Adding to iommu group 3 
  10. [    1.082545] pci 0000:00:1f.0: Adding to iommu group 4 
  11. [    1.083432] pci 0000:00:1f.2: Adding to iommu group 4 
  12. [    1.084315] pci 0000:00:1f.3: Adding to iommu group 4 

原文標題:A study of the Linux kernel PCI subsystem with QEMU,作者:Dongli Zhang

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2016-07-22 10:50:56

Linux內(nèi)核無線子系統(tǒng)

2021-12-15 10:02:25

鴻蒙HarmonyOS應用

2009-10-12 12:46:55

Linux內(nèi)核SCSI IO

2015-10-19 17:36:19

MOST內(nèi)核Linux

2013-11-25 17:39:17

Linux內(nèi)核PCIACPI

2019-07-15 08:30:06

Linux 系統(tǒng) 數(shù)據(jù)

2013-12-18 11:14:57

Linux內(nèi)核Linux Kerne

2021-04-06 11:18:47

LinuxWWAN子系統(tǒng)驅(qū)動

2021-08-31 11:53:38

Linux inputLinux 系統(tǒng)

2021-07-22 08:03:08

Windows 操作系統(tǒng)Linux

2021-12-08 08:41:31

Linux 中斷子系統(tǒng)Linux 系統(tǒng)

2016-10-17 08:49:15

WindowsLinuxArch Linux

2021-06-07 08:13:11

LinuxIDLE 子系統(tǒng)

2021-08-10 11:30:30

Linux代碼中斷控制器

2021-08-03 15:10:26

Linux代碼驅(qū)動

2022-11-27 11:00:15

2022-01-16 07:41:46

Windows 11操作系統(tǒng)微軟

2021-09-27 09:52:41

FacebookBOLTLinux

2022-04-12 09:05:30

Linux時鐘

2022-03-28 19:19:45

Linux時間子系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品中文字幕在线观看 | 99综合 | 国产一区二区精品在线观看 | 伊人最新网址 | 综合久久久| 欧美日韩在线观看一区二区三区 | 九九热这里 | 欧美成人不卡 | 亚洲国产精品一区二区第一页 | 婷婷综合网| 美女黄色在线观看 | 国产精品视频一区二区三区不卡 | 犬夜叉在线观看 | 国产精品久久久久久久久久免费 | 成人影院免费视频 | av国产精品 | www.操com| 亚洲天堂影院 | 91亚洲国产 | 自拍偷拍第一页 | 日韩视频免费在线 | 午夜视频在线播放 | 亚洲成网站 | 国产精品久久久久久久久久免费 | 一区二区三区四区在线免费观看 | 伊色综合久久之综合久久 | 精品真实国产乱文在线 | 色男人的天堂 | 欧美日韩亚洲一区 | www.日韩 | 欧美极品少妇xxxxⅹ免费视频 | 男人的天堂视频网站 | 日韩成人在线网站 | 色精品| 操射视频 | 伊人伊人网 | 国产精品1区 | 中文字幕亚洲欧美日韩在线不卡 | 国产网站在线免费观看 | 激情91| 免费av观看 |