< Previous by Date Date Index Next by Date >
  Thread Index  

[reSIProcate] resip transaction state memory utilization in UDP


Hi,

I've been working on optimizing resip stack thruput, primarily in the context of handling many connections. Something I've noticed is that a large amount of memory is consumed when using UDP transports. Once I got past thinking this was a bug I had introduced, I realized this memory is probably state kept in within the transaction layer to handle retransmissions. (I'm not using dum, so not a lot of other places it could be :-).

The amount of state appears quite large: Using testStack (which handles both "ends" of the transaction), with 50k requests within 10sec window, the memory utilization is around 620MB (compared to around 80MB when transmissions are throttled). This is around 6kB per transaction-half. This state is all properly released after the 32sec window. In theory, peak memory utilization is around 5k tps * 32sec * 6kB = 960MB = ~1GB.

Are there any thoughts on how the transaction memory could be reduced? Clearly, this isn't just timers. More likely it is copies of SipMessages. On the UAC side, is the request message released once the response is received? On the UAS side, is the request message released once the response has been generated? I'm just looking for a sense of how much this has already been optimized, and if this has already been investigated.

Thanks,
Kennard