设为首页 收藏本站
查看: 1893|回复: 0

[经验分享] VirtualBox 学习

[复制链接]

尚未签到

发表于 2015-10-12 10:31:26 | 显示全部楼层 |阅读模式
从3.2版开始,当 Guest运行特定的 Server OS时, VirtualBox支持CPU的热插拔. 也就是在虚机正在运行时,添加和移除虚拟CPU。CPU 热插拔只在支持这个特性的OS上才能工作,也就是说,只有Linux 和 Win 2008 x64 data center 版。  
  Win 2008 x64 data center 版只支持 hot-add,不支持 hot-remove。 Linux 对 hot-add,hot-remove都支持,但是要求至少8个CPU的64位Linux
  ----- 注: 这里说的CPU是虚拟CPU,或者称 logic processor(LP),不同于物理CPU,它是虚拟化工具将物理CPU的计算功能虚拟化后的分配单元。 例如:配置两个Intel E5530CPU的服务器,E5530是4核并支持超线程的CPU,LP 数量= 2 CPU * 4核 * 2 (超线程)= 16 LP,  而 E5440 双CPU的服务器,因为不支持超线程,总共只有 LP = 2 CPU * 4 核 = 8 LP

  当前,只能通过命令行来调用LP热插拔功能
1. 需要为某个虚机enable CPU热插拔功能
  VBoxManage modifyvm "VM name"  --cpuhotplug  on
  2. 使用 --cpu 参数指定该虚机可以使用的CPU的最大数量
  VBoxManage modifyvm "VM name"  --cpu  8
  3. 然后,如果虚机是关机状态,可以用如下命令添加删除LP
  VBoxManage modifyvm "VM name"  --plugcpu 3
VBoxManage modifyvm "VM name"  --unplugcpu3
  注意,CPU 0 永远不能remove
  
如果虚机正在运行,使用如下命令添加LP:
  VBoxManage controlvm "VM name"  plugcpu 3
VBoxManage controlvm "VM name"  unplugcpu 3
  
  Linux 中,为了防止CPU正在使用时被remove,首先必须在guest 内将它eject。 Linux 的 guest additions 包含一个服务,它接收 hot-remove事件,然后eject CPU。 同样的,Linux中,在CPU被添加时,它不会被OS自动使用,guest additions 服务会检测CPU是否被安装了。 如果CPU没有被使用,可以用如下命令指定开始使用
  echo 1 > /sys/devices/system/cpu/cpu<id>/online

  
  
  Host的 PCI Passthrough
  当运行在 Linux host 之上的时候, 如果有足够新的内核 (至少 2.6.31),  可以使用实验性的 host PCI passthrough 特性 (VirtualBox 4.1 版本开始)
  1.  PCI passthrough 模块是在 VirtualBox 扩展包中被带入的,必须另外安装,而且它不使用VirtualBox的 GNU 许可证,这个要注意。
  2. 这个特性允许 guest 直接使用host上的物理PCI设备,即使host 没有这个设备的驱动,支持通常的PCI和 部分PCIe 卡。当前不支持AGP和特定的一些PCIe 卡,如果他们依赖GART (Graphics Address Remapping Table) 单元编程来用于纹理管理,因为它使用非常特殊的函数操作来访问IOMMU的页面重映射接口。将来的版本或许会去除这个限制。
  3. 为了能全功能使用,VirtualBox的PCI passthrough 支持依赖于一个 IOMMU硬件单元,但是这个硬件还没有被广泛应用。 如果硬件使用bus mastering ( 也就是说它执行DMA操作来访问它自己的OS内存),那么就需要使用IOMMU,否则这种DMA事务可能会写入错误的物理内存地址,因为设备DMA引擎被编程使用设备特定的协议来执行内存事务。 IOMMU硬件单元会作为翻译单元,通过guest OS的物理地址和host物理地址的翻译规则的信息,来映射来自设备的物理内存访问请求。
  Intel的 IOMMU实现被称为 intel virtualization technology for directed I/O(VT-D),  AMD的 IOMMU实现被称为 AMD-Vi ,所以请检查主板说明和BIOS设置。 即使你的主板没有一个IOMMU,特定的PCI卡仍然可能可以工作,例如串口PCI卡,但是 guest 启动时会出现警告,而且如果虚机的驱动尝试enable card bus mastering 时,虚机的操作会被中断。
  非常常见的是,IOMMU被 BIOS 或者 host OS 缺省disable了。所以,检查:
  1. 主板有一个 IOMMU单元
2. CPU支持 IOMMU
3. BIOS中enable了 IOMMU
4. 虚机必须使用 VT-x/AMD-v &#43;  nested paging enabled.
5. Linux 内核必须编译来支持 IOMMU (包含 DMA重映射,看内核编译选项的 config_DMAR), PCI stub driver (config_PCI_stub) 也需要编译。
6. Linux 内存必须能识别和使用 IOMMU单元 (可能需要 intel_iommu=on 启动选项),请在内核引导log中查看DMAR, PCI_DMA
  然后,就是选择PCI卡,将它attach到guest OS上。 使用 lspci 列出可用的 PCI设备,输出类&#20284;如下信息:
  
  01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]
  01:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
  02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
  03:00.0 SATA controller: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
  03:00.1 IDE interface: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
  06:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8500 GT] (rev a1)
  
  其中,第一列是 PCI地址 (&#26684;式为: bus:device:function)这个地址可以被用于在以后的操作中指示这个设备。例如,上例中的host的第二个PCI总线上的 PCI网卡 attach到 虚机中作为 device5, function0,可以使用如下命令 (在host上执行)
  VBoxManage modifyvm  &quot;VM name&quot;  --pciattach  02:00.0@01:05.0
  如果要detach, VBoxManage modifyvm  &quot;VM name&quot;  --pcidetach  02:00.0
  注意,host 和 guest 都可以在运行时任意分配其它的 PCI 地址给 attach的卡,所以上述命令中的地址只是在 attachment 操作时(host上)和 BIOS PCI 初始化时(guest上)才有效的地址
  
  如果虚机有 PCI设备attach了,那么有如下的限制:
  1. 仅支持非共享中断的PCI卡 (例如host上使用 MSI     ?? 谁能解释一下)
  2. guest 的状态无法被可靠的保存和恢复 (指的是快照),因为PCI卡的内部状态无法获得。
  3. Teleportation (类&#20284; MS 的 live migration,VM的 vMotion) 无法工作 (和上面同样的原因) --------- 是的,VirtualBox 从 3.1版开始就支持这个功能了。
  4. 无法实现 lazy 物理内存的分配,host 将在虚机启动时预先分配给该虚机所有它指定的内存。还是因为上面的原因,造成无法获得物理硬件对物理内存的访问信息。
  
  
  关于 IOMMU,参见
  http://baike.baidu.com/view/3100269.htm
  http://www.iyunv.com/jh/4/985872.html  ---- 这个帖子里有 intel 的 IOMMU 技术规范文档的下载地址。
  
  从纯技术角度讲,AMD的 IOMMU 貌&#20284;更有趣

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125722-1-1.html 上篇帖子: Virtualbox搭建LNMP 下篇帖子: virtualbox不能识别u盘等移动设备
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表