Q. I am trying to increase the memory cache for InterMapper Flows in the Advanced settings. However, when I move the slider over to use 1.5 GB, after Flows restarts, the slider is still set to 1 GB.
A. The 32-bit version of Windows restricts userspace programs to a total of 2GB of RAM. Using 32-bit memory addresses gives a theoretical limit of 4GB RAM total, which Windows splits up in 2GB for the application, and 2GB for Windows.
The reason that Microsoft picked this split has to do with memory addresses possibly being interpreted as negative numbers by an application. InterMapper Flows, however, is smart about this, and can use memory beyond those 2GB -- however, Windows must be massaged into giving up an additional 1GB to get to 3GB for the application.
Using the slider in the configuration panel, the memory cache for sessions can be set to 1.5GB -- however, the application itself needs more memory. For instance, threads, exporter and interface storage, graphing canvas, etc. all takes up some space, usually about 300 MB. So in theory, putting the slider on 1.5 keeps the total footprint under 2GB. However, we have found that Windows does not always allocate memory in that way, and sometimes denies us the 1.5GB for session cache.
There are a number of solutions to trick Windows into playing along. The second method is the recommended way.
1. Open to the Services control panel, and stop the IMFlows service. When it is stopped, manually edit the C:\Program Files\ns2flows\netsaw.conf file. Change the numbers for 'conntracksize', and 'memcachesize' to these values:
- conntracksize 314572
memcachesize 6291456
Restart the IMFlows, and see if it accepted the new values.
2. The second method is to tell Windows that we would prefer a 1GB/3GB split, instead of a 2GB/2GB split. It requires a reboot of the system. There are many online descriptions available; this is a good one: