|
Fine Soft Studio developed one of the most efficient Memory Manager in the world.
Applications that use our Memory Manager show striking improvement of
runtime performance, especially on multiprocessor platforms.
Business Description
Existing hardware is constantly improving. Multiprocessors and CPUs with
more then one core becoming usual things. From new applications are
expected to use efficiently the possibilities of coming hardware. One of
the most important system components is Memory Manager - the part of the
system that manages program memory so that the program can run most
efficiently. Modern programs have object-oriented, multithreaded
architectures which put a lot of pressure on memory manager. For web
applications hit processing time is measured in milliseconds, so it is
very important to have optimized each component of the system.
About 20% of CPU time is spent for managing memory. The application
memory manager must keep it up with minimum of CPU overhead, and the total
memory used.
But existing memory managers have not cope with this goals adequately
especially when running on multi CPU ore multi-core modern hardware.
Existing memory managers are not able to get most of computer hardware and
substantially limit hardware scalability. When we add new processor, or
additional core to CPU programs slow down. Instead of expected linear
increase runtime performance decreases because memory managers have memory
locking problems.
If two threads request a memory at the same time, the memory manager must
enqueue the requests before processing them. One thread must wait for
another thread's request to be processed. This serialization step is a
large performance barrier, resulting in scaling problems.
The challenge was to build own memory manager which ensures increasing of
application runtime performance when new CPU is added and which must be
memory space efficient and very fast.
Solution and key benefits
We developed our own Memory Manager. It uses advanced memory management algorithm.
The key benefits of our Memory Manager are:
 |
it does not use critical sections (uses no-blocking algorithm) |
 |
it does not require CPU context switching |
 |
Memory Manager 100% effectively consumes all CPUs which are in system |
 |
Memory Manager does not have performance degradation when CPU count
increases (performance of other memory managers either do not increase
or even decrease when CPU count increase) |
 |
optimized work with memory blocks of any size |
 |
even after long time of work memory is not fragmented.
It is very important for web applications, or for applications which
should run for long time without restart - like database servers,
operation systems, etc
|
 |
Memory Manager has built-in logic to capture memory leaks and do memory
dumps to see memory disposition/reallocations during application execution
|
 |
You don't need to make any changes in your existing code to use our Memory Manager |
Test application
Application creates a specified number of threads. Each thread executes
same actions (emulating memory manager real usage): randomly selects pointer
from an array and allocates block of memory if pointer is not assigned or
frees memory if pointer is assigned. Size of the memory block is random
within defined margins. Application calculates total number of memory block
allocations and releases in millions per sec. Resulting value is the
maximum value achieved during specified period (higher is better).
Test system configuration: CPU - Inter Core 2 Quad (4 cores), OS - Windows Server 2003
Testing Results
Memory Manager (expected perfomance growth) |
1 thread |
2 threads (+100%) |
3 threads (+200%) |
4 threads (+300%) |
10 threads (+300%) |
50 threads (+300%) |
Our Memory Manager (actual perfomance growth) |
33.9m/sec |
67.8m/sec (+100%) |
101.6m/sec (+199%) |
131.5m/sec (+287%) |
132.0m/sec (+289%) |
134.5m/sec (+296%) |
Microsoft .NET 2.0 (*) (actual perfomance growth) |
15.2m/sec |
27.8m/sec (+82%) |
37.2m/sec (+144%) |
45.7m/sec (+200%) |
42.6m/sec (+180%) |
39.3m/sec (+158%) |
Borland Delphi 2006 (actual perfomance growth) |
23.5m/sec |
21.0m/sec (-11%) |
20.7m/sec (-12%) |
20.5m/sec (-13%) |
19.7m/sec (-16%) |
19.3m/sec (-18%) |
Microsoft Visual C++ 2003 (actual perfomance growth) |
8.1m/sec |
3.0m/sec (-63%) |
1.4m/sec (-83%) |
1.3m/sec (-84%) |
1.2m/sec (-85%) |
1.1m/sec (-86%) |
Borland Delphi 5 (actual perfomance growth) |
9.5m/sec |
3.6m/sec (-62%) |
1.7m/sec (-82%) |
1.7m/sec (-82%) |
1.6m/sec (-83%) |
1.4m/sec (-85%) |
* - memory manager in .NET by default initializes allocated memory block to
zeros. In diagram we showed extrapolated values to eliminate this factor.
Real values are about 25% less.
Testing Results Analysis
As you may see from the table above our Memory Manager shows dramatic
performance increase even for single threaded mode and perfect scalability
for multithreaded mode on multiprocessor/multicore system. The closest
competitor MS NET 2.0 shows 2 times less performance even for single
threaded mode and much less scalability. Other memory managers shows even
performance degradation when running in multithreaded mode.
Testing Results on 16 Cores system
As a Partner in IntelĀ® Software Partner Program we got access to latest
hardware platforms and tested our Memory Manager on 16 Cores system (4 CPU
Intel Xeon, 4 Cores each). Perfomance increase of our application running
on such system reached unbelievable 15.5 times!
Conclusion
It is just not acceptable to lose so much of hardware power just because of
imperfect software. We pay much attention to optimization of each system
level component, and this allows us to reach high level of perfomance and
speed.
|