1, good question. I always assumed all could. My understanding was though that use of multiple threads was less common.
I am going to ask a few VMS manufacturers to comment here. Thanks for asking!
IPConfigure, Inc. | 09/11/15 06:26pm
I am VP of Engineering for IPConfigure.
Our Enterprise Surveillance Manager (ESM) VMS is a .NET product that uses a combination of multithreading and multiple recording processes in order to use all available CPU cores. Our Orchid VMS is a cross-platform C++ product that runs within a single process but is heavily multithreaded (separate threads for each recording stream, for each client connection, for each playback stream, etc.) in order to use all available CPU cores.
I would be extraordinarily surprised if any modern, production VMS were not capable of using multiple processors.
I have to echo R. Cortland... every VMS I've used in the last 5 years recognized multiple core/multiple processors on the motherboard.
I am not aware of any that do not make use of multiple threads to utilize multiple cores. Many benefit from hyperthreading as well.
I can't speak for all VMS systems but I too would be surprised if any modern VMS was not getting the most out of multiple processors.
Exactly how the overall server load gets distributed across processors/threads depends a lot on the architecture of the individual VMS. For example, a system that heavily utilizes SQL Server would distribute that load as per SQL Server/Windows' design.
The areas where a VMS might heavily utilize CPU would be around video processing such as encoding, transcoding, decoding, as part of manipulating that video or analytics (for example). This is an area where poorly designed software could conceivably be written such that it doesn't somehow make the best use of the available hardware. But then, again, even this software is likely to be based on libraries and frameworks already designed to take advantage of multithreaded and multiprocessor architectures.
Also, manufacturers are often competing on performance of the VMS. Towards that end it's in our best interest to ensure we're getting the most out of the hardware in order to compete favorably.
Does anybody know what VMS's (if any) are advanced enough to recognize and utilize multiple processors on a single server?
Strictly speaking I would say not necessarily to the first but definitely to the second.
Meaning that it is not necessary for the VMS to detect and analyze the CPU capacity and number of cores, and then take some conditional optimization based upon that analysis. They could, of course, and if that's the question then it will be interesting to see if any do.
But if you are really asking only if they get the benefits of a multiprocessing architecture, then the answer would have to be yes, without question.
One reason, pointed out by Steve, is that regardless of whatever their high level code is, VMSes by their nature deal in large amounts of I/O which at some point get turned over to either a RDBMS or the OS or the BIOS. And often all three, in that order.
These routines are well-devised specifically for multi-threaded concurrent performance and no matter what a good chunk of time will be spent inside of them.
Another reason is that it is virtually impossible to write a multi-camera VMS without resorting to at least a one-process per camera model. To write the whole thing as one single monolithic process that read from a little from one, does a little decoding, check for motion, writes a little to the disk, then goes to the next camera would be ridiculous. You might as well write your own preemptive multitasker.
If you want to check out your own VMS, download the sysinternals utilities from Microsoft. There is one called procexp that can show you the processes and their associated threads. My guess is you will see hundreds on a decent size production server.