Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

macrumorsuser10

macrumors 6502
Original poster
Nov 18, 2010
359
445
I'm looking at the new Mac Pro for software development and light gaming. I largely program with the gcc toolchain, XCode, and Matlab/R. My current set up is a 2011 MacBook Pro with an i7.

Will VM software (specifically VMWare Fusion, Oracle VirtualBox, or Parallels) fully take advantage of the new Mac Pro's 6-core (and 8- and 12-core) configurations? For example, if I run Matlab in Win7 in a VM, will the VM benefit from having more cores?
 
VMware Fusion, Parallels Desktop and Oracle Virtualbox can not use specific cores of a machine. You can assign multiple virtual processors to a vm and thus have a multithreaded vm.

It is overly complicated in case of Matlab because you can natively install it on OS X. If I recall correctly Matlab is able to take use of GPGPUs.

Things like clang (which is what you are actually using when running gcc if you've installed Xcode and using the cli tools) can benefit from multicore setups but you may have to tell the compiler to do so (I think with make you have to use -j2 or -j4 if you want 2 or 4 threads; could also be FreeBSD specific though). If you add ccache to that mix things can get flying :)
 
Xcode will automatically use all the cores it can find.

The Clang command line tool I don't think does, but you can either compile multiple classes are once manually, or use an option in make that does so automatically.

You can't necessary pin VMWare to certain cores, but it will automatically make use of as many cores as you set up a virtual machine to use.
 
will the VM benefit from having more cores?

Yes, if you assign more cores to it under the configuration of the VM.

Food for thought. The base nMP is 1,000 more then the the top end iMac and in both computers you get a quad core processor. While the nMP will be faster you're paying a hefty price. The downside is that you only get 256GB of an SSD (you'll have to upgrade the storage) and no monitor, where as the iMac you have the monitor and get 1TB of storage
 
I'm looking at the new Mac Pro for software development and light gaming. I largely program with the gcc toolchain, XCode, and Matlab/R. My current set up is a 2011 MacBook Pro with an i7.

Will VM software (specifically VMWare Fusion, Oracle VirtualBox, or Parallels) fully take advantage of the new Mac Pro's 6-core (and 8- and 12-core) configurations? For example, if I run Matlab in Win7 in a VM, will the VM benefit from having more cores?

I use a 2012 Mac Pro for infrastructure design and use VMware Fusion heavily. I also have an Apple 512GB SSD and 128GB RAM. I must say the machine works extremely well for what I use it for. I do not do really any content creation.

I have a RAID0 array with three 2TB spindles for VM data (disposable) and everything works great.
 
I use a 2012 Mac Pro for infrastructure design and use VMware Fusion heavily. I also have an Apple 512GB SSD and 128GB RAM. I must say the machine works extremely well for what I use it for. I do not do really any content creation.

I have a RAID0 array with three 2TB spindles for VM data (disposable) and everything works great.

Are you using Civil3d in VM, if so a couple of questions, if that's okay:

Why fusion over parallels?
How many cores and how much RAM do you set to VM?
What GPUs are using?
What single core CPU speed do you have?

I use Bentley and Autodesk for infrastructure in Bootcamp at the moment as my current machines are too slow to run them through VM, apart from excel type works. Need to move to MP now, but still trying to decide between cMP and nMP and have been waiting for some real world tests to come out before final decision.
 
Are you using Civil3d in VM, if so a couple of questions, if that's okay:

Why fusion over parallels?
How many cores and how much RAM do you set to VM?
What GPUs are using?
What single core CPU speed do you have?

I use Bentley and Autodesk for infrastructure in Bootcamp at the moment as my current machines are too slow to run them through VM, apart from excel type works. Need to move to MP now, but still trying to decide between cMP and nMP and have been waiting for some real world tests to come out before final decision.

I do not use any of those pieces of software unfortunately so I can't give you any performance comparison.

