xen3.4.0_another_install

本文介绍如何在Red Hat Enterprise 5系统上通过YUM仓库安装和更新Xen虚拟化软件及其相关组件,包括配置YUM源、卸载旧版虚拟化文件、安装新版Xen及相关依赖包。

1. First we need to add the YUM repository holding the updated Xen. Only use ONE of the following files depending on your CPU architecture!

 

Create the following file with a text editor and save it as /etc/yum.repos.d/gitco.repo

# Name: RPM Repository for Red Hat Enterprise 5 - gitco
[gitco]
name = Red Hat Enterprise $releasever - gitco
baseurl = http://www.gitco.de/linux/i386/centos/5/rpms_testing/
enabled = 1
protect = 0
gpgcheck = 0

 

2. Uninstall old Virtualization files

yum groupremove Virtualization

3. Install the relevant packages using YUM

yum groupinstall -y Virtualization

 

Yum will probably want to upgrade some other files along with the ones we've chosen.

Warning! If you get an error message from grubby this is bad!

Installing: kernel-xen                   ####################### [ 9/13]
grubby fatal error: unable to find a suitable template

This means that your grub.conf file couldn't be written to for whaterver reason. I'm not sure yet why this is happening but it basically means the grub.conf will be pointing to your old xen-kernel instead of your new one so you won't be able to successfully reboot. If you get this message you need to edit your /boot/grub/grub.conf file and make the kernel lines match the kernel you installed. To get your installed xen-kernel version check it with rpm.

[ root@vs / ] rpm -q kernel-xen

kernel-xen-2.6.18-92.1.6.el5

Now edit your /boot/grub/grub.conf to match


# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/vgsys/lvroot
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.1.6.el5xen)
root (hd0,0)
kernel /xen.gz-3.3.0
module /vmlinuz-2.6.18-92.1.6.el5xen ro root=/dev/vgsys/lvroot rhgb quiet
module /initrd-2.6.18-92.1.6.el5xen.img

4. Reboot - no really I mean it.

5. Try it out by using the xm dmesg command

[ root@vs ~ ] xm dmesg
__  __            _____ _  _    ___  
/ // /___ _ __   |___ /| || |  / _ /
/  // _ / '_ /    |_ /| || |_| | | |
/  /  __/ | | |  ___) |__   _| |_| |
/_//_/___|_| |_| |____(_) |_|(_)___/

