[libvirt] [PATCH v2 1/2] rpc: Switch to dynamically allocated message buffer

Michal Privoznik mprivozn at redhat.com
Thu May 17 08:57:36 UTC 2012


On 17.05.2012 00:11, Eric Blake wrote:
> On 05/15/2012 09:04 AM, Michal Privoznik wrote:
>> Currently, we are allocating buffer for RPC messages statically.
>> This is not such pain when RPC limits are small. However, if we want
>> ever to increase those limits, we need to allocate buffer dynamically,
>> based on RPC message len (= the first 4 bytes). Therefore we will
>> decrease our mem usage in most cases and still be flexible enough in
>> corner cases.
>> ---
>>  src/rpc/virnetclient.c       |   16 ++-
>>  src/rpc/virnetmessage.c      |   12 ++-
>>  src/rpc/virnetmessage.h      |    5 +-
>>  src/rpc/virnetserverclient.c |   24 +++-
>>  tests/virnetmessagetest.c    |  393 +++++++++++++++++++++++-------------------
>>  5 files changed, 266 insertions(+), 184 deletions(-)
> 
> In isolation, this patch should have no impact on RPC, while enabling
> the next patch.  And your point of using less memory by default may have
> slight benefits.  I still wonder if pre-allocating a default size (maybe
> 4k?), and only reallocating bigger as needed, followed by releasing back
> to the default size, may help reduce malloc() calls, but we'd need to
> benchmark that to know for sure, and I'm okay saving it for a separate
> patch.
> 
>> @@ -1030,8 +1036,13 @@ virNetClientIOReadMessage(virNetClientPtr client)
>>      ssize_t ret;
>>  
>>      /* Start by reading length word */
>> -    if (client->msg.bufferLength == 0)
>> +    if (client->msg.bufferLength == 0) {
>>          client->msg.bufferLength = 4;
>> +        if (VIR_ALLOC_N(client->msg.buffer, client->msg.bufferLength) < 0) {
>> +            virReportOOMError();
>> +            return -ENOMEM;
>> +        }
> 
> For example, this would be one location where default allocation of a
> larger size will avoid the churn of malloc'ing 4 bytes followed by
> realloc'ing to something bigger.
> 
> ACK.
> 


Agree definitely. I'll post follow up patch as soon as this is committed.




More information about the libvir-list mailing list