Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm used to rolling my own kernels for servers, as it nicely minimizes the number of exploits (and the resulting patches) to take care of.

In a traditional (bare metal) world, the whole process is about knowing what you have (hardware), and what you need (Ethernet, IPv4, iptables, etc.) In a virtualized environment, some things stay the same (still need Ethernet and IPv4), some things go away (power management), and then there are some new needs (vxnet3, or vmware-tools, even though that's compiled outside of the kernel).

So my question mostly concerns itself with the last two categories: what can I remove completely, and what new stuff do I want?

For example, what IO scheduler do I want, if all my disk operations are going through another filesystem/scheduler/cache to get to the virtual disk? Do I need hyper-threading enabled, or is the VM going to show them to me anyway as a CPU anyway? Do I need Large Receive Offload turned on, or is that something that the hypervisor's network drivers are going to do for me?

share|improve this question
Why wouldn't you use the vmtools drivers? Of course only certain versions are supported but if you insist on making your own just use the vmtools drivers. – Chopper3 Mar 4 '11 at 15:28
@Chopper3, I believe he is planning on using those drivers. What I think he is asking is What configure options do I need to build an extremely slim kernel, that includes only what I would need under ESXi, and will be heavily optimized for ESXi? – Zoredache Mar 4 '11 at 17:43
@Zoredache got it exactly right. I want a cruft-free, lean mean syscall machine ;) – Marcin Mar 4 '11 at 17:59
@zord, sorry, missed that completely, must have been having an off day :) – Chopper3 Mar 4 '11 at 23:23

I subscribe to all the previous comments with the following additions. Most of the performance tunning is done on the ESXi Guest is done on the .vmx file. Also any tweaks that you can add to the networks interfaces (ex: buffer size, LRO, etc) will increase performance of the Guest VM. You can also check out the Paravirtualization features of ESXi.

VMWare has a very good document that provides best practices for performance tunning. You can find it here "Performance Tunning Best Practices" This paper will also help you understand how low level virtualization works in ESXi and maybe give you an idea of what can you disable/enable on the Guest OS (Kernel included)


share|improve this answer

Generally I don't customize the kernels in my VMWare VMs -- they're similar enough to physical systems tat the extra customization isn't really worth it IMHO, I just treat them like physical machines.

That said, while I'm not sure about schedulers, but you can definitely strip out all the unnecessary hardware support in order to free up some extra RAM and such, and as @Chopper3 suggested using the VMTools drivers for the virtual hardware.

All that said I'm not sure what kind of optimizations others can com up with but I'm definitely interested as well -- while a lot of "hardware" stuff is handled by the hypervisor (e.g. LRO) I've never read any statistics that detail the effect of LRO in the guest, which could have an effect on performance.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.