Hello,
the CVS head has now support for fetch-result capability in MySQL driver. The usrloc module is already using it. The new feature allow to do incremental load of location records from database. This removes the issue of 'out of private memory' when dealing with huge numbers of active subscribers, with no hacking into the code.
Just as an example, with default OpenSER parameters and compile flags, you can load up to 120 000 location records (within 32MB of share memory and 1MB of private memory per process) - the whole used system memory being about 40MB with default config file. For same number of location entries, but without this feature, OpenSER/SER requires about 256MB.
At this moment, the private memory becomes irrelevant, user location scaling being linear with size of share memory you want to allocate (share memory size can be given via command line parameter -m) -- 256MB of share memory should enough for 960 000 location records and the private memory per worker process can still be 1MB.
More details:
http://www.openser.org/index.php?option=com_content&task=view&id=48&...
Next step on this scalability direction is to have asynchronous user location loading - usrloc database records caching will be done by one of the openser children, the others will process SIP messages - this results in faster openser start/restart.
Cheers, Daniel