我习惯于为服务器滚动自己的内核,因为它可以很好地减少需要处理的漏洞(以及由此产生的补丁)的数量。
在传统(裸机)世界中,整个过程就是了解您拥有什么(硬件)以及您需要什么(以太网、IPv4、iptables 等)。在虚拟化环境中,有些东西保持不变(仍然需要以太网和 IPv4),有些东西消失了(电源管理),然后出现了一些新的需求(vxnet3 或 vmware-tools,即使它们是在内核之外编译的)。
所以我的问题主要涉及最后两类:我可以完全删除什么,我想要什么新东西?
例如,如果我的所有磁盘操作都要通过另一个文件系统/调度程序/缓存才能到达虚拟磁盘,我需要什么 IO 调度程序?我是否需要启用超线程,或者虚拟机是否无论如何都会将它们显示为 CPU?我是否需要打开 Large Receive Offload,或者这是虚拟机管理程序的网络驱动程序将为我做的事情?
答案1
我同意之前的所有评论,但有以下补充。大多数性能调整都是在 ESXi Guest 上通过 .vmx 文件进行的。此外,您可以对网络接口进行的任何调整(例如:缓冲区大小、LRO 等)都会提高 Guest VM 的性能。您还可以查看 ESXi 的半虚拟化功能。
VMWare 有一份非常好的文档,提供了性能调优的最佳实践。你可以在这里找到它“性能调优最佳实践” 本文还将帮助您了解 ESXi 中的低级虚拟化工作原理,并可能让您了解可以在客户操作系统(包括内核)上禁用/启用哪些功能
高血压,
答案2
一般来说,我不会定制我的 VMWare VM 中的内核——它们与物理系统足够相似,额外的定制在我看来并不值得,我只是将它们视为物理机器。
也就是说,虽然我不确定调度程序,但你绝对可以删除所有不必要的硬件支持,以释放一些额外的 RAM 等,正如@Chopper3 建议的那样,使用 VMTools 驱动程序作为虚拟硬件。
尽管如此,我不确定其他人可以提出什么样的优化,但我肯定也很感兴趣——虽然很多“硬件”东西都是由虚拟机管理程序处理的(例如 LRO),但我从未读过任何详细说明 LRO 在客户机中的影响的统计数据,这可能会对性能产生影响。