(XEN) Xen version 3.4.0 ( root@gitco.tld This e-mail address is being protected from spambots. You need JavaScript enabled to view it

That's about all. If you have any questions drop a comment here.

 

 

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * rpmforge: apt.sw.be
 * extras: mirror01.idc.hinet.net
 * updates: mirror01.idc.hinet.net
 * base: mirror01.idc.hinet.net
 * addons: mirror01.idc.hinet.net
Setting up Group Process
Checking for new repos for mirrors
Package virt-viewer-0.0.2-2.el5.i386 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package xen.i386 0:3.4.0-3.el5 set to be updated
--> Processing Dependency: xen-libs = 3.4.0-3.el5 for package: xen
--> Processing Dependency: libflask.so.1.0 for package: xen
--> Processing Dependency: libxenctrl.so.3.4 for package: xen
--> Processing Dependency: libxenguest.so.3.4 for package: xen
---> Package virt-manager.i386 0:0.7.0-1.el5 set to be updated
--> Processing Dependency: python-virtinst >= 0.400.3 for package: virt-manager
--> Processing Dependency: gtk-vnc-python >= 0.3.4 for package: virt-manager
--> Processing Dependency: libvirt-python >= 0.6.1 for package: virt-manager
---> Package gnome-applet-vm.i386 0:0.1.2-1.el5 set to be updated
---> Package libvirt.i386 0:0.6.4-3.el5 set to be updated
--> Processing Dependency: /usr/bin/qemu-img for package: libvirt
--> Processing Dependency: cyrus-sasl-md5 for package: libvirt
--> Processing Dependency: iscsi-initiator-utils for package: libvirt
---> Package kernel-xen.i686 0:2.6.18-164.el5 set to be installed
--> Processing Dependency: libvirt = 0.3.3 for package: libvirt-devel
--> Running transaction check
---> Package libvirt-devel.i386 0:0.6.4-3.el5 set to be updated
---> Package iscsi-initiator-utils.i386 0:6.2.0.868-0.18.el5_3.1 set to be updated
---> Package libvirt-python.i386 0:0.6.4-3.el5 set to be updated
---> Package qemu.i386 0:0.10.5-1.el5.rf set to be updated
---> Package gtk-vnc-python.i386 0:0.3.7-2 set to be updated
--> Processing Dependency: gtk-vnc = 0.3.7 for package: gtk-vnc-python
--> Processing Dependency: libxenctrl.so.3.0 for package: xen-devel
--> Processing Dependency: libxenguest.so.3.0 for package: xen-devel
--> Processing Dependency: xen-libs = 3.0.3-80.el5_3.3 for package: xen-devel
---> Package xen-libs.i386 0:3.4.0-3.el5 set to be updated
---> Package cyrus-sasl-md5.i386 0:2.1.22-4 set to be updated
---> Package python-virtinst.noarch 0:0.400.3-1.el5 set to be updated
--> Running transaction check
---> Package xen-devel.i386 0:3.4.0-3.el5 set to be updated
---> Package gtk-vnc.i386 0:0.3.7-2 set to be updated
--> Processing Dependency: libgdkglext-x11-1.0.so.0 for package: gtk-vnc
--> Processing Dependency: libgtkglext-x11-1.0.so.0 for package: gtk-vnc
--> Running transaction check
---> Package gtkglext-libs.i386 0:1.2.0-6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                  Arch      Version                   Repository   Size
================================================================================
Installing:
 gnome-applet-vm          i386      0.1.2-1.el5               base         76 k
 kernel-xen               i686      2.6.18-164.el5            updates      17 M
 xen                      i386      3.4.0-3.el5               gitco       9.1 M
Updating:
 gtk-vnc                  i386      0.3.7-2                   gitco        78 k
 gtk-vnc-python           i386      0.3.7-2                   gitco        13 k
 libvirt                  i386      0.6.4-3.el5               gitco       2.1 M
 libvirt-devel            i386      0.6.4-3.el5               gitco       260 k
 libvirt-python           i386      0.6.4-3.el5               gitco       139 k
 python-virtinst          noarch    0.400.3-1.el5             gitco       383 k
 virt-manager             i386      0.7.0-1.el5               gitco       1.4 M
 xen-devel                i386      3.4.0-3.el5               gitco       252 k
 xen-libs                 i386      3.4.0-3.el5               gitco       161 k
Installing for dependencies:
 cyrus-sasl-md5           i386      2.1.22-4                  base         45 k
 gtkglext-libs            i386      1.2.0-6                   gitco       145 k
 iscsi-initiator-utils    i386      6.2.0.868-0.18.el5_3.1    updates     566 k
 qemu                     i386      0.10.5-1.el5.rf           rpmforge     26 M

Transaction Summary
================================================================================
Install      7 Package(s)        
Update       9 Package(s)        
Remove       0 Package(s)        

Total size: 57 M
Total download size: 57 M
Downloading Packages:
--------------------------------------------------------------------------------
Total                                            62 kB/s |  57 MB     15:36    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction

  Updating       : xen-libs                                        [ 1/25]

  Installing     : qemu                                            [ 2/25]

  Installing     : cyrus-sasl-md5                                  [ 3/25]

  Installing     : gtkglext-libs                                   [ 4/25]

  Updating       : gtk-vnc                                         [ 5/25]

  Updating       : gtk-vnc-python                                  [ 6/25]

  Installing     : iscsi-initiator-utils                           [ 7/25]

  Updating       : xen-devel                                       [ 8/25]

  Installing     : kernel-xen                                      [ 9/25]

  Updating       : libvirt                                         [10/25]

  Updating       : libvirt-python                                  [11/25]

  Updating       : python-virtinst                                 [12/25]

  Updating       : libvirt-devel                                   [13/25]

  Installing     : xen                                             [14/25]
warning: /etc/xen/scripts/locking.sh created as /etc/xen/scripts/locking.sh.rpmnew
warning: /etc/xen/scripts/network-bridge created as /etc/xen/scripts/network-bridge.rpmnew
warning: /etc/xen/scripts/network-nat created as /etc/xen/scripts/network-nat.rpmnew
warning: /etc/xen/scripts/vif-common.sh created as /etc/xen/scripts/vif-common.sh.rpmnew
warning: /etc/xen/scripts/xen-hotplug-cleanup created as /etc/xen/scripts/xen-hotplug-cleanup.rpmnew
warning: /etc/xen/xend-config.sxp created as /etc/xen/xend-config.sxp.rpmnew

  Updating       : virt-manager                                    [15/25]

  Installing     : gnome-applet-vm                                 [16/25]

  Cleanup        : gtk-vnc                                         [17/25]

  Cleanup        : libvirt-devel                                   [18/25]

  Cleanup        : xen-libs                                        [19/25]

  Cleanup        : libvirt-python                                  [20/25]

  Cleanup        : virt-manager                                    [21/25]

  Cleanup        : libvirt                                         [22/25]

  Cleanup        : gtk-vnc-python                                  [23/25]

  Cleanup        : xen-devel                                       [24/25]

  Cleanup        : python-virtinst                                 [25/25]

Installed: gnome-applet-vm.i386 0:0.1.2-1.el5 kernel-xen.i686 0:2.6.18-164.el5 xen.i386 0:3.4.0-3.el5
Dependency Installed: cyrus-sasl-md5.i386 0:2.1.22-4 gtkglext-libs.i386 0:1.2.0-6 iscsi-initiator-utils.i386 0:6.2.0.868-0.18.el5_3.1 qemu.i386 0:0.10.5-1.el5.rf
Updated: gtk-vnc.i386 0:0.3.7-2 gtk-vnc-python.i386 0:0.3.7-2 libvirt.i386 0:0.6.4-3.el5 libvirt-devel.i386 0:0.6.4-3.el5 libvirt-python.i386 0:0.6.4-3.el5 python-virtinst.noarch 0:0.400.3-1.el5 virt-manager.i386 0:0.7.0-1.el5 xen-devel.i386 0:3.4.0-3.el5 xen-libs.i386 0:3.4.0-3.el5
Complete!

<think>好的,用户现在问的是“xen_pt_realise 调用逻辑”。我需要先确定这个函数的作用和上下文。根据之前讨论的QEMU和Xen的关系,可能xen_pt_realise属于Xen中的设备模拟部分,特别是QEMU在Xen中的设备模型相关。 首先,用户可能对Xen的虚拟化架构有一定了解,但需要更深入的代码级分析。他们可能是开发者,或者是学习虚拟化技术的学生,想要了解Xen和QEMU协作的具体实现细节。 接下来,我需要回忆Xen中的设备模拟流程。Xen的HVM(硬件虚拟化)模式下,设备模拟通常由QEMU负责,尤其是在Dom0中运行的QEMU设备模型。xen_pt_realise可能是Xen PCI Passthrough(PCI直通)相关的一个函数,负责初始化或实现PCI设备的直通逻辑。 然后,我需要验证这个函数的上下文。在QEMU的代码库中,Xen相关的设备模型代码可能在hw/xen目录下,尤其是PCI Passthrough部分。xen_pt_realise可能对应XenPCIPassthrough设备的realize方法,这是QEMU对象模型的一部分,用于设备实例化时的初始化。 用户的问题是关于调用逻辑,所以需要详细说明这个函数在QEMU设备初始化流程中的位置,它被调用的时机,以及它执行的具体步骤。可能需要涉及QEMU的设备模型、PCI设备的注册过程、以及和Xen hypervisor的交互。 另外,考虑到用户可能对代码结构不熟悉,需要解释一些术语,比如realize函数在QEMU中的作用,PCI Passthrough的基本概念,以及Xen中的相关机制,如DMOP(Device Model Operation)等。 还需要注意,用户可能希望了解这个函数在系统启动或设备添加时的调用流程,是否有其他依赖函数,以及可能涉及的错误处理或配置检查步骤。比如,在直通设备时,是否检查设备是否属于PCIe,是否支持MSI/MSI-X,以及如何映射物理设备到虚拟机等。 最后,总结整个调用逻辑,可能用流程图或步骤列表来帮助用户理解,确保回答结构清晰,符合用户之前要求的逐步解决问题的格式。</think>--- ### **xen_pt_realize 调用逻辑分析** **`xen_pt_realize`** 是 Xen 中 PCI 设备直通(Passthrough)功能的核心函数之一,属于 QEMU 设备模型的一部分,负责初始化 PCI 直通设备的虚拟化环境。以下是其详细调用逻辑: --- #### **1. 上下文与作用** - **所属模块**:位于 QEMU 的 Xen PCI Passthrough 实现中(代码路径通常为 `hw/xen/xen_pt.c`)。 - **功能目标**: 将物理 PCI 设备直接分配给虚拟机(DomU),绕过 Hypervisor 的模拟层,使虚拟机能够直接访问硬件设备,提升性能。 - **核心任务**: - 验证 PCI 设备的直通可行性(如设备是否属于 PCIe、是否支持 MSI/MSI-X 中断)。 - 配置 Xen 的 PCI 直通相关数据结构(如 `XenPCIPassthroughState`)。 - 注册设备的 MMIO 和 I/O 区域到 Xen Hypervisor。 - 处理中断路由与虚拟 IRQ 的映射。 --- #### **2. 调用流程** **`xen_pt_realize`** 的调用是 QEMU 设备初始化流程的一部分,具体步骤如下: 1. **设备实例化**: 当用户通过 QEMU 命令行或 libvirt 配置 PCI 直通设备(如 `-device xen-pci-passthrough,id=pt0,...`)时,QEMU 创建 `XenPCIPassthroughState` 设备实例。 2. **Realize 阶段触发**: QEMU 对象模型(QOM)在完成设备属性设置后,自动调用 `DeviceClass` 的 `realize` 方法。 **关联代码**: ```c XenPCIPassthroughClass->realize = xen_pt_realize; ``` 3. **关键子函数调用**: `xen_pt_realize` 内部按顺序执行以下操作: - **设备验证**: ```c xen_pt_config_init(); // 检查设备是否符合直通条件(如 PCIe 设备) ``` - **资源映射**: ```c xen_pt_map_regions(); // 将物理设备的 MMIO/I/O 区域映射到虚拟机地址空间 ``` - **中断配置**: ```c xen_pt_msi_setup(); // 初始化 MSI/MSI-X 中断路由 xen_pt_intx_setup(); // 初始化传统 INTx 中断 ``` - **Xen Hypervisor 交互**: 通过 `xc_*` 系列函数(如 `xc_device_pci_assign`) 向 Xen 工具栈发送请求,完成物理设备与虚拟机的绑定。 --- #### **3. 关键数据结构** - **`XenPCIPassthroughState`**: 存储直通设备的状态信息,包括物理设备的 BDF(Bus/Device/Function)、MMIO 区域、中断配置等。 ```c struct XenPCIPassthroughState { PCIDevice pci_dev; // 继承自 QEMU 的 PCI 设备基类 uint16_t host_bdf; // 物理设备的 BDF 编号 MemoryRegion mmio; // 直通设备的 MMIO 区域 XenPTMSI msi; // MSI 中断配置 XenPTINTx intx; // INTx 中断配置 }; ``` --- #### **4. 错误处理** 在 `xen_pt_realize` 中,若以下情况发生会抛出错误并终止虚拟机启动: - 物理设备不支持直通(如非 PCIe 设备)。 - Xen Hypervisor 拒绝设备绑定(如设备已被其他虚拟机占用)。 - 内存映射或中断配置失败(如 MSI-X Table 地址冲突)。 --- #### **5. 实际调用栈示例** ```plaintext main() [QEMU 入口] └── qemu_init() // 初始化 QEMU 设备 └── xen_pt_init() // 注册 Xen PCI Passthrough 设备类型 └── type_initialize() └── DeviceClass.realize = xen_pt_realize qemu_opts_parse() // 解析 "-device xen-pci-passthrough" 参数 device_init_func() // 创建设备实例 └── object_realize() // 触发 realize 方法 └── xen_pt_realize() // 执行直通设备初始化 ``` --- #### **6. 性能与安全影响** - **性能优势**:直通设备绕过 Hypervisor 模拟层,接近物理设备性能(如 GPU、NVMe SSD)。 - **安全风险**: - 直通设备可能通过 DMA 攻击破坏虚拟机隔离性(需依赖 IOMMU/SMMU 防护)。 - Xen 的 **DMOP(Device Model Operation)** 机制限制 QEMU 对物理设备的直接访问。 --- ### **总结** **`xen_pt_realize`** 是 Xen PCI 直通设备虚拟化的核心初始化函数,负责设备验证、资源映射和中断配置,通过 QEMU 与 Xen Hypervisor 协作实现高性能设备直通。其调用逻辑紧密依赖 QEMU 的设备模型和 Xen 的底层虚拟化接口。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值