I use VMware over Parallels mainly because of familiarity with the products and the quality of VMware products. From what I have witnessed personally, VMware Fusion has proved more stable than Parallels. I have never, that I recall, had a VM crash and lose its contents. I have had the window manager go down, but if that is reopened the VM is right where it was.

The processors I am using are two 3.06 Xeon X5675 processors. GPU is an Apple Radeon 5870. The entire machine including SSD and processors are stock Apple configured. I have only added RAM and three spindles.
 
You can't necessary pin VMWare to certain cores, but it will automatically make use of as many cores as you set up a virtual machine to use.
Just to clarify this a bit more (many people are misunderstanding this): You can not assign any core to Fusion or a specific vm. Fusion will use all the cores available like any other application such as Xcode would do too. What you can do per vm is assign a number of virtual processor cores (it used to be called virtual CPU or vCPU). VMware recommends setting half the amount of physical cores (no hyperthreading "cores"!) as the max. For example: in case of a quad core cpu you can only assign a max number of 2 virtual processor cores to a vm. Assigning too many will cause quite significant performance problems in both the vm as well as OS X.

Generally speaking: start low with whatever you assign to a vm, the defaults are good enough. If this isn't enough crank it up little by little. Most vm's do not need to be assigned heaps of virtual processor cores and memory. If you assign as least as possible you can use whatever is left for OS X itself or assign a huge amount of virtual processor cores/memory to 1 specific vm. Lots of people are getting this wrong and assign way too much to a vm causing all sorts of significant performance problems.

