Ubuntu is removing -server flavour, as specified on release notes of 12.04:

As with Beta-1, the Beta-2 kernel no longer carries separate amd64 -server and -generic kernel flavors. These have been merged into a single -generic kernel flavor to help reduce the maintenance burden over the life of this LTS release.

The differences between -generic and -server seems to be related to preempting, the timer interrupt and the i/o scheduler, as stated on: https://help.ubuntu.com/10.10/serverguide/C/preparing-to-install.html#intro-kernel-diffs

I'm asking for technical specs.

  1. So, what happens now?
  2. Will the server edition run the desktop kernel with no performance penalty?
  3. Is this justified somehow?
  4. What happens with that differences?
  5. Can they be changed in userspace?
  6. There are not appllicable as of 12.04?
  7. If the answer is yes, this change will involve performance penalty?

All of them are questions that can be answered. I'm asking for a specific change on a package, not anything else.


3 Answers 3


As you noticed in the release announcements, the generic and server kernel flavors were merged for the 12.04 release in an effort to reduce the maintenance burden over the life of the LTS. The two kernel flavors actually only differed with regards to 2 major kernel config options: the default I/O scheduler and the preemption model.

This was discussed in detail on the Ubuntu Kernel Team mailing list

As noted in that thread, the default I/O scheduler changed from "deadline" to "cfq". However, anyone wanting to remain with the Deadline I/O scheduler could do so at boot time by setting elevator=deadline.

The preemption model changed from CONFIG_PREEMPT_NONE to CONFIG_PREEMPT_VOLUNTARY. At this time, I unfortunately do not have any performance benchmarks on hand to point you at. Hope this helps some. Thanks.


Your "why" question is answered within the quote you were providing - because it is easier to maintain this way. The kernel functionality is parametrized quite well, you can change things like the scheduler at run-time, so there is no pressing needs for different defaults to be compiled in.

For the exact reasons and the discussion of details you would have to ask on the Ubuntu KernelTeam mailing list - see the informational KernelTeam Wiki page for contact information.


What happens now is that there is only one kernel for both server and desktop. The IO scheduler can be changed at runtime if you want, but CFQ is the most feature complete and actively maintained scheduler, so it is a good default. Which one you use makes little difference under most workloads. The server kernel used to disable even voluntary kernel preemption because theoretically it could give slightly better throughput, but I am not aware of any performance measurements that actually show any benefit there, so in practice, servers will not be affected by moving to the desktop premption model. The kernel is also tickless ( CONFIG_NO_HZ ), meaning that it schedules timer interrupts only when needed based on currently running application timers rather than at a fixed interval, and I believe this has been the case for several releases now, despite what the server guide says.

TL;DR: There was no benefit to maintaining another kernel for servers, so the practice has stopped.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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