OpenStaxk: use cpu accross multi servers - cpu

I have Blade Server and I want to know that how its possible to use cpu/ram between blades.
I want to have a machine with 32 physical cpu and I want all cpus work together.
Is it possible to share cpu between servers ?

No, it is not possible without explicit support from the software. You can't run single-thread program on several cpu cores; and you can ru multi thread program on different unconnected (not coherent) physical cpus.
Different blades are different servers, every one of them has own OS instance. They have no memory coherence, only network connection, so it is task of your software (and of its programmer) to split the task between several processes and connect them using network. In computer clusters there is MPI interface to make programming of such programs easier.
There were several project to emulate shared memory system (or single OS instance system) using cluster of PCs without coherent memory, but they are abandoned and/or too slow: Intel cluster openmp, https://en.wikipedia.org/wiki/Single_system_image (MOSIX/OpenMOSIX), ScaleMP, different software DSM (https://en.wikipedia.org/wiki/Distributed_shared_memory#Software_DSM_implementation)...

Related

Is a VM's speed affected by programs running outside of it?

I'm testing the speed of different sorting methods for a CS class, and although our professor said we didn't need to be terribly precise, he still wants us to be careful not to run apps in the background while testing, use a different machine, or do anything to throw the speed of the sorts off.
If I ran the tests in a VM, would the environment outside of the VM affect the speed? Would that help make the tests accurate without having to worry about changes in the apps I have open alongside the VM?
In short, yes.
In most scenarios, hosts share their resources with the VM. If you bog down/freeze/crash the host then the VM will be affected.
For those that have more robust servers with better resources, processes running in the host won't affect the VM as much. Because if you have more resources on the host you can assign better RAM and Virtual Processors to the VM so it runs smoothly.
For instance, let's say our host has 64GB of RAM a processor that has 4 cores and 8 threads (such as an Intel® Xeon® E3-1240 Processor).
We can tell VirtualBox, VMware or Hyper-V to assign 32GB of RAM and 4 virtual processors to the VM, essentially cutting the host's power by half.
With this in mind, any processes you run on the host will usually be separate from the VM but if the processes freeze, crash or cause a hard reboot on the host then the VM will be affected regardless of RAM or virtual processors assigned.
In enterprises environments, a hyper-v server should only be used for that purpose and installing/running a lot of processes in the host is usually frowned upon (such as installing/running DHCP, DNS, Web Server (IIS), etc).
So your professor is right to advise against running processes on the host while testing your VM.

Cluster with Windows 7

Let me keep it simple. I am working in a company on a Software which has a built in auto marking system (Which needs a lot of computer resources). There are Many PCs in my department all with Windows 7 32-Bit and have almost same specs (Same Modal, RAM, Processor). They are connected by LAN Network with 100 Mbps speed. Now i want to make a cluster of computers so i can Run that software on that by utilizing maximum resources of all computers. Is there any special software for that?
I would recommend using a much faster switch. Because they are limited to 100mbps, you will see a low performance gain if any. Here is a link where there are instructions of how to setup a cluster with Windows. But I recommend getting at least a 1Gbps switch since the nodes will need to send data back and forth to each other. Of course, make sure that the computer's ethernet port supports 1Gbps.
https://social.technet.microsoft.com/wiki/contents/articles/2539.diy-supercomputing-how-to-build-a-small-windows-hpc-cluster.aspx

How many CPUs Are Optimal For simultaneous Vagrant Virtual Machines?

I am trying to decide how to tune Vagrant VMs for performance. In this case, the application is web development (linux + ruby + node.js + java, etc).
I usually have to run either one VM by itself, or two VMs simultaneously. In my case, it's on a Macbook Pro, but for the organization, various types of machines will be used.
I have a Vagrantfile that dynamically selects the number of CPUs to use for each VM (e.g., half the available cores, all the available cores, etc), and can also do this with RAM (e.g., 1/4 of total system RAM).
What I'm wondering is: if one has all their Vagrant VMs set to use half or all of the CPU cores, and they run 2 or more VMs simultaneously, how does this play out?
Is it better, or worse, technically, in terms of total performance, given this application (web development)?

Detecting HyperThreading without CPUID?

I'm working on a number-crunching application and I'm trying to squeeze all possible performance out of it that I can. I'm designing it to work for both Windows and *nix and even for multi-CPU machines.
The way I have it currently set up, it asks the OS how many cores there are, sets affinity on each core to a function that runs a CPUID ASM command (yes, it'll get run multiple times on the same CPU; no biggie, it's just initialization code) and checks for HyperThreading in the Features request of CPUID. From the responses to the CPUID command it calculates how many threads it should run. Of course, if a core/CPU supports HyperThreading it will spawn two on a single core.
However, I ran into a branch case with my own machine. I run an HP laptop with a Core 2 Duo. I replaced the factory processor a while back with a better Core 2 Duo that supports HyperThreading. However, the BIOS does not support it as the factory processor didn't. So, even though the CPU reports that it has HyperThreading it's not capable of utilizing it.
I'm aware that in Windows you can detect HyperThreading by simply counting the logical cores (as each physical HyperThreading-enabled core is split into two logical cores). However, I'm not sure if such a thing is available in *nix (particularly Linux; my test bed).
If HyperTreading is enabled on a dual-core processor, wil the Linux function sysconf(_SC_NPROCESSORS_CONF) show that there are four processors or just two?
If I can get a reliable count on both systems then I can simply skip the CPUID-based HyperThreading checking (after all, it's a possibility that it is disabled/not available in BIOS) and use what the OS reports, but unfortunately because of my branch case I'm not able to determine this.
P.S.: In my Windows section of the code I am parsing the return of GetLogicalProcessorInformation()
Bonus points: Anybody know how to mod a BIOS so I can actually HyperThread my CPU ;)? Motherboard is an HP 578129-001 with the AMD M96 chipset (yuck).

MS-Windows scheduler control (or otherwise) -- test application performance on slower CPU?

Is there some tool which allows one to control the MS-Windows (XP-SP3 32-bit in my case) scheduler, s.t. a target application (which I'd like to test), operates as if it is running on a slower CPU. Say my physical host is a 2.4GHzv Dual-Core, but I'd like the application to run as if, it is running on a 800MHz/1.0GHz CPU.
I am aware of some such programs which allowed old DOS games to run slower, but AFAIK, they take the approach of consuming CPU cycles to starve the application. I do not want such a thing, and also would like to have higher precision control on the clock.
I don't believe you'll find software that directly emulates the different CPUs. But something like ProcessLasso would let you control a programs CPU usage. Thus simulating, in a way, a slower clock speed.
I also found this blog entry with many other ways to throttle your CPU: Windows CPU throttling techniques
Additionally, if you have access to VMWare you could setup a resource pool with a limited CPU reservation.

Resources