我是 Xen 的新手。我想知道 Xen 是如何工作的。面对代码时真的是一个难题,我不知道从哪里开始。有适合我的简单文章吗?
4 回答
由于您提到查看代码,我假设您想了解 Xen 的技术细节,而不仅仅是如何启动 VM。
与所有问题一样,从简单的事情开始,然后逐步向上。一些指示:
一定要具备必备的经验。特别是强大的 C 和 Linux 亲和力,以及 x86 分页和虚拟化内存工作。
确保您对一般的 Xen 架构有很好的掌握。例如,半虚拟化与硬件支持的虚拟化,管理域 (Dom0) 与非特权域 (DomU) 相比的特殊作用等。
调查在 Dom0 中运行的 Xen 组件:
Xen 控制库 ( libxc ) 实现了与超级调用相关的大部分逻辑并在这些逻辑周围添加了糖(查看)
tools/libxc
。用于管理 Xen 的瑞士军刀,即Xen 轻库 ( libxl )。
xm
该库用该工具替换了已弃用的工具,xl
并负责您的所有维护任务,例如启动/停止 VM、列出所有正在运行的 VM 等。对于所有这些操作,它与上述 libxc 协同工作。(Libxl 位于tools/libxl
.)Xenstore是一种树状数据结构,所有正在运行的域都可以从中检索和存储数据。这是必要的,因为所有 I/O 都通过 Dom0(而不是虚拟机管理程序!),并且域需要与 Dom0 通信它们将如何传递 I/O。(查看
tools/xenstore
。)您可以使用诸如xenstore-ls
.blkback
/netback
内核驱动程序通过共享通道将数据传递给VM。(您会在最近的 Linux 内核(例如 >= v3.0)中找到这些驱动程序,该内核具有所谓的 PVOPS 支持)。看看控制台守护程序 (
tools/console
)。请注意,有时实际使用的是 Qemu 控制台。如果您为 VM 选择文件支持的虚拟存储,Qemu 也作为默认后端出现在图片中。
试验虚拟机间通信的“Xen 方式”:授权表、事件通道和 Xenstore。借助这些基础知识,您可以在 VM 之间创建自己的共享通道。例如,您可以通过编写在两个域中使用的内核模块来让它们相互通信来做到这一点。
我还可以在源代码中提供一些您可以查看的指针:
xen/xen/include/public/xen.h
将为您提供所有超级调用的列表,并附上他们所做的评论。xen/xen/include/xen/mm.h
向您介绍 Xen 使用的不同内存术语(即真实地址与虚拟地址和页码)。如果您不掌握这些差异,那么阅读虚拟机管理程序代码肯定会令人沮丧。xen/xen/include/asm-x86/config.h
概述了 Xen 的内存布局。xen/tools/libxc/xenctrl.h
导出大量有趣的域控制操作,它提供了 Dom0 和管理程序之间任务划分的抽象视图。
最后但同样重要的是,强烈推荐 David Chisnall所著的《 Xen Hypervisor 权威指南》一书。它以全面的技术方式涵盖了所有这些主题以及更多内容,并提供了大量代码示例。
Xen wiki 和开发者邮件列表也是了解 Xen 的重要资源。
如果您有更具体的问题,那么我可以给您更具体的答案。
如果您只是想要一个概述,您可以阅读以下内容:http ://wiki.xenproject.org/wiki/Xen_Project_Beginners_Guide 。
这将向您介绍 Xen 虚拟机管理程序,建议配置以设置虚拟机,提供有关网络的信息,最后提供有关虚拟机管理工具的详细信息。
本文档是专门在 ubuntu 上获取 Xen(最重要的是,它有效!) https://help.ubuntu.com/community/Xen
===
但是,如果您想更上一层楼并了解 Xen 的工作原理;Xen 架构、内存管理、设备管理、CPU 调度等,我建议阅读《Xen Hypervisor 权威指南》一书。
这里有几个链接可以指导您使用 ZEN Start up。希望它们对您有用。
对我来说,这是最好的、更具体的教程,其中包含示例并逐步开始。我开始的时候用过。
然后您可以阅读更多关于 Xen 文档本身或一些书籍的内容,但作为让您轻松安装和测试 Xen 的起点,我选择了 Debian Wiki 中的该教程。