The downside is that you only get 256GB of an SSD (you'll have to upgrade the storage) and no monitor, where as the iMac you have the monitor and get 1TB of storage
The 1TB storage may sound attractive but only if you want vast amounts of storage and don't care about speed since that 1TB of storage will be an ordinary hdd. If you require speed (which most developers do) you still need to upgrade that 1TB drive to either a Fusion Drive or an SSD. For the latter the costs are no different than for the SSD upgrades in the Mac Pro.

The iMac also has to omit on the GPU side (it only has one and it is not as powerful as the ones in the Mac Pro). Also, the iMac has 1 NIC, 2 Thunderbolt ports (on 1 bus), 3 USB3 ports and no HDMI whereas the Mac Pro has 2 NICS, 6 Thunderbolt ports (on 3 busses), 4 USB3 ports and 1 HDMI 1.4 port (you can use a 4k display with this one). The iMac comes with a display so you are stuck with that. The Mac Pro allows you to pick your own display(s) (you can pick up to six) such as a 4k display (the Mac Pro has enough power to drive it, it remains to be seen if the iMac does too).

Simply put: Apple has about 3 options in computing power for desktops: Mac mini (low end), iMac (mid) and Mac Pro (high end). I'd focus on that and try to figure out in which category you belong. Then find out if you want something that already comes with a display (a glossy one even, not everybody likes this) or you want to pick your own and if it will be 1 or more. That way you narrow things down and you'll know what to get (or save for).
 
I do not use any of those pieces of software unfortunately so I can't give you any performance comparison.

I use VMware over Parallels mainly because of familiarity with the products and the quality of VMware products. From what I have witnessed personally, VMware Fusion has proved more stable than Parallels. I have never, that I recall, had a VM crash and lose its contents. I have had the window manager go down, but if that is reopened the VM is right where it was.

The processors I am using are two 3.06 Xeon X5675 processors. GPU is an Apple Radeon 5870. The entire machine including SSD and processors are stock Apple configured. I have only added RAM and three spindles.

Thanks for the reply. I was reading too much into the "infrastructure" part of the quote. :(

Never had a crash on parallels either, but as I said, I Bootcamp when I'm gonna push it hard.

Think I'm gonna have to do a try before I buy on nMP and see if it fits my workflow!
 
Just to clarify this a bit more (many people are misunderstanding this): You can not assign any core to Fusion or a specific vm. Fusion will use all the cores available like any other application such as Xcode would do too. What you can do per vm is assign a number of virtual processor cores (it used to be called virtual CPU or vCPU). VMware recommends setting half the amount of physical cores (no hyperthreading "cores"!) as the max. For example: in case of a quad core cpu you can only assign a max number of 2 virtual processor cores to a vm. Assigning too many will cause quite significant performance problems in both the vm as well as OS X.

This is good info. But I had a question. I run 2-3 virtual machines at a time on an iMac right now. The VM's can have no less than 2 cores (anything less REALLY slows them down). 4 is ideal (feels a little faster--hard to explain, when I say a little, I mean 5% of the time, if that. I think assigning 4 cores is more of an ego thing--wanting something powerful, and having all 3 run at 4 vCPU's right now seems to work OK--although occasionally I get slowdowns on one VM that are really bad, not sure if it's related). I am on the verge of purchasing a Mac Pro (the iMac overheats during sustained processing/compiling and everything slows down), but cannot decide between 6 and 8 cores. 8 cores is +1500, which is a huge bump in price. I understand that they have similar performance when running simple tasks (similar turbo on 2-3 active cores). Assuming that only 1 machine does any heavy lifting at a time and most of the time only 2 run at a same time, is it worth going 8? Price is not too much of an issue (although, no one has 1500 lying around), and I don't want to blindly waste money.

About your statement... If you can only use half the physical cores, does that mean when you run 3 vm's on a 4-physical core machine that you can only run 2 at a time with 1 vCPU assigned?

Doesn't OSX have something called grand central, where it pushes any thread to any core and technically vmware/parallels has no control over it--I think it's called processor affinity? So even if you over provision (6 vcpu's on a 4 physical core machine), it should technically be fine unless you cap all 6 vCPUs?

Any help you provide will be awesome. I have a firm understanding of how ESXi handles it, but no idea how OSX/fusion/parallels handles it as they are definitely different hypervisors. Need to purchase the nMP soon, as I don't want the shipping date to slip to April. And don't want to jump the gun and buy something either underpowered or waste 1500 for no benefit
 
Just to clarify this a bit more (many people are misunderstanding this): You can not assign any core to Fusion or a specific vm. Fusion will use all the cores available like any other application such as Xcode would do too. What you can do per vm is assign a number of virtual processor cores (it used to be called virtual CPU or vCPU). VMware recommends setting half the amount of physical cores (no hyperthreading "cores"!) as the max. For example: in case of a quad core cpu you can only assign a max number of 2 virtual processor cores to a vm. Assigning too many will cause quite significant performance problems in both the vm as well as OS X.

Generally speaking: start low with whatever you assign to a vm, the defaults are good enough. If this isn't enough crank it up little by little. Most vm's do not need to be assigned heaps of virtual processor cores and memory. If you assign as least as possible you can use whatever is left for OS X itself or assign a huge amount of virtual processor cores/memory to 1 specific vm. Lots of people are getting this wrong and assign way too much to a vm causing all sorts of significant performance problems.

Do you have a reference from VMWare about the recommendation to only assign a maximum of half the physical cores to guest VMs? I had always heard the recommendation to leave at least whole physical core for the host, but that otherwise 1 vCPU = 1 hardware thread. In the case of an 8-core nMP, this would give you 14 vCPUs (i.e. 7 cores with 2 H/W threads per core).

I agree with your recommendation to start low, with a single vCPU and then work up if CPU load is >70%. One thing that is often mentioned is that the more vCPUs a VM has, the harder it is for the hypervisor to schedule time to the VM, particularly if the VMs are "over committed" (i.e. you have more vCPUs than physical cores/threads). E.g. if you have a 4 vCPU VM, then the hypervisor has to wait until 4 threads (2 cores in the Intel architecture) are completely "free". This is much harder to achieve than waiting for a single thread to become free. This is why adding more vCPUs to a VM often results in worse performance. There is a happy medium, which you need to find by experimentation for your particular VM. It's often 2-3 vCPUs.

John
 
Do you have a reference from VMWare about the recommendation to only assign a maximum of half the physical cores to guest VMs? I had always heard the recommendation to leave at least whole physical core for the host, but that otherwise 1 vCPU = 1 hardware thread. In the case of an 8-core nMP, this would give you 14 vCPUs (i.e. 7 cores with 2 H/W threads per core).

I run a lot of VMs with Workstation on my desktops and laptops (as well as a vSphere cluster of 256 GiB 16-cores).

One thing that I found out was that VMware is stupid sub-optimal about scheduling multi-core guests.

When a guest gets CPU time, it gets all of the cores that are assigned to it. (It's probably simpler for the VMware VMM that way.)

This means that if a quad core guest needs 1 core, it will be idling three cores during its time slices -- even if the host or other VMs are waiting for CPU.

I normally don't like hyper-threading except for busy servers, but I've had good luck with it with VMware Workstation. I have one quad workstation that I run a busy quad VM on, and it's fine with hyper-threading. The host never gets bogged down.

On my home machine right now (24 GiB Core i7 quad with hyperthreading on) I have an 18 GiB quad guest, a 1.5 GiB dual guest and a 1 GiB dual guest.

It runs fine - there's a little pressure on RAM so that you can tell when you switch to an idle window it lags a little (but the pagefile striped across two fast SSDs helps there).

I think that my rule is "never assign more than half the logical cores to any one guest". (On the ESXi servers at work, hyperthreading is off and the rule is "never assign more than half the physical cores to any one guest".)
 
Last edited:
I run a lot of VMs with Workstation on my desktops and laptops (as well as a vSphere cluster of 256 GiB 16-cores).

One thing that I found out was that VMware is stupid sub-optimal about scheduling multi-core guests.

When a guest gets CPU time, it gets all of the cores that are assigned to it. (It's probably simpler for the VMware VMM that way.)

This means that if a quad core guest needs 1 core, it will be idling three cores during its time slices -- even if the host or other VMs are waiting for CPU.

I normally don't like hyper-threading except for busy servers, but I've had good luck with it with VMware Workstation. I have one quad workstation that I run a busy quad VM on, and it's fine with hyper-threading. The host never gets bogged down.

On my home machine right now (24 GiB Core i7 quad with hyperthreading on) I have an 18 GiB quad guest, a 1.5 GiB dual guest and a 1 GiB dual guest.

It runs fine - there's a little pressure on RAM so that you can tell when you switch to an idle window it lags a little (but the pagefile striped across two fast SSDs helps there).

I think that my rule is "never assign more than half the logical cores to any one guest". (On the ESXi servers at work, hyperthreading is off and the rule is "never assign more than half the physical cores to any one guest".)

I missed the emphasis on maximum cores for a single guest. I'd agree with this rule of thumb, especially if more than one VM guest is running concurrently. I might try to run some benchmarks with hyper threading disabled to see what the real world impact is.
 
I use a rMBP 2012 for this.

I run windows 8 full time in a VM off of my SSD for work. I give it "2 cores" and 2GB of ram. Never have any issue with it.

I usually run 2 or 3 other ubuntu vm's at the same time with 1 core and 1.5 GB of ram each and run them off of external USB 3.0 drives and even they seem to run fine for the most part. The only issue I ever have is RAM. CPU cores never seem to be an issue.

I have considered getting a new mac pro simply for the extra RAM as that seems to be the main bottleneck for running multiple VM's, not processor cores.
 
About your statement... If you can only use half the physical cores, does that mean when you run 3 vm's on a 4-physical core machine that you can only run 2 at a time with 1 vCPU assigned?
It is not my statement, it is what VMware is spilling on their website (knowledgebase and forums) as well as their Fusion twitter account. From what I know is that it will have to run several threads simultaneously (in parallel). This is where things go wrong if you don't have enough cores/cpus (or simply put: there isn't enough hardware to run all those threads simultaneously).

What I've seen is that it can run several vm's just fine. It'll queue the workload (run it in serial) which is why this will work fine.

They are probably taking the overhead into account. It is more like a rule of thumb (it is much easier to say "half the amount of physical cores"). OS X itself also likes multithreading.

Doesn't OSX have something called grand central, where it pushes any thread to any core and technically vmware/parallels has no control over it--I think it's called processor affinity? So even if you over provision (6 vcpu's on a 4 physical core machine), it should technically be fine unless you cap all 6 vCPUs?
OS X does have GCD (Grand Central Dispatch) and so does something like FreeBSD. In both cases the applications need to support it and I have no idea if VMware or Parallels support it. VMware has a pretty solid base which was mostly invented before GCD existed so I'm guessing that they won't support it. ESXi, however, does have support for hyperthreading.

I have a firm understanding of how ESXi handles it, but no idea how OSX/fusion/parallels handles it as they are definitely different hypervisors.
About 90% of the code is shared between Workstation, Fusion, Player and ESXi but there are quite a lot of differences too (like ESXi being able to use hyperthreading and assigning a specific core to a vm, the others can't do this).

Do you have a reference from VMWare about the recommendation to only assign a maximum of half the physical cores to guest VMs?
They spam it in their own forums and on their Fusion twitter account (when it used to be useful; it is now only used for marketing). You'll see it in topics where people are having performance issues and have assigned quite a lot of vCPUs. They used to have it in the "choosing vm settings" document but they made the text a bit more "generic" (it looks as if they are saying "try it yourself and you'll for yourself" aka trial & error). The document does mention that some are seeing an overhead of about 30%.

I agree with your recommendation to start low, with a single vCPU and then work up if CPU load is >70%.
VMware seems to be recommending that too as well as many others. If you mess around with the settings you quickly know why :D
 
It is not my statement, it is what VMware is spilling on their website (knowledgebase and forums) as well as their Fusion twitter account. From what I know is that it will have to run several threads simultaneously (in parallel). This is where things go wrong if you don't have enough cores/cpus (or simply put: there isn't enough hardware to run all those threads simultaneously).

What I've seen is that it can run several vm's just fine. It'll queue the workload (run it in serial) which is why this will work fine.

They are probably taking the overhead into account. It is more like a rule of thumb (it is much easier to say "half the amount of physical cores"). OS X itself also likes multithreading.


OS X does have GCD (Grand Central Dispatch) and so does something like FreeBSD. In both cases the applications need to support it and I have no idea if VMware or Parallels support it. VMware has a pretty solid base which was mostly invented before GCD existed so I'm guessing that they won't support it. ESXi, however, does have support for hyperthreading.


About 90% of the code is shared between Workstation, Fusion, Player and ESXi but there are quite a lot of differences too (like ESXi being able to use hyperthreading and assigning a specific core to a vm, the others can't do this).


They spam it in their own forums and on their Fusion twitter account (when it used to be useful; it is now only used for marketing). You'll see it in topics where people are having performance issues and have assigned quite a lot of vCPUs. They used to have it in the "choosing vm settings" document but they made the text a bit more "generic" (it looks as if they are saying "try it yourself and you'll for yourself" aka trial & error). The document does mention that some are seeing an overhead of about 30%.


VMware seems to be recommending that too as well as many others. If you mess around with the settings you quickly know why :D

Thanks so much for your answer, it really is helpful.

I did some benchmarking, not passmark or anything like that, more timing of visual studio compile times, opening up x amount of programs, etc. It seems there is actually no difference between 2 and 4 vCPU's. The only thing that seemed different is background compile on Visual Studio, the 4 core let you scroll things before the document loaded. But not a big deal since even syntax highlighting doesn't catch up until later.

I do prefer fusion over parallels--mostly due to some bugs that make my workflow hard in parallels; fusion has some too, but it's a choice of which ones I can live with.

Again, thanks for the explanation. I think I'm leaning on 6-core, assigning 2 cores per machine, 8gb of mem and going from there. The small performance boost (if at all) of 4-core isn't enough to warrant a 1500 processor upgrade.

One more time... much appreciated!! Ordering my nMP...
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.