Thursday, August 28, 2008

Need multiple CPUs for your VMWare image?

I normally create VMWare images using my laptop for testing and then deploy on servers for production. My laptop only has an Intel Centrino CPU but the target servers have multiple CPUs. My problem lies where VMWare supports multiple CPUs. This means that configuring my VMWare image on my laptop would not take advantage of having the production server running on multiple CPUs. Initially, I thought it was just a matter of changing the numvcpus variable in the VMX file associated with my image. But, then, the processors are only visible on the Computer Management console and not from Task Manager. I found this article on how to change the kernel and hardware abstraction layer on a virtual machine running Windows Server 2003 with Service Pack 2. I downloaded Windows Server 2003 Service Pack 2 to extract the following files

halmacpi.dl_
ntkrnlmp.ex_

Next, I've expanded the appropriate files needed by the HAL and MP Kernel by running the following command in DOS

expand halmacpi.dl_ halmacpi.dll
expand ntkrnlmp.ex_ ntkrnlmp.exe

This will extract the halmacpi.dll and ntkrnlmp.exe files. Next, copy these files on your Windows directory. Type %windir%\system32 in your Run command to retrieve the Windows directory. After copying the files, modify the boot.ini using the System startup parameters option as you won't be able to do so directly using Notepad. Simply add the following items on the active boot option line. Mine looks something like this

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise, ACPI MPS" /fastdetect /NoExecute=OptOut /KERNEL=ntkrnlmp.exe /HAL=halmacpi.dll

I've added the ,ACPI MPS in the partition(1)\WINDOWS parameter (the comma included to separate the original Windows Server 2003, Enterprise value from what I added) and the /KERNEL=ntkrnlmp.exe /HAL=halmacpi.dll values. This will allow Windows to detect it is running on ACPI multi processor machine when it reboots and install the new MPS HAL. Try rebooting the virtual machine and once you manage to log in, it will prompt you to reboot the server after managing to install the new MPS HAL. After the second reboot, check your Task Manager and see the additional processor as your virtual Windows now recognizes the configuration you just did. I wonder if I can still do this even though I only have a single physical processor on my machine. Although that doesn't have much value, its worth trying out.

And so I need a GRANT IMPERSONATE permission

SQL Server 2005 has given us the ability to allow more granular permissions, one of which is the EXECUTE AS clause. This would give the user the ability to impersonate a more privileged user should there be a need to do so. But before a user can do impersonation, it must be given the permission to impersonate. This is where the GRANT IMPERSONATE permission is needed - where a lower privileged user needs to impersonate a higher privileged user and not the other way around, I presume.

I've written an article on MSSQLTips.com to demonstrate how to use the EXCECUTE AS clause with the REVERT clause to impersonate users
Google