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