MAXMD = 0.01 * MEMPCT * MDHW
FMS includes a memory management system for scratch storage of work arrays. When you call FMSINI, a pool of memory is allocated. Individual FMS task check memory out of this pool as needed. When the memory is no longer required, it is returned back to the pool.
All FMS routines which use scratch memory check the memory pool prior to execution to determine the amount of memory available. They then adjust their algorithm and storage requirements to operate within the available space.
Your application may also use memory from the FMS memory pool by calling routines FMSIMG, FMSRMG or FMSCMG. When you no longer need the memory you may return it to the pool by calling FMSIMR, FMSRMR and FMSCMR. This allows the non-FMS part of your application to share the same memory used by FMS.
FMS is designed to operate over a wide range of MAXMD values. In general, increasing MAXMD will reduce the amount of data FMS rereads from disk. If you notice that FMS is spending excessive time waiting for I/O to complete, you should try increasing the value of MAXMD. However MAXMD should not be increased beyond MDHW (the amount of physical memory in the machine), or excessive page faults will result.
On machines without virtual memory there is a hard upper limit to the value of MAXMD. Trying to set MAXMD above this limit will result in a FMS system error.
On virtual memory machines it is possible to set MAXMD to a value that is larger than the amount of physical memory. However this will result in page faults and degrade performance.
If you run multiple FMS jobs simultaneously, you may want to decrease the default value of MAXMD to reduce contention for the memory. What counts is the sum of the values of MAXMD in all concurrent FMS jobs. If this value is less than the amount of physical memory, the memory is under subscribed. If this value is greater than the amount of physical memory, the system is oversubscribed.
Some over subscription of memory will usually increase throughput, especially if the non-FMS part of your application has not been converted to run in parallel. A few tests will usually show the best combination of MAXMD for the concurrent FMS jobs. Note that each individual FMS job can have a different value of MAXMD.