Why is 12.04 removing the -server kernel flavour?
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
- https://lists.ubuntu.com/archives/kernel-team/2011-October/017471.html
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.