I remember an internal joke floating around Microsoft in 2007, about a new way to deploy Windows Server. There was an ad campaign around Windows Vista at the time that said ‘The Wow Starts Now!’ When they spoke about Server Core they joked ‘The Wow Stops Now!’
Server Core was a new way to deploy Windows Server. It was not a different license or a different SKU, or even different media. You simply had the option during the installation of clicking ‘Server Core’ which would install the Server OS without the GUI. It was simply a command prompt with, at the time, a few roles that could be installed in Core.
While Server Core would certainly save some resources, it was not really practical in Windows Server 2008, or at least not for a lot of applications. There was no .NET, no IIS, and a bunch of other really important services could not be installed on Server Core. In short, Server Core was not entirely practical.
Fast Forward to Windows Server 2012 (and R2) and it is a completely different story. Server Core a fully capable Server OS, and with regard to resources the savings are huge. So when chatting with the owner of a cloud services provider recently (with hundreds of physical and thousands of virtual servers) I asked what percentage of his servers were running Server Core, and he answered ‘Zero’. I could not believe my ears.
The cloud provider is a major Microsoft partner in his country, and is on the leading edge (if not the bleeding edge) on every Microsoft technology. They recently acquired another datacentre that was a VMware vCloud installation, and have embarked on a major project to convert all of those hosts to Hyper-V through System Center 2012. So why not Server Core?
The answer is simple… When Microsoft introduced Server Core in 2008 they tried it out, and recognizing its limitations decided that it would not be a viable solution for them. It had nothing to do with the command line… the company scripts and automates everything in ways that make them one of the most efficient datacentres I have ever seen. They simply had not had the cycles to re-test Server Core in Server 2012 R2 yet.
We sat down and did the math. The Graphical User Environment (GUI) in Windows Server 2012 takes about 300MB of RAM – a piddling amount when you consider the power of today’s servers. However in a cloud datacentre such as this one, in which every host contained 200-300 virtual machines running Windows Server, that 300MB of RAM added up quickly – a host with two hundred virtual machines required 60GB of RAM just for GUIs. If we assume that the company was not going to go out and buy more RAM for its servers simply for the GUI, it meant that, on average, a host comfortably running 200 virtual machines with the GUI would easily run 230 virtual machines on Server Core.
In layman’s terms, the math in the previous paragraph means that the datacentre capacity could increase by fifteen percent by converting all of his VMs to Server Core. If the provider has 300 hosts running 200 VMs each (60,000 VMs), then an increased workload of 15% translates to 9,000 more VMs. With the full GUI that translates to forty-five more hosts (let’s conservatively say $10,000 each), or an investment of nearly half a million dollars. Of course that is before you consider all of the ancillary costs – real estate, electricity, cooling, licensing, etc… Server Core can save all of that.
Now here’s the real kicker: Had we seen this improvement in Windows Server 2008, it still would have been a very significant cost to converting servers from GUI to Server Core… a re-install was required. With Windows Server 2012 Server Core is a feature, or rather the GUI itself is a feature that can be added or removed from the OS, and only a single reboot is required. While the reboot may be disruptive, if managed properly the disruption will be minimal, with immense cost savings.
If you have a few servers to uninstall the GUI from then the Server Manager is the easy way to do it. However if you have thousands or tens of thousands of VMs to remove it from, then you want to script it. As usual PowerShell provides the easiest way to do this… the cmdlet would be:
Uninstall-WindowsFeature Server-Gui-Shell –restart
There is also a happy medium between the GUI and Server Core called MinShell… you can read about it here. However remember that in your virtualized environment you will be doing a lot more remote management of your servers, and there is a reason I call MinShell ‘the training wheels for Server Core.’
There’s a lot of money to be saved, and the effort is not significant. Go ahead and try it… you won’t be disappointed!