“One of the hottest topics in all of IT today is the subject of virtualization. While it has been around for some time, it has just recently started to garner the attention of the biggest names in tech. Everyone from Intel and AMD, to Microsoft, Sun, and virtually every commercial Linux vendor has either current or planned support for virtualization. So what is it, and why is everyone so head over heels about it?”
As an OS developer, let me be the first to say virtualization is the wrong direction. I’ve seen a lot of good hardware get utterly bogged down in horrible abstractions or “one-size-fits-all” mentality. I also disagree with the idea that virtualization allowing multiple OSes on the same machine is a good idea. Instead of one service going down when the machine goes down, _every_ service goes down because they all run on the same machine.
The direction I recommend is moving the OS closer to the hardware by eliminating as many memory buffer copies as possible, reducing the number of layers an application has to go through to get to hardware, and exposing the hardware as much as possible, and then using the increased performance to allow useage of less powerful and less expensive hardware so that the services can be distributed over a wider range of machines.
First of all, I would love to know what OS you are developing. Second of all, I completely disagree with your conclusion. There is a very valid reason why everyone is going head over heals over virtualization. Virtualization is the future of computers (period.) I think the reason why you don’t understand is because you fail to see the big pictures. You will fail to understand what is the big deal as long as you keep networked storage out of the picture. You have to be able to understand that computers are going to become completely virtual and processing power is going to become a complete commodity. In 5-10 years from now, your entire OS images will be stored on a Networked Storage and your “computer” will just consist of stackable CPU’s. You will be able to cut a slice from the available hard drive space, cut a slice of available memory, and cut a slice of cpu. If you need more horsepower, you will be able to just add another set of CPU’s on top of the existing “computer”. You can have computer failovers to automatically switch the image to another set of running CPU’s. Everything is going to be virtual. You have to be able to think EMC but for CPU’s/memory. Trust me, Virtualization will make a lot of sense once you understand it.
Nothing to see here. Move along.
yeah no shit – that did sound like something from a marketing team!
i’d like to know how he can be so sure about how things are going to be – got a time machine or something?
Did you know that already if you have an EMC or NetApp Networked Storage, you can have the entire OS there on it and just have a dumb computer with processors in front of it? That’s right, the storage image is just pointed to a computer with an IP address and boots it up. Did you know there are companies already working on stackable CPU solutions? One of those companies is a very small company that goes by the name of IBM. But I’m quite sure that I am making this all up. I’m quite sure nothing I said makes any logical sense.
I believe you do have some good points. However one can’t just overlook the benefits of virtualization in general. The key factor here is whether it’s beneficial for businesses.
Low-end servers today are getting more powerful than many customers actually need. Don’t get me wrong – they *will* need the performance they’ve paid for, but not all the time. So instead of having 200 clients paying for each of their own server, a hosting company, for instance, can do with only 20-50 servers and utilize each piece of hardware more. The clients won’t notice any difference at all.
What we witness today is that we’re reaching that crucial moment when virtual servers are becoming better for businesses than oldschool servers are, also taking technical aspects into consideration. Hosting companies (and probably others) can’t just sit on the fence and wait as their competition runs ahead.
And yes, the risk issue must be accounted for. What is risk, from a technical point of view? That’s not even interesting for the customers. Risk is insurance, risk is proven statistics and risk is a part of the overall business plan. That’s how and why risk management was invented.
Virtualization is the future, whether we like it or not.
Edited 2005-11-29 00:00
“Low-end servers today are getting more powerful than many customers actually need. Don’t get me wrong – they *will* need the performance they’ve paid for, but not all the time. So instead of having 200 clients paying for each of their own server, a hosting company, for instance, can do with only 20-50 servers and utilize each piece of hardware more. The clients won’t notice any difference at all.”
I’ve never put much faith in hosting companies. As critical as IT is to business, outsourcing any aspect of IT is akin to contracting someone to run the cash register at a store. There’s zero accountability.
“And yes, the risk issue must be accounted for. What is risk, from a technical point of view? That’s not even interesting for the customers. Risk is insurance, risk is proven statistics and risk is a part of the overall business plan. That’s how and why risk management was invented.”
People often examine only the odds without even considering the consequences. Risk management is for profit calculations from the provider point of view. For a user suffering a failure, the odds are one in one of it happening and all that is left is to deal with the consequences.
“I’ve never put much faith in hosting companies. As critical as IT is to business, outsourcing any aspect of IT is akin to contracting someone to run the cash register at a store. There’s zero accountability.”
Well, hosting services was just an example. I work at the University of Oslo, where all services are in-house and VMWare and the like is only gaining in popularity. We have several VMWare clusters up and running, and, though I’m not exactly maintaining them myself, to my understanding they are a huge success to everyone involved.
It helps the university keep costs down, btw, without compromising safety. And I can assure you that we know how to deal with the consequences of failure 🙂
Virtualization has it good sides, but I agree with you to some extent.
Don’t forget that virtualization gives you the possibility to break the “one-size-fits-all” mentality.
But that doesn’t change the fact that OS’es ought to be kept down and with as few layers as possible (only use those woh are necessary for the system). It would also make virtualization work even better
Beatles sang in 1966: “The word is LOVE” … but they were wrong. The word is “KISS”.
The direction I recommend is moving the OS closer to the hardware by eliminating as many memory buffer copies as possible, reducing the number of layers an application has to go through to get to hardware, and exposing the hardware as much as possible, and then using the increased performance to allow useage of less powerful and less expensive hardware so that the services can be distributed over a wider range of machines.
As the OS developer you say you are, you should to read up a little on OS history, and the reasons why OS’s have strayed from being close to the hardware to being a little bit away from it.
The HAL is there for a reason, and what you propose sounds like you want to get rid of the HAL.
Think also about how much extra work would go into the OS if OS vendors decide to go in that direction, how much it would cost, and compare that to how much it would cost to just get better hardware. Assuming that the speed difference is O(1) or as good as being of that complexity.
Now, if you’re talking about an OS tailored for certain specific tasks targetting a well defined set of hardware, you may have something to come with.
“As the OS developer you say you are, you should to read up a little on OS history, and the reasons why OS’s have strayed from being close to the hardware to being a little bit away from it.”
Odd assumption, that an OS developer would not know the history of OS development.
“The HAL is there for a reason, and what you propose sounds like you want to get rid of the HAL.”
Every layer of abstraction decreases performance and also decreases the ability of hardware developers to bring new technology to the market. Instead of offering new approaches, hardware designers are forced to design around the abstraction layer or else their product does not get adopted. Abstraction also decreases software developer skills by lowering the standard. It seems like most software developers these days have no clue as to what a “register” is and whether it’s better to have 8 or 32 of them. Instead of code optimized for the platform it is running on, the developer ends up programming to a (generally PC based) model and assumes one size fits all, as I argued originally. Of course, the software developer is unable to debug code unless running a source code debugger level and that leads to bugs never being fixed.
Before everyone reaches for their flamethrower, ask yourself how many times have you griped about a bug that never goes away in your favorite software?
“Think also about how much extra work would go into the OS if OS vendors decide to go in that direction, how much it would cost, and compare that to how much it would cost to just get better hardware. Assuming that the speed difference is O(1) or as good as being of that complexity.”
Each successive generation of CPUs and hardware improvements have failed to yield linear results because the OSes bloat at a rate greater than Moore’s Law. It’s like cars – it used to be everyone had to know how to operate a clutch and shift manually but now everyone uses their free hand to talk on the cell phone. As drivers we are abstracted from the hardware and I can’t say it’s for the better.
I can agree that many software developers today are lacking in skills that used to be common among developers. (I can count myself lucky enough to have experience from high level programming all the way down to building a simple CPU for which I also had to write the microprogram, and know how each little part of a CPU works on a logical level)
But, I believe this is more due to that the industry haven’t had a need for this knowledge in most of their programmers. The ratio between developers that have skills and those that don’t may have diminished over the years, but at the same time I believe that the number of skilled developers are higher today than before.
Every layer of abstraction decreases performance and also decreases the ability of hardware developers to bring new technology to the market. Instead of offering new approaches, hardware designers are forced to design around the abstraction layer or else their product does not get adopted.
In order for us to get cheap hardware, and operating systems that can be easily ported, or not ported at all because it’s not necessary, we pay with a small decrease in performance. This goes for general purpose computing, and it’s really the only way to go today. Can you imagine how much more time it would take to write some of todays applications if they were handtuned to specific hardware, or how much more complex it would be to debug and maintain the same?
For general purpose computers, one-size-fits-all is the only viable way to go really.
For embedded computing, it’s quite different and is closer to what you seem to want. Having coded for resource constrained architectures (256bytes of available RAM kind of constrained), I know that one-size-fits-all don’t fit into this kind of computing.
Before everyone reaches for their flamethrower, ask yourself how many times have you griped about a bug that never goes away in your favorite software?
I have griped about bugs many times, but I have better things to do with my time than to wade through other peoples source code trying to understand how it all works in order to track down the bug (when source is available). Well defined levels of abstraction actually helps a lot in the cases where you have to go through the source to understand it. Without the abstraction, the code would consist a lot of new implementations of the wheel, and other things
If the abstraction overall is for the good or the bad depends on what you want to do, and what the system is designed for.
“Every layer of abstraction decreases performance…”
Not always. Without abstraction, developers end up writing essentially the same bit of code over and over again to account for differrences in architecture. Imagine having to re-write your entire software suite for every difference in hardware that exists out there. With good abstraction, only one version of the code needs to be produced, and development effort can go into ensuring that it is highly optimised to the abstraction layer. Ultimately, this can lead to better performance.
“…and also decreases the ability of hardware developers to bring new technology to the market. Instead of offering new approaches, hardware designers are forced to design around the abstraction layer or else their product does not get adopted…”
Again, not always. If you develop hardware that fits the abstraction layer, you don’t have to worry about making sure that all the application vendors can take into account your proprietary hardware model. As a result, products can be accepted by the market more quickly than they would otherwise be.
“…Abstraction also decreases software developer skills by lowering the standard.”
Absolutely not. Abstraction just shifts the focus of developer skills. Now I can focus on modelling my customer’s complex business needs, not on micro-optimising code. I’m more productive, not less.
“Instead of code optimized for the platform it is running on, the developer ends up programming to a (generally PC based) model and assumes one size fits all…”
Actually, my code is optimized to the platform it is running on. But not by me, but by my compiler: a tool which has many more man-hours of optimization expertise built into it than I will aquire in my lifetime.
“Of course, the software developer is unable to debug code unless running a source code debugger level and that leads to bugs never being fixed. ”
Nonsense. If each layer of abstraction is debugged properly, there is no need for the developer at the next layer to debug at any lower lever. That actually helps the debugging effort by isolating bugs to a single layer in the abstraction heirarchy.
“Actually, my code is optimized to the platform it is running on. But not by me, but by my compiler: a tool which has many more man-hours of optimization expertise built into it than I will aquire in my lifetime.”
And you’re left with an inability to know what compiler did. It’s akin to taking your car to a mechanic and getting a $1000 repair bill. Who are you to argue, as you don’t actually know what goes on underneath the hood?
“Nonsense. If each layer of abstraction is debugged properly, there is no need for the developer at the next layer to debug at any lower lever. That actually helps the debugging effort by isolating bugs to a single layer in the abstraction heirarchy.”
Pure garbage. You’re only as good as your closest abstraction layer, and that’s called “ignorance.” Try debugging an abstraction layer written by someone that didn’t know a thing about the hardware or technology they were abstracting and you’ll get my point.
“And you’re left with an inability to know what compiler did. It’s akin to taking your car to a mechanic and getting a $1000 repair bill. Who are you to argue, as you don’t actually know what goes on underneath the hood?…You’re only as good as your closest abstraction layer, and that’s called “ignorance.” ”
Does it matter what the compiler did, as long as it doesn’t break my code, and it makes it run in an acceptable timeframe? At the end of the day, how many low-level programmers who know about registers etc. also know exactly how the logic in their CPU actually implements those registers? And they do understand all the logic, do they understand the details of the physics that implements those gates? I doubt it. The truth is, we all live with abstraction at one level or another. We all live with ignorance. It doesn’t have to be a problem. (Personally, of course, I am interested in the low-level details, and try to find out more about them when I can. But I simply don’t need that knowledge to write applications to meed my client’s business needs). It is like paying someone else to build my car. I don’t need to know all the details of how it has been put together, as long as I know how to drive it.
“Try debugging an abstraction layer written by someone that didn’t know a thing about the hardware or technology they were abstracting and you’ll get my point.”
I sugegst the problems you experience here are problems with the specific implementation of the particular abstraction layer you are trying to debug. Of course, a worthwhile abstraction layer should be written by someone that knows the harware they are trying to abstract.
“Without abstraction, developers end up writing essentially the same bit of code over and over again to account for differrences in architecture. Imagine having to re-write your entire software suite for every difference in hardware that exists out there. With good abstraction, only one version of the code needs to be produced, and development effort can go into ensuring that it is highly optimised to the abstraction layer. Ultimately, this can lead to better performance.”
And what you’re arguing is that one size _does_ fit all, and that’s completely wrong.
“If you develop hardware that fits the abstraction layer, you don’t have to worry about making sure that all the application vendors can take into account your proprietary hardware model. As a result, products can be accepted by the market more quickly than they would otherwise be.”
You’re proving my point, which is that abstraction layers and virtualization limit innovation. Your own words: “If you develop hardware that fits the abstraction layer…”
Obviously, if the new technology does not fit existing abstractions, it does not get adopted so all designers do is build to the existing models.
Putting out more code does not make one a “better” programmer. Not understanding components like caches or registers and knowing how to maximize performance with those components just makes for slow and inefficient code. And if you rely on the compiler for all the hard work, you’re no more a programmer than someone who pays to have their car pimped is a mechanic.
“And what you’re arguing is that one size _does_ fit all, and that’s completely wrong.”
No, I am arguing that there are times when off-the-peg is often, in the real world, be a better solution than bespoke.
“Obviously, if the new technology does not fit existing abstractions, it does not get adopted so all designers do is build to the existing models.”
To some extent I agree. But most innovation is evolutionary, not revolutionary. And the truth is that new technologies *are* adopted. The PC of today, for example, is *very* different from the original IBM PC of the early 1980s, but my newest machine will still run DOS if I want it to.
“if you rely on the compiler for all the hard work, you’re no more a programmer than someone who pays to have their car pimped is a mechanic.”
Now, that is harsh. I certainly do *not* rely on my compiler to do all the hard work. But I do rely on it to do the spade-work so I can focus on other things. I am as much a programmer as someone who spends all afternoon messing about under the bonnet of their car instead of spending time with his family. I have simply changed my focus to the things that matter to me.
has arived
Now. Actually this is quite old news, at last taking off to some extent.
It’s overhyped no doubt, virtualization isn’t the Saviour of Mankind, nor is it 42.
However, nobody can argue that virtualization is useful. Not as good as the real thing, but when you don’t need the Real Thing(tm) virtualization is like a God sent gift.
If you take a look around you, you’ll probably see people using virtualization pretty much everywhere.
It’s a possible cost saver for companies as well as individuals, and has already been so in several situations.
The technique is quite old so don’t ask me why people are getting all hyped now, but it does have several interesting aspects as low end computers get stronger and stronger
“…nor is it 42.”
Blasphemy!
“The technique is quite old so don’t ask me why people are getting all hyped now, but it does have several interesting aspects as low end computers get stronger and stronger”
I think the hype is due to several factors:
– The magic cost/performance sweetspot has occured
– Faster PCs make people experiment with it
– The technology has matured for the most widespread platforms
…and last, but not least: Hype is hype, why ruin the hype 🙂
Blasphemy!
Unnskyld. Det var inte bra av meg
But I’m confused. How is it blasphemy? Because I don’t believe virtualization is 42, or because I dare to utter the word ’42’ when talking about computers? Or because 42 is the answer from a virtualized server or?
Because you are daring to question what has become a growing orthodoxy, that virtualisation is the answer to everything. He’s congratulating you, in a back handed way.
Aaahh…. I knew the norwegians were backwards, but I though they kept it on the soccerfield (Unnskyld eyvind – den var bare for nem at komme med).
Well, virtualization is not the answer to everything, therefore of course it’s not 42
However it is useful from time to time. I believe most of us are using it on daily basis one way or the other.
“But I’m confused. How is it blasphemy?”
Because you dared to utter the word in this context! 🙂 It should be apparent to everyone that virtualization, although being the new hype, doesn’t come close to the Number. Anyway, it pleases me to see so many brethren of the cloth
I thought so…
I’d like to get a machine running Mac OSX & Windows Vista.
No it isnt the reason Apple switched to Intel……..
However, you raised a valid point. As processors get faster, so will emulation of other systems on the processor.
It can therefore be said then, that virtualisation is not needed as an emulator is good enough for the job.
6 of 1 or half a dozen of the other
Apple is switching to Intel because IBM no longer considered them a valuable customer. Developing chips for such a small volume and with such high requests simply was not profitable.
So they told Apple: choose another chip manifacturer.
The story that Apple tells is another, but it’s not so hard to figure.
I can’t help but feel that this article is pitching virtualization as the solution to all problems out there.
While a virtualized CPU helps when you want to run multiple instances of the same or different OS’s on the same box, at the same time, things are not as simple as this article tries to make it.
I’ve yet to see a decent article that covers the problems of hardware resource allocation properly. Who gets to use the graphics card? The NIC? The HD’s?
VM has been introduced in 1968 and PR/SM (virtualisation in hardware) in 1988 on IBM 360 computers.
So it’s hardly a new thing…
It’s been 2 years since i’m working in a shop that use PR/SM and i’ve _never_ seen a failure.
When done right the overhead of virtualisation really isn’t that much, less than 5% in fact ( see http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/c… ) This is a price easily afforded with todays cpu speeds, especially if you consider the added flexibility virtualisation brings.
Note: overhead will probably be a bit higher one single processor systems or if you want to allocate cpu-‘slices’ instead of entire processors to a partition.
I’ve done some reading on LPAR and IBM’s hypervisor. Some things they don’t seem to talk about much, such as multiplexing hardware and running other OSes in a partition. If there’s only one hard drive on the server, and two OSes using different file systems, how well is the device multiplexed? I’m still trying to locate documentation on how to interact with IBM’s hypervisor and service processors, and I keep running into “NDA” and “Book IV.” Maybe I’m not looking in the right places, but is seems to me virtualization is a good way to make sure the vendor chooses what OSes can run on their hardware.
The other problem with virtualization and believing that it only has a 5% penalty is that the virtualization model may not be the most efficient model for I/O on that hardware, so the OS is constrained to adopt a less efficient model and that penalty can be much higher. Of course, in order to get the OS to run to begin with, the virtualization model adopted the de facto standard that the OS was already written to, which then stifles innovation in hardware. This reduces hardware choices which in turn reinforces the virtualization models, and in the end it all looks the same because it is.
If there’s only one hard drive on the server, and two OSes using different file systems, how well is the device multiplexed
You will never, ever buy a LPAR capable server from IBM with just 1 HD. Pseries servers mostly use something like DU3 disk enclosures ( http://www.elarasys.com/2104-DU3.asp ) which have a dual SCSI connection to the server or some kind of SAN setup.
running other OSes in a partition.
IBM supports SuSE, Redhat and AIX for use on Pseries.
The other problem with virtualization and believing that it only has a 5% penalty is that the virtualization model may not be the most efficient model for I/O on that hardware, so the OS is constrained to adopt a less efficient model and that penalty can be much higher.
As far as I know there isn’t a special “model” coded into AIX. It’s just the plain old code but it passes through the hypervisor instead of directly to the hardware. And as IO adapters are assigned to specific partitions I’m pretty sure they are accessed directly by the OS running in the partition. But this *really* isn’t my area of expertise. I can tell you that in my experience using Pseries as part of our backup solution IO throughput is as good or better than comparable solutions.
Edited 2005-11-29 18:08
“IBM supports SuSE, Redhat and AIX for use on Pseries.”
Everybody runs Linux. I’m talking about _other_ operating systems.
“As far as I know there isn’t a special “model” coded into AIX. It’s just the plain old code but it passes through the hypervisor instead of directly to the hardware. And as IO adapters are assigned to specific partitions I’m pretty sure they are accessed directly by the OS running in the partition. But this *really* isn’t my area of expertise. I can tell you that in my experience using Pseries as part of our backup solution IO throughput is as good or better than comparable solutions.”
If the hardware is exposed then it is isn’t “virtualized.” What you’re describing is simply logical partitioning of physical elements.
Everybody runs Linux. I’m talking about _other_ operating systems.
You want to buy equipment worth thousands of dollars to run what exactly, AROS ? If it’s not Linux or AIX you’re out of luck. I hear some people are trying to port Solaris over to powerpc these days, but why bother ? Even the supported Linux versions are behind AIX in features.
If the hardware is exposed then it is isn’t “virtualized.” What you’re describing is simply logical partitioning of physical elements.
Well yeah, since AIX5.3 you can also create virtual adapters that share one physical adapter between partitions but obviously that creates more overhead. I can’t remember the exact figures right now, but it was enough for the IBM rep to discourage it. And when your spending these thousands of dollars anyway why economise on adpaters ?
“You want to buy equipment worth thousands of dollars to run what exactly, AROS ? If it’s not Linux or AIX you’re out of luck. I hear some people are trying to port Solaris over to powerpc these days, but why bother ? Even the supported Linux versions are behind AIX in features.”
As I said in my original post, I’m an OS developer. That does mean something other than Linux or AIX. If no one disagreed with everyone else, we’d all be stuck running DOS on 286. Or perhaps we should all give up and run Linux.
“Well yeah, since AIX5.3 you can also create virtual adapters that share one physical adapter between partitions but obviously that creates more overhead. I can’t remember the exact figures right now, but it was enough for the IBM rep to discourage it. And when your spending these thousands of dollars anyway why economise on adpaters ?”
I believe one of my points was the virtualization creates overhead, but your post had claimed there was not much of a penalty. Above you state virtual adapters create overhead, “enough for the IBM rep to discourage it.”
I don’t see the point in this. I don’t want to have to run multiple OSs, I just want to run one OS that works!
I can understand using virtualisation to make a single OS more resiliant to crashes (eg preventing buggy drivers from bringing a system down).