4.6 小结
本章主要介绍了QEMU/KVM中关于CPU、内存、磁盘、网络、图形显示等计算机系统的最核心最基本部件的简单原理、详细配置及实践操作,同时还在其中提及了一些命令行工具(如ps、brctl、lspci、fdisk等等)和展示了几个配置脚本(如查看CPU信息的cpu-info.sh、建立网络链接的qemu-ifup等等)。相信通过阅读本章的内容,你已经可以创建自己的客户机,并且可以配置成功其中的CPU、内存、磁盘、网络等基本部件从而满足普通的应用需求。而在下一章中,将会介绍KVM中一些提高性能的特性(如virtio、VT-d等)、其他高级功能(如KSM、动态迁移、热插拔、嵌套虚拟化等)以及一些并不太常用的特性(如SMEP功能、AVX、AES新指令等),让大家对KVM的各项功能有更完整的了解,并能根据实际情况选择适当的优化方法。
4.7 本章注释和参考阅读
q 本章注释
[1] Romley是Intel的一个平台的代号,在它里面配置有SandyBridge-EP的CPU和Patsburg芯片组,这里提及的Romley-EP 4S是有4个CPU socket的系统。关于Intel各种CPU、芯片组、网卡、主板等硬件的代号,可参见:http://en.wikipedia.org/wiki/List_of_Intel_codenames 。
[2] CPU支持了超线程(HT)技术,还需要在BIOS中打开它的开关才能使用。在BIOS中,超线程的设置可能会在“Advanced à CPU Configuration”下设置,通常标识为“Hyper-Threading”。另外,直到2012年作者写本书时,AMD还没提供Hyper-Threading的支持(AMD目前走是mult-core的路线),而Intel是mult-core和hyper-threading一起使用。
[3] NUMA(Non-Uniform Memory Access 非一致性内存访问)是一种在多处理系统中的内存设计架构,在多处理器中CPU访问系统上各个物理内存的速度可能是不一样的,一个CPU访问其本地内存的速度比访问(同一系统上)其他CPU对应的本地内存快一些。
[4] Nehaem是Intel的第二代45nm微处理器架构,如下的网址可以让你了解更多关于Nehalem平台的知识 http://www.realworldtech.com/nehalem/ 。
[5] TLB(translation lookaside buffer,旁路转换缓冲)是内存管理硬件用以提高虚拟地址转换速度的缓存。TLB是页表(page table)的缓存,保存了一部分页表。关于TLB的更多信息,可以查看wikipedia中的介绍http://en.wikipedia.org/wiki/Translation_lookaside_buffer 。
[6] sysfs是一个虚拟的文件系统,它存在于内存之中,它将Linux系统中设备和驱动的信息从内核导出到了用户空间。sysfs也用于配置当前系统,此时其作用类似于sysctl命令。systfs通常是挂载在/sys目录的,通过“mount”命令可以查看到sysfs的挂载情况。
[7] 关于swap space,Redhat公司的文档曾有这样的推荐:在其RHEL5.x或RHEL6.x系列的Linux发行版中,物理内存小于4GB时,推荐不少于2GB的交换空间;物理内存4GB~16GB,推荐不少于4GB的交换空间;物理内存16GB~64GB,推荐不少于8GB的交换空间;内存64GB~256GB,推荐不少于16GB的交换空间。
[8] 一个QEMU bug:Guest boot failed when the drive interface is scsi
https://bugs.launchpad.net/qemu/+bug/485251
[9] 稀疏文件(sparse file),是计算机系统块设备中能有效利用磁盘空间的文件类型,它用元数据(metadata)中的简要描述来标识哪些块是空的,只有在空间被实际数据占用时,才实际写到磁盘中。可以参考wikipedia上的“sparse file”词条,http://en.wikipedia.org/wiki/Sparse_file 。
[10] 在QEMU的源代码中有一个专门的“slirp”目录使用了Slirp的实现。Slirp是通过普通的终端模拟PPP、SLIP等连接到Internet的开源软件程序,更多信息请参考其官方网站:http://slirp.sourceforge.net/。
[11] BOOTP即Bootstrap Protocol,是一种比较早出现的远程启动协议,后来DHCP协议实现了BOOTP几乎所有的功能(再加了很多自有功能),已基本把BOOTP取代了,可参考如下wikipedia上的描述http://en.wikipedia.org/wiki/Bootstrap_Protocol 。
[12] Samba是类Unix(包括Linux)系统与Windows系统进行相互操作的标准软件,主要用于文件的跨系统共享。其官方主页为:http://www.samba.org/ 。
[13] Use-Mode Linux是一种安全地运行Linux各个版(单独的kernel)和Linux进程的方式。该项目主页为:http://user-mode-linux.sourceforge.net/ 。
[14] VDE(Virtual Distributed Ethernet),详情参考其项目主页:http://vde.sourceforge.net/ 。
[15] 对于QEMU获取和释放鼠标的组合键(如“Alt+Ctrl”),一般来说是指位于键盘左边的键而不是键盘右边的键,而需要提到键盘右边的Ctrl、Alt、Shift键时,一般都会特别指明是右边的键(如“右Ctrl键”)。
[16] VNC一般采用TCP端口5900+N(N为vncserver启动时指定的桌面端口号)作为服务端的端口,在VNC Viewer远程连接时,既可以用5900+N(如5901)这样的端口,也可以直接用桌面号N来连接,一般情况下VNC Viewer程序会自适应地做相应的转换。
[17] 关于VNC的安全问题及其设置,如果对安全性要求很高,请参考如下网页链接:http://wiki.qemu.org/download/qemu-doc.html#vnc_005fsecurity
[18] 了解更多关于Unix Domain Socket的内容,可以参考如下链接:
http://beej.us/guide/bgipc/output/html/multipage/unixsock.html
[19] VGA(Video Graphics Array)是IBM于1987年在其计算机中引入的显示硬件接口,后来也成为事实上的工业标准,目前绝大多数多数的PC和x86服务器都支持VGA接口及其显示标准。
[20] curses是类Unix系统(包括:Unix、Linux、BSD等等)上终端控制的库,应用程序能够基于它去构建文本模式下的用户界面。而ncures是指“new curses”,发布于1993年,是目前curses最著名的实现,也是在目前类Unix系统中使用非常广泛的。
[21] VBE(VESA BIOS Extensions)是VESA的一个标准,目前版本是3.0,请参考如下链接获取关于“VBE”的更多信息,http://en.wikipedia.org/wiki/VESA_BIOS_Extensions。
q 参考阅读:
[a] 关于Sandy Bridge处理器架构:http://www.realworldtech.com/sandy-bridge/
[b] 关于huge page的介绍:http://lwn.net/Articles/374424/
[c] 关于QEMU的网络,也可参考:http://people.gnome.org/~markmc/qemu-networking.html
[d] 最好不要在qcow2格式做镜像文件时使用“aio=native”,Redhat对其有说明,如下:
https://access.redhat.com/knowledge/articles/41313
[e] 关于QEMU的QED文件格式,可以见如下链接中的介绍。
http://www.linux-kvm.com/content/qed-qemu-enhanced-disk-format
http://wiki.qemu.org/Features/QED
[f] iSCSI请查看:http://en.wikipedia.org/wiki/ISCSI
[g] Fibre Channel请查看:http://en.wikipedia.org/wiki/Fibre_Channel