This is always interesting topic about using 1 core in VM most likely get better performance comparing with using 4 cores, not mention 8 cores. However, there are cases you want to use 8 cores vCPUs. I have recently experienced this real case and I would like to share it to you.
Why do we need to have multiple cores in VM?
Well, first of all, let me introduce our environment to you. We are using Dynamics AX 2009 and recently are conducting MRP model Test. MRP model requires to run batch jobs which could take up to 7 hours to finish on single core VM. The database of Dynamics AX 2009 is on our SQL box but , with batch job, most of them are CPU work and it runs on a VM.
As what I mentioned above, with single core (Dynamics AX 2009 MRP natively only run one thread even on multiple cores machine), the time of finishing batch job is unacceptable in real world. Therefore, Microsoft develops “helper” to assist. Each helper suppose to represent a core. It means, if I run batch job on 4 core VM, I need to setup 3 helpers (plus original one thread to make it 4).
Microsoft is not recommending to run batch jobs on VM (because their hyper-v sucks? 😉 ) but I’m pretty happy to put it into test. Before you continue to read on, I have to remind you MRP helpers are very new to this world. It is far from perfect….. yes, far far from………
My test Environment:
SQL: SQL 2005 with latest patch running on physical box
VM: Windows 2003 Standard 32bit
ESX Host software: ESXi, 4.1.0 260247 with Evaluation license
There is only one VM running on that ESX Host.
ESX Host hardware: HP Proliant DL380 G5, 2 Quad Core X5460, 16GB mem.
Storage: SAN, EMC CX3
Tools involved: Performance Monitor on Windows, ESXtop, vMA 4.1, FASTSCP,Excel,ESXplot
Number of core: 4, 8 (each Test involves different number of cores)
Single Core Test
This is a Test running without any helpers and distributions. It means batch server is running single thread on 4 cores VM. Distribution is number of job list. In theory, number of distribution should equal number of cores.
First Test, bench mark test
Test Num | distribution | Helpers | Job Name | Running time | ||
1 | 0 | 0 | FP20 | 260 min |
Batch VM Performance (the performance monitor is setup as 8 cores, but VM only has 4 cores)
From this picture, you can see only one core has been used. It’s about 38% utlization.
Line graphic of VM CPU
HOST status
This is result I got from esxtop. This is total CPU loader status. Since we are using VM, so single virtual core job is distributed to 8 physical cores. It runs about 13% of physical CPU resources. This is utilization of pCPU which include pCPU over head.
Test 2 with 3 helpers and 4 distributions
Test Num | distribution | Helpers | Job Name | Running time | |
1 | 0 | 0 | FP20 | 260 min | |
2 | 4 | 3 | FP20 | 207min |
Notice we are using much less time in this test!! The new test is only using 79% time of single thread.
This is 4 cores VM. Notice the blue core utilization is very low. It’s possible that windows reserve one core for it’s OS. All cores were utilized very low!
However, as what I said, the helpers are very new for MRP. So it’s very poor coded. Let’s see what each vCPU has done during the time.
vCPU0
Notice there are time vCPU0 was very low utilized..
vCPU1
vCPU2
My best guess is this is reserved core for OS.
Poor coding….
Let’s check out HOST CPU
Notice that physical CPU usage is actually higher than single thread.
Test 6 with 8 cores VM and 12 helpers, 6 distribution
I did some other tests with 8 cores. I setup vm with 8 cores and lots of helpers and distributions. As you can see, the running time is shorted again. But as what I said, due to poor coding, it’s not always effective as I expected.
Test Num | distribution | Helpers | Job Name | Running time | |
5 | 5 | 7 | FP20 | 180min | |
6 | 6 | 12 | FP20 | 168min |
None of cores are running more than 40%. Still, it’s coding issue.
vCPU0
vCPU1
The problem of this poor coding is it doesn’t use all cores in all the time. There are lots of time only few cores are used.
vCPU2,4,6
There 3 cores running in this shape. It’s pretty pity resources are wasted.
vCPU3,7
This is not bad usage.
ESX Host CPU
As you can see, the maximum usage has reached to 40%. but for the rest period, the usage dropped due to few cores were used.
Let’s see what a single physical CPU doing on ESX host
pCPU07
There are lots of up and down and spikes due to distribution by ESX layer.
Conclusion of this Test:
1. Dynamics AX batch server can run on VM. As matter of fact, it works pretty good with current MRP helpers patch. You can load up with other VMs to utilize more CPU resources.
2. 8 cores does help a lot in this case. Since all cores were only used less than 40%! Thank God we are using virtualization layer and all virtual cpu jobs are distributed to physical CPUs.
Leave ur comments. 😉
2 Comments
Keep up the good work.I’ll return often.
Can you perhaps comment on this thread?
http://community.dynamics.com/product/ax/f/33/p/47756/86887.